Exemplo n.º 1
0
        private static void MergeField(XWPFRun run, DataRow row)
        {
            MergeField field = WordGenerator.ParesMergeField(run);

            if (field != null && String.Compare(field.TableName, row.Table.TableName, true) == 0)
            {
                if (row.Table.Columns.Contains(field.ColumnName))
                {
                    WordGenerator.Fill(run, field, row[field.ColumnName], row);
                }
            }
        }
Exemplo n.º 2
0
        private static bool HasMergeField(XWPFParagraph ph)
        {
            for (int i = 0; i < ph.Runs.Count; i++)
            {
                MergeField field = WordGenerator.ParesMergeField(ph.Runs[i]);
                if (field != null)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 3
0
        private static MergeField GetFirstArrayMergeField(XWPFTableRow row)
        {
            foreach (XWPFTableCell cell in row.GetTableCells())
            {
                foreach (XWPFParagraph ph in cell.Paragraphs)
                {
                    foreach (XWPFRun run in ph.Runs)
                    {
                        MergeField mergeField = WordGenerator.ParesMergeField(run);
                        if (mergeField != null && mergeField.isArray)
                        {
                            return(mergeField);
                        }
                    }
                }
            }

            return(null);
        }
Exemplo n.º 4
0
        private static void MergeField(XWPFRun run, DataSet dataset)
        {
            MergeField field = WordGenerator.ParesMergeField(run);

            if (field != null && !field.isArray)
            {
                DataTable table = dataset.Tables[field.TableName];
                if (table != null && table.Columns.Contains(field.ColumnName))
                {
                    object  value = null;
                    DataRow row   = null;
                    if (table.Rows.Count >= 1)
                    {
                        row   = table.Rows[0];
                        value = row[field.ColumnName];
                    }

                    WordGenerator.Fill(run, field, value, row);
                }
            }
        }
Exemplo n.º 5
0
        private static GridDefine ParseGridDefine(XWPFTable table)
        {
            GridDefine gridDefine = null;

            for (int i = 0; i < table.Rows.Count; i++)
            {
                XWPFTableRow row        = table.Rows[i];
                MergeField   mergeField = WordGenerator.GetFirstArrayMergeField(row);
                if (mergeField == null)
                {
                    if (gridDefine == null)
                    {
                        continue;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    if (gridDefine == null)
                    {
                        gridDefine               = new GridDefine();
                        gridDefine.TableName     = mergeField.TableName;
                        gridDefine.StartRowIndex = i;
                        gridDefine.EndRowIndex   = i;
                        gridDefine.Templates.Add(row);
                    }
                    else
                    {
                        gridDefine.EndRowIndex = i;
                        gridDefine.Templates.Add(row);
                    }
                }
            }

            return(gridDefine);
        }
Exemplo n.º 6
0
 private static void FillGrid(XWPFTable doctable, GridDefine gridDefine, DataTable table)
 {
     for (int i = 0; i < table.Rows.Count; i++)
     {
         DataRow      row    = table.Rows[i];
         XWPFTableRow docrow = doctable.GetRow(gridDefine.StartRowIndex + i);
         foreach (XWPFTableCell cell in docrow.GetTableCells())
         {
             foreach (XWPFParagraph ph in cell.Paragraphs)
             {
                 foreach (XWPFRun run in ph.Runs)
                 {
                     MergeField field = WordGenerator.ParesMergeField(run);
                     if (field != null && table.Columns.Contains(field.ColumnName))
                     {
                         WordGenerator.Fill(run, field, row[field.ColumnName], row);
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 7
0
        private static MergeField ParesMergeField(XWPFRun run)
        {
            string         text  = run.Text;
            List <XWPFRun> nexts = new List <XWPFRun>();

            if (String.IsNullOrEmpty(text))
            {
                return(null);
            }

            if (text.StartsWith("«"))
            {
                XWPFRun curRun = run;
                int     i;
                for (i = 0; true; i++)
                {
                    if (text.EndsWith("»"))
                    {
                        break;
                    }
                    else
                    {
                        curRun = TryGetNextRun(curRun);
                        if (curRun == null)
                        {
                            break;
                        }

                        nexts.Add(curRun);
                        text += curRun.Text;
                    }
                }
            }

            MergeField field = null;
            int        index;

            if (text.StartsWith("«") && text.EndsWith("»"))
            {
                run.SetText(text);
                foreach (XWPFRun next in nexts)
                {
                    next.SetText("");
                }

                field = new MergeField();
                text  = text.Substring(1, text.Length - 2).Trim();

                index = text.LastIndexOf(':');
                if (index != -1)
                {
                    field.Render = text.Substring(index + 1).Trim();
                    text         = text.Substring(0, index).Trim();
                }

                index = text.LastIndexOf('.');
                if (index == -1)
                {
                    field.TableName  = "Global";
                    field.ColumnName = text;
                }
                else
                {
                    field.ColumnName = text.Substring(index + 1).Trim();
                    text             = text.Substring(0, index).Trim();

                    if (text.EndsWith("[?]"))
                    {
                        field.TableName = text.Substring(0, text.Length - 3).Trim();
                        field.isArray   = true;
                    }
                    else
                    {
                        field.TableName = text;
                    }
                }
            }

            return(field);
        }
Exemplo n.º 8
0
 private static void Fill(XWPFRun run, MergeField field, object value, DataRow row)
 {
     WordGenerator.DoRender(run, value, row, field.Render);
 }