示例#1
0
        public WordTableDef AddTable(ContentStyle style = null)
        {
            var result = new WordTableDef();

            AddItem(result);
            if (style != null)
            {
                result.Style = style;
            }
            return(result);
        }
        private void AddTableRepeatSection(WordTableDef tableDef, XmlNode node)
        {
            var dataSetAttr = node.Attributes != null ? node.Attributes["dataset"] : null;
            var dataSet     = dataSetAttr != null ? _dataSets[dataSetAttr.Value] : _dataSets.First().Value;
            var reset       = node.Attributes != null && node.Attributes["reset"] != null;

            var oldStyle = new ContentStyle(_style);

            try
            {
                SetSectionStyle(node);

                var sectionDef =
                    tableDef.AddSection(new WordTableRepeatSectionDef(dataSet)
                {
                    ResetDatas = reset, Style = _style
                });

                _dataSetStack.Push(dataSet);
                try
                {
                    foreach (XmlNode child in node.ChildNodes)
                    {
                        if (String.Equals(child.Name, "tr", StringComparison.OrdinalIgnoreCase))
                        {
                            AddTableRow(sectionDef, child /*, ref rowNo*/);
                        }
                    }
                }
                finally
                {
                    _dataSetStack.Pop();
                }
            }
            finally
            {
                _style.Assign(oldStyle);
            }
        }
        private void AddTable(WordGroupDef wordDoc, XmlNode table)
        {
            var oldStyle = new ContentStyle(_style);

            try
            {
                SetSectionStyle(table);

                var tableDef = new WordTableDef {
                    Style = _style
                };
                wordDoc.AddItem(tableDef);
                var tableFullWidth = table.Attributes != null ? table.Attributes["fullwidth"] : null;
                tableDef.FitWidth = tableFullWidth != null;
                // var rowNo = 0;
                var repeatSection = true;
                foreach (XmlNode child in table.ChildNodes)
                {
                    if (String.Equals(child.Name, "tr", StringComparison.OrdinalIgnoreCase))
                    {
                        var tableSectionDef = repeatSection
                            ? tableDef.AddSection(new WordTableSectionDef())
                            : tableDef.Sections.LastOrDefault();

                        AddTableRow(tableSectionDef, child /*, ref rowNo*/);
                        repeatSection = false;
                    }
                    else if (String.Equals(child.Name, "repeat", StringComparison.OrdinalIgnoreCase))
                    {
                        AddTableRepeatSection(tableDef, child /*, ref rowNo*/);
                        repeatSection = true;
                    }
                }
            }
            finally
            {
                _style.Assign(oldStyle);
            }
        }
        private void AddTableRowCell(WordTableDef table, WordTableRowDef row, XlsItem item, ref int rowNo, ref int colNo)
        {
            var field = item as XlsDataField;

            if (field != null)
            {
                var cell = row.AddCell(colNo);
                cell.Style   = field.Style;
                cell.ColSpan = 1;
                var val  = ((XlsCell)item).GetValue();
                var type = field.Field.GetDataType();
                var s    = String.Empty;
                if (val != null)
                {
                    switch (type)
                    {
                    case BaseDataType.Text:
                        s = (string)val;
                        break;

                    case BaseDataType.Int:
                        s = ((int)val).ToString();
                        break;

                    case BaseDataType.Float:
                        s = ((double)val).ToString("F");
                        break;

                    case BaseDataType.Currency:
                        s = ((decimal)val).ToString("N");
                        break;

                    case BaseDataType.DateTime:
                        s = ((DateTime)val).ToShortDateString();
                        break;

                    case BaseDataType.Bool:
                        s = ((bool)val) ? "Да" : "Нет";
                        break;

                    default:
                        s = val.ToString();
                        break;
                    }
                }
                cell.AddText(s, field.Style);
                colNo++;
            }
            else
            {
                var xlsCell = item as XlsCell;
                if (xlsCell != null)
                {
                    var cell = row.AddCell(colNo);
                    cell.Style   = xlsCell.Style;
                    cell.ColSpan = 1;
                    var val = xlsCell.GetValue();
                    cell.AddText(val != null ? val.ToString() : String.Empty, xlsCell.Style);
                    colNo++;
                }
                else
                {
                    var xlsNode = item as XlsNode;
                    if (xlsNode != null)
                    {
                        var cell = row.AddCell(colNo);
                        cell.Style   = xlsNode.Style;
                        cell.ColSpan = item.GetCols();
                        var textNode = item as XlsTextNode;
                        if (textNode != null)
                        {
                            cell.AddText(textNode.Text, xlsNode.Style);
                        }
                        else
                        {
                            var cellNode = item as XlsCellNode;
                            if (cellNode != null)
                            {
                                var val = cellNode.Cell.GetValue();
                                cell.AddText(val != null ? val.ToString() : String.Empty, xlsNode.Style);
                            }
                        }

                        var node = xlsNode;
                        if (node.Items.Count > 0)
                        {
                            AddNodeCell(node, table, rowNo + 1, colNo);
                        }
                        colNo += node.GetCols();
                    }
                }
            }
        }
        private void AddNodeCell(XlsNode node, WordTableDef table, int rowNo, int colNo)
        {
            var row = table.InsertRow(rowNo);

            foreach (var item in node.Items)
            {
                /*if (item is XlsDataField)
                 * {
                 *  var cell = row.AddCell(colNo);
                 *  cell.Style = item.Style;
                 *  cell.ColSpan = 1;
                 *  var val = ((XlsCell)item).GetValue();
                 *  var type = ((XlsDataField) item).Field.GetDataType();
                 *  var s = String.Empty;
                 *  if (val != null)
                 *      switch (type)
                 *      {
                 *          case CissaDataType.Text:
                 *              s = (string) val;
                 *              break;
                 *          case CissaDataType.Int:
                 *              s = ((int)val).ToString();
                 *              break;
                 *          case CissaDataType.Float:
                 *              s = ((double)val).ToString("F");
                 *              break;
                 *          case CissaDataType.Currency:
                 *              s = ((decimal) val).ToString("N");
                 *              break;
                 *          case CissaDataType.DateTime:
                 *              s = ((DateTime)val).ToShortDateString();
                 *              break;
                 *          case CissaDataType.Bool:
                 *              s = ((bool)val) ? "Да" : "Нет";
                 *              break;
                 *          default:
                 *              s = val.ToString();
                 *              break;
                 *      }
                 *  cell.AddText(s, item.Style);
                 *  colNo++;
                 * }
                 * else if (item is XlsCell)
                 * {
                 *  var cell = row.AddCell(colNo);
                 *  cell.Style = item.Style;
                 *  cell.ColSpan = 1;
                 *  var val = ((XlsCell) item).GetValue();
                 *  cell.AddText(val != null ? val.ToString() : String.Empty, item.Style);
                 *  colNo++;
                 * }
                 * else if (item is XlsNode)
                 * {
                 *  var cell = row.AddCell(colNo);
                 *  cell.Style = item.Style;
                 *  cell.ColSpan = item.GetCols();
                 *  if (item is XlsTextNode)
                 *      cell.AddText(((XlsTextNode)item).Text, item.Style);
                 *  else if (item is XlsCellNode)
                 *  {
                 *      var val = ((XlsCellNode)item).Cell.GetValue();
                 *      cell.AddText(val != null ? val.ToString() : String.Empty, item.Style);
                 *  }
                 *
                 *  var childNode = (XlsNode)item;
                 *  if (childNode.Items.Count > 0)
                 *      AddNodeCell(childNode, table, rowNo + 1, colNo);
                 *  colNo += childNode.GetCols();
                 * }*/
                AddTableRowCell(table, row, item, ref rowNo, ref colNo);
            }
        }
