Exemplo n.º 1
0
        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 "&nbsp;" so we can assume this represents a tab
            string nbsp = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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);
        }
Exemplo n.º 2
0
        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);
        }