private Table TextToTable(XNamespace ns, List <XElement> selections) { // when pasting text with tabs \t from Notepad into OneNote, OneNote will preserve // the tabs internally but the presentation XML through the COM API will transform // them to a sequence of 8x " " so we can assume this represents a tab string nbsp = " "; 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 if (first.Contains(nbsp)) { dialog.DelimetedBy = TextToTableDialog.Delimeter.Nbsp; dialog.Columns = first.Split(new string[] { nbsp }, StringSplitOptions.None).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.Nbsp: delimeter = nbsp; 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); }
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); }