示例#6
0
        private void BuildTableSectionRows(WordTableSectionDef sectionDef, Table table, WordTableDef tableDef, ref bool firstRow)
        {
            foreach (var rowDef in sectionDef.GetRows())
            {
                //if (tableDef.Rows.ContainsKey(r))
                {
                    //var rowDef = tableDef.Rows[r];
                    var oldRowStyle = MergeStyle(rowDef.Style);
                    try
                    {
                        var row = firstRow ? table.Rows[0] : table.InsertRow();
                        firstRow = false;
                        for (var c = 0; c < tableDef.GetColCount(); c++)
                        {
                            if (rowDef.Cells.ContainsKey(c))
                            {
                                var cellDef      = rowDef.Cells[c];
                                var oldCellStyle = MergeStyle(cellDef.Style);
                                try
                                {
                                    var cellPara = AppendParagraph(/*table.Rows[r]*/ row.Cells[c]);
                                    //SetParagraphFormat(cellPara);

                                    foreach (var itemDef in cellDef.Items)
                                    {
                                        if (itemDef is WordContentItemDef)
                                        {
                                            AddParagraphContent(cellPara, (WordContentItemDef)itemDef);
                                        }
                                    }
                                }
                                finally
                                {
                                    SetStyle(oldCellStyle);
                                }
                            }
                            else
                            {
                                AppendParagraph(row.Cells[c]);
                            }
                        }
                    }
                    finally
                    {
                        SetStyle(oldRowStyle);
                    }
                }
            }
        }
示例#7
0
        private void BuildTable(WordTableDef tableDef, DocX document)
        {
            var oldStyle = MergeStyle(tableDef.Style);

            try
            {
                var table = document.InsertTable(1 /*tableDef.GetRowCount() + 1*/, tableDef.GetColCount());
                if (_style.HasBorders && _style.Borders == TableCellBorder.All)
                {
                    table.Design = TableDesign.TableGrid;
                }
                else
                {
                    table.Design = TableDesign.TableNormal;
                }
                table.AutoFit = tableDef.FitWidth ? AutoFit.Window : AutoFit.Contents;
                var firstRow = true;

                foreach (var sectionDef in tableDef.Sections)
                {
                    var def = sectionDef as WordTableRepeatSectionDef;
                    if (def != null)
                    {
                        var repeatSection   = def;
                        var oldSectionStyle = MergeStyle(def.Style);
                        try
                        {
                            if (repeatSection.ResetDatas)
                            {
                                var args = new DataSetResetEventArgs {
                                    DataSet = repeatSection.Datas
                                };
                                OnBeforeDataSetReset(args);
                                repeatSection.Datas.Reset();
                                OnAfterDataSetReset(args);
                            }

                            while (!repeatSection.Datas.Eof())
                            {
                                BuildTableSectionRows(def, table, tableDef, ref firstRow);
                                repeatSection.Datas.Next();
                            }
                        }
                        finally
                        {
                            SetStyle(oldSectionStyle);
                        }
                    }
                    else
                    {
                        var oldSectionStyle = MergeStyle(sectionDef.Style);
                        try
                        {
                            BuildTableSectionRows(sectionDef, table, tableDef, ref firstRow);
                        }
                        finally
                        {
                            SetStyle(oldSectionStyle);
                        }
                    }
//                for (var r = 0; r <= tableDef.GetRowCount(); r++)
                }
            }
            finally
            {
                SetStyle(oldStyle);
            }
        }