private Table TextToTable(XNamespace ns, List <XElement> selections) { TextToTableDialog.Delimeter delimetedBy; string delimeter; int cols, rows; bool hasHeader; bool unquote; using (var dialog = new TextToTableDialog()) { var first = selections[0].Value; if (first.Contains('\t')) { dialog.DelimetedBy = TextToTableDialog.Delimeter.Tabs; dialog.Columns = first.Split(new char[] { '\t' }).Length; } else if (first.Contains(',')) { dialog.DelimetedBy = TextToTableDialog.Delimeter.Commas; dialog.Columns = first.Split(new char[] { ',' }).Length; } else { dialog.DelimetedBy = TextToTableDialog.Delimeter.Paragraphs; dialog.Columns = 1; } dialog.Rows = selections.Count; if (dialog.ShowDialog(owner) == System.Windows.Forms.DialogResult.Cancel) { return(null); } rows = dialog.Rows; cols = dialog.Columns; delimetedBy = dialog.DelimetedBy; switch (delimetedBy) { case TextToTableDialog.Delimeter.Commas: delimeter = ","; break; case TextToTableDialog.Delimeter.Tabs: delimeter = "\t"; break; case TextToTableDialog.Delimeter.Other: delimeter = dialog.CustomDelimeter; break; default: delimeter = string.Empty; break; } hasHeader = dialog.HasHeader; unquote = dialog.Unquote; } var table = new Table(ns, rows, cols) { BordersVisible = true }; for (int r = 0; r < selections.Count; r++) { var selection = selections[r]; var row = table.Rows.ElementAt(r); if (delimetedBy == TextToTableDialog.Delimeter.Paragraphs) { SetCellContent(row.Cells.ElementAt(0), selection.Value.Trim(), r, unquote, hasHeader); } else { var parts = selection.Value.Split(new string[] { delimeter }, StringSplitOptions.None); for (int c = 0; c < parts.Length && c < cols; c++) { SetCellContent(row.Cells.ElementAt(c), parts[c].Trim(), r, unquote, hasHeader); } } } return(table); }
void Command_Table_TextToTable(TextToTableDialog.Result result) { if (Selections.Count != 1) throw new Exception("Must have one selection"); if (!Selections[0].HasSelection) throw new Exception("Must have data selected"); var columns = new List<Tuple<int, int>>(); for (var ctr = 0; ctr < result.LineBreaks.Count - 1; ++ctr) columns.Add(Tuple.Create(result.LineBreaks[ctr], result.LineBreaks[ctr + 1])); var rows = GetSelectionStrings().Single().Split(new string[] { "\r\n", "\r", "\n" }, StringSplitOptions.None).NonNullOrEmpty().Select(line => columns.Select(col => line.Substring(Math.Min(line.Length, col.Item1), Math.Min(line.Length, col.Item2) - Math.Min(line.Length, col.Item1)).Trim()).ToList()).ToList(); OpenTable(new Table(rows)); }