private void button1_Click(object sender, RibbonControlEventArgs e) { var selectedRange = LatexTable.Globals.ThisAddIn.Application.Selection as Microsoft.Office.Interop.Excel.Range; var selectedAreas = selectedRange.Areas as Microsoft.Office.Interop.Excel.Areas; bool enable_hide_skip = skipHidden.Checked; RangeConvert rc = new RangeConvert(selectedAreas[1], enable_hide_skip); Tabular tab = new Tabular(rc); Table tb = new Table(); tb.has_centering = enableCentering.Checked; tb.has_caption = hasCaption.Checked; tb.caption_content = Caption.Text; tb.has_label = hasLabel.Checked; tb.label_content = Label.Text; tb.resize = fitWidth.Checked; tb.position = position.Text; Clipboard.SetText(string.Join("\n", tb.Create_table(tab))); // MessageBox.Show(tb_buff); }
private void SaveFileButton_Click(object sender, RibbonControlEventArgs e) { var selectedRange = LatexTable.Globals.ThisAddIn.Application.Selection as Microsoft.Office.Interop.Excel.Range; var selectedAreas = selectedRange.Areas as Microsoft.Office.Interop.Excel.Areas; bool enable_hide_skip = !skipHidden.Checked; RangeConvert rc = new RangeConvert(selectedAreas[1], enable_hide_skip); Tabular tab = new Tabular(rc); Table tb = new Table() { has_centering = enableCentering.Checked, has_caption = hasCaption.Checked, caption_content = Caption.Text, has_label = hasLabel.Checked, label_content = Label.Text, resize = fitWidth.Checked, position = position.Text }; // Generate SaveFileDialog SaveFileDialog sa = new SaveFileDialog(); sa.Title = "Save Table as File"; sa.FileName = @"table.tex"; sa.Filter = "Latex File(*.tex)|*.tex|All Files(*.*)|*.*"; sa.FilterIndex = 1; // Show Dialog DialogResult result = sa.ShowDialog(); if (result == DialogResult.OK) { string fileName = sa.FileName; var writer = new System.IO.StreamWriter(fileName, false); writer.WriteLine(string.Join("\n", tb.Create_table(tab))); writer.Close(); } else if (result == DialogResult.Cancel) { } }
public Tabular(RangeConvert tb_dataset) { // 初期化 colnum = tb_dataset.colnum; rownum = tb_dataset.rownum; // 内部のコンテンツリスト contents = new List <string> [rownum]; for (int i = 0; i < tb_dataset.rownum; i++) { contents[i] = new List <string>(); } // 列の水平罫線リスト hrule_lines = new string[rownum]; LineType[] hrule_linetypes = new LineType[colnum]; // 表の上の罫線をチェック for (int j = 0; j < colnum; j++) { hrule_linetypes[j] = tb_dataset.hrule_map[0, j]; } hrule_top = hrule_str(hrule_linetypes); // フォーマットの作成 LineType[] vrule_linetypes = new LineType[colnum + 1]; Align[] valign_types = new Align[colnum]; vrule_linetypes[0] = tb_dataset.vrule_map[0, 0]; for (int j = 0; j < colnum; j++) { vrule_linetypes[j + 1] = tb_dataset.vrule_map[0, j + 1]; valign_types[j] = tb_dataset.align_map[0, j]; } format = tabular_format(vrule_linetypes, valign_types); // 中身のコンテンツ行を作成 for (int i = 0; i < rownum; i++) { for (int j = 0; j < colnum; j++) { // セルの水平方向罫線を生成するための配列を作る。 hrule_linetypes[j] = tb_dataset.hrule_map[i + 1, j]; // フォーマット CellSize cell_size = tb_dataset.cellsize_map[i, j]; // 先頭列の文字装飾 LineType lvrule_top = tb_dataset.vrule_map[0, j]; // left vrule LineType rvrule_top = tb_dataset.vrule_map[0, j + cell_size.col]; // right vrule +1をmulticol分増やす? Align cell_align_top = tb_dataset.align_map[0, j]; // 文字装飾 LineType lvrule = tb_dataset.vrule_map[i, j]; // left vrule LineType rvrule = tb_dataset.vrule_map[i, j + cell_size.col]; // right vrule +1をmulticol分増やす? Align cell_align = tb_dataset.align_map[i, j]; MergeType cell_mergeType = tb_dataset.merge_map[i, j]; // コンテンツ string cell_content = tb_dataset.contents[i, j]; // マージセルの左上 if (cell_mergeType == MergeType.lefttop) { contents[i].Add(multicell(cell_size, cell_content, lvrule, cell_align, rvrule, lvrule_top, cell_align_top, rvrule_top)); } // マージセルの一番上の行 -> 一番左以外はまとめられるのでスキップ else if (cell_mergeType == MergeType.top) { continue; } // マージセルの一番上以外の行 else if (cell_mergeType == MergeType.nottop) { // 基本結合されるので空白の行だが、罫線はmulticolumnなどで反映する必要がある場合もある。 contents[i].Add(multicell(cell_size, "", lvrule, cell_align, rvrule, lvrule_top, cell_align_top, rvrule_top)); } // 結合セルではない。 else { contents[i].Add(multicell(cell_size, cell_content, lvrule, cell_align, rvrule, lvrule_top, cell_align_top, rvrule_top)); } } // セルの下水平方向罫線を出力 hrule_lines[i] = hrule_str(hrule_linetypes); } }