Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
0
		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));
		}