解析WordprocessingML(二)通过数据集自动生成表格

时间:2021-08-18 06:25:48

这要比查找替换简单很多,思路很简单首先在word中打上标记(并不是word中定义的标记,只是Word表格中的纯文本),然后通过WordMl在打标记的位置生成表格。

       表格的格式延续原来的格式,如果某些行有内容,可以在配置文件中指定该行不被替换。因为简单很简单只贴出部分代码:
   
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格 /// <summary>
解析WordprocessingML(二)通过数据集自动生成表格        
/// 替换指定标记的表格
解析WordprocessingML(二)通过数据集自动生成表格        
/// </summary>
解析WordprocessingML(二)通过数据集自动生成表格        
/// <param name="tableDate">表格的数据</param>
解析WordprocessingML(二)通过数据集自动生成表格        
/// <param name="wordTable">要替换的表格</param>
解析WordprocessingML(二)通过数据集自动生成表格        
/// <param name="tableMarker"></param>
解析WordprocessingML(二)通过数据集自动生成表格        
/// <returns></returns>

解析WordprocessingML(二)通过数据集自动生成表格         public  XmlDocument ReplaceTable(DataTable tableDate, Table wordTable, TableMarker tableMarker)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格        
{
解析WordprocessingML(二)通过数据集自动生成表格            XmlElement old 
= (XmlElement)GetTable(tableMarker);
解析WordprocessingML(二)通过数据集自动生成表格            XmlNamespaceManager nsmgr 
= new XmlNamespaceManager(_wordDoc.NameTable);
解析WordprocessingML(二)通过数据集自动生成表格            nsmgr.AddNamespace(
"w", nsw);
解析WordprocessingML(二)通过数据集自动生成表格            
//根据prTr设置表格的属性
解析WordprocessingML(二)通过数据集自动生成表格
            XmlNode prTr;
解析WordprocessingML(二)通过数据集自动生成表格            
if (wordTable.RowPr != 0)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格            
{
解析WordprocessingML(二)通过数据集自动生成表格                
string path = string.Format("w:tr[{0}]", wordTable.RowPr);
解析WordprocessingML(二)通过数据集自动生成表格                prTr 
= old.SelectSingleNode(path, nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格            }

解析WordprocessingML(二)通过数据集自动生成表格            
else
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格            
{
解析WordprocessingML(二)通过数据集自动生成表格                prTr 
= old.SelectSingleNode("w:tr", nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格            }

解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            
//获取tr属性
解析WordprocessingML(二)通过数据集自动生成表格
            XmlNode tblPrEx = prTr.SelectSingleNode("w:tblPrEx", nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格            XmlNode trPr 
= prTr.SelectSingleNode("w:trPr", nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格            
//获取tc属性
解析WordprocessingML(二)通过数据集自动生成表格
            XmlNode tcPr = prTr.SelectSingleNode("w:tc/w:tcPr", nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格            
//获取<w:pPr>
解析WordprocessingML(二)通过数据集自动生成表格
            XmlNode pPr = prTr.SelectSingleNode("w:tc/w:p/w:pPr", nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格            XmlElement newTable 
= _wordDoc.CreateElement("w:tbl", nsw);
解析WordprocessingML(二)通过数据集自动生成表格            
//获取tbl属性
解析WordprocessingML(二)通过数据集自动生成表格
            Nodehelper.AppendNotNullChild(newTable, old.SelectSingleNode("w:tblPr", nsmgr));
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            Nodehelper.AppendNotNullChild(newTable, old.SelectSingleNode(
"w:tblGrid", nsmgr));
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            TableConfigProcesser tmp 
= new TableConfigProcesser();
解析WordprocessingML(二)通过数据集自动生成表格            NameValueCollection nv 
= tmp.GetTableColumns(wordTable);
解析WordprocessingML(二)通过数据集自动生成表格            
if (wordTable.ReservationFirstRows != 0)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格            
{
解析WordprocessingML(二)通过数据集自动生成表格                IList
<XmlNode> resRow = ReservationRowNode(old, wordTable.ReservationFirstRows, nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格                
//保留前几行
解析WordprocessingML(二)通过数据集自动生成表格
                foreach (XmlNode row in resRow)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                
{
解析WordprocessingML(二)通过数据集自动生成表格                    Nodehelper.AppendNotNullCloneChild(newTable, row);
解析WordprocessingML(二)通过数据集自动生成表格                    
//newTable(row);
解析WordprocessingML(二)通过数据集自动生成表格
                }

解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            }

解析WordprocessingML(二)通过数据集自动生成表格            
foreach (DataRow row in tableDate.Rows)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格            
{
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                XmlNode ttr 
= _wordDoc.CreateElement("w:tr", nsw);
解析WordprocessingML(二)通过数据集自动生成表格                newTable.AppendChild(ttr);
解析WordprocessingML(二)通过数据集自动生成表格                Nodehelper.AppendNotNullCloneChild(ttr, tblPrEx);
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                Nodehelper.AppendNotNullCloneChild(ttr, trPr);
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                
for (int j = 1; j <= nv.Count; j++)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                
{
解析WordprocessingML(二)通过数据集自动生成表格                    XmlNode tc 
= _wordDoc.CreateElement("w:tc", nsw);
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                    XmlNode tp 
= _wordDoc.CreateElement("w:p", nsw);
解析WordprocessingML(二)通过数据集自动生成表格                    XmlNode tr 
= _wordDoc.CreateElement("w:r", nsw);
解析WordprocessingML(二)通过数据集自动生成表格                    XmlNode tt 
= _wordDoc.CreateElement("w:t", nsw);
解析WordprocessingML(二)通过数据集自动生成表格                    
string c = nv.Get(j.ToString());
解析WordprocessingML(二)通过数据集自动生成表格                    
if (c == "")
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                    
{
解析WordprocessingML(二)通过数据集自动生成表格                        tt.InnerText 
= "";
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                    }

解析WordprocessingML(二)通过数据集自动生成表格                    
else
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                    
{
解析WordprocessingML(二)通过数据集自动生成表格                        tt.InnerText 
= row[c].ToString();
解析WordprocessingML(二)通过数据集自动生成表格                    }

解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                    Nodehelper.AppendNotNullCloneChild(tc, tcPr);
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                    ttr.AppendChild(tc);
解析WordprocessingML(二)通过数据集自动生成表格                    tc.AppendChild(tcPr);
解析WordprocessingML(二)通过数据集自动生成表格                    tc.AppendChild(tp);
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                    Nodehelper.AppendNotNullCloneChild(tp, pPr);
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                    tp.AppendChild(tr);
解析WordprocessingML(二)通过数据集自动生成表格                    tr.AppendChild(tt);
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                }

解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            }

解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            
if (wordTable.ReservationLastRows != 0)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格            
{
解析WordprocessingML(二)通过数据集自动生成表格                IList
<XmlNode> resRow = ReservationRowNode(old, wordTable.ReservationLastRows, nsmgr);
解析WordprocessingML(二)通过数据集自动生成表格                
//保留最后几行
解析WordprocessingML(二)通过数据集自动生成表格
                foreach (XmlNode row in resRow)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                
{
解析WordprocessingML(二)通过数据集自动生成表格                    Nodehelper.AppendNotNullCloneChild(newTable, row);
解析WordprocessingML(二)通过数据集自动生成表格                    
//newTable.AppendChild(row);
解析WordprocessingML(二)通过数据集自动生成表格
                }

解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            }

解析WordprocessingML(二)通过数据集自动生成表格            XmlNode pa 
= old.ParentNode;
解析WordprocessingML(二)通过数据集自动生成表格            pa.ReplaceChild(newTable, old);
解析WordprocessingML(二)通过数据集自动生成表格            
return _wordDoc;
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格        }

解析WordprocessingML(二)通过数据集自动生成表格

      还有另外一种解析方式就是通过WordprocessingML的类库实现这种操作,这种方式更简单,而且能更容易的实现其他方式的表格生成,如:用数据集填充表格。

       下面的代码是用我自己的WordprocessingML库实现填充表格的代码:

  

解析WordprocessingML(二)通过数据集自动生成表格public   void  GenerateTable(DataTable tableDate, Table wordTable, TableMarker tableMarker)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格        
{
解析WordprocessingML(二)通过数据集自动生成表格           
// int r = tableDate.Rows.Count;
解析WordprocessingML(二)通过数据集自动生成表格
            XmlNode n = GetTable(tableMarker);
解析WordprocessingML(二)通过数据集自动生成表格            CT_Tbl tbl 
= new CT_Tbl((XmlElement)n);
解析WordprocessingML(二)通过数据集自动生成表格            TableConfigProcesser tmp 
= new TableConfigProcesser();
解析WordprocessingML(二)通过数据集自动生成表格            NameValueCollection nv 
= tmp.GetTableColumns(wordTable);
解析WordprocessingML(二)通过数据集自动生成表格            
int i=0;
解析WordprocessingML(二)通过数据集自动生成表格            
foreach (CT_Row tr in tbl.tr)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格            
{
解析WordprocessingML(二)通过数据集自动生成表格                
if (tr._row.InnerText == "" ||tr._row.InnerText== tableMarker.ToString()||tr._row.InnerText == null)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                
{
解析WordprocessingML(二)通过数据集自动生成表格                    DataRow dRow 
= tableDate.Rows[i];
解析WordprocessingML(二)通过数据集自动生成表格                    
if (nv.Count == tr.tc.Count)//只生成列数符合配置文件列数的表
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格
                    {
解析WordprocessingML(二)通过数据集自动生成表格                        
int j = 1;//nv 的ID
解析WordprocessingML(二)通过数据集自动生成表格
                        foreach (CT_Tc tc in tr.tc)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                        
{
解析WordprocessingML(二)通过数据集自动生成表格                            
if (tc.Paragraphs[0].TextRuns.Count == 0)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                            
{                               
解析WordprocessingML(二)通过数据集自动生成表格                                XmlNode r 
= CreatR();
解析WordprocessingML(二)通过数据集自动生成表格                                tc.Paragraphs[
0]._p.AppendChild(r);
解析WordprocessingML(二)通过数据集自动生成表格                                CT_R cr 
= new CT_R((XmlElement)r);
解析WordprocessingML(二)通过数据集自动生成表格                                tc.Paragraphs[
0].TextRuns.Add(cr);
解析WordprocessingML(二)通过数据集自动生成表格                            }

解析WordprocessingML(二)通过数据集自动生成表格                            
if (nv.Get(j.ToString()) == "")
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                            
{
解析WordprocessingML(二)通过数据集自动生成表格                                
if (tc.Paragraphs[0].TextRuns.Count > 1)
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                                
{
解析WordprocessingML(二)通过数据集自动生成表格                                    tc.Paragraphs[
0]._p.RemoveAll();
解析WordprocessingML(二)通过数据集自动生成表格                                    XmlNode r 
= CreatR();
解析WordprocessingML(二)通过数据集自动生成表格                                    tc.Paragraphs[
0]._p.AppendChild(r);
解析WordprocessingML(二)通过数据集自动生成表格                                    CT_R cr 
= new CT_R((XmlElement)r);
解析WordprocessingML(二)通过数据集自动生成表格                                    tc.Paragraphs[
0].TextRuns.Add(cr);
解析WordprocessingML(二)通过数据集自动生成表格                                    tc.Paragraphs[
0].TextRuns[0].Text = "";
解析WordprocessingML(二)通过数据集自动生成表格                                }

解析WordprocessingML(二)通过数据集自动生成表格                                
解析WordprocessingML(二)通过数据集自动生成表格                            }

解析WordprocessingML(二)通过数据集自动生成表格                            
else
解析WordprocessingML(二)通过数据集自动生成表格解析WordprocessingML(二)通过数据集自动生成表格                            
{
解析WordprocessingML(二)通过数据集自动生成表格                                tc.Paragraphs[
0].TextRuns[0].Text = dRow[nv.Get(j.ToString())].ToString();
解析WordprocessingML(二)通过数据集自动生成表格                            }

解析WordprocessingML(二)通过数据集自动生成表格                            j
++;
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                        }

解析WordprocessingML(二)通过数据集自动生成表格                    }

解析WordprocessingML(二)通过数据集自动生成表格                    i
++;
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格                   
解析WordprocessingML(二)通过数据集自动生成表格                }

解析WordprocessingML(二)通过数据集自动生成表格            }

解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格           
解析WordprocessingML(二)通过数据集自动生成表格
解析WordprocessingML(二)通过数据集自动生成表格            
解析WordprocessingML(二)通过数据集自动生成表格        }

解析WordprocessingML(二)通过数据集自动生成表格

解析WordprocessingML(一)查找和替换

http://www.cnblogs.com/bluewater/admin/EditPosts.aspx?postid=627710

解析WordprocessingML(二)通过数据集自动生成表格

http://www.cnblogs.com/bluewater/archive/2007/03/02/662040.html

解析WordprocessingML(三)解析WordMl的基本方法和途径(a

http://www.cnblogs.com/bluewater/archive/2007/03/02/661824.html

解析WordprocessingML(三)解析WordMl的基本方法和途径(b

http://www.cnblogs.com/bluewater/archive/2007/03/02/661885.html

解析WordprocessingML(四)转换到Html格式

Xsd入门

http://www.cnblogs.com/bluewater/archive/2007/03/02/661927.html