NPOI 导出 Word (没有Office操作Word)

NPOI已出现一段时间了,目前版本2.0 Beta 2 [v2.0.5],网上关于NPOI操作xlsx文章较多,而关于docx的几乎没有,尽管NPOI对于Word还不稳定,经过一阵捣鼓后终于实现了表的简单操作:创建表、创建行、创建单元,单元行和列的合并。

        环境:vs2010,netframework4

 

 

[csharp] view plain copy
 
 print?
  1. private void button1_Click(object sender, EventArgs e)  
  2. {  
  3.     MemoryStream ms = new MemoryStream();  
  4.     XWPFDocument m_Docx = new XWPFDocument();  
  5.     m_Docx = CreatDocxTable();  
  6.     m_Docx.Write(ms);  
  7.     ms.Flush();  
  8.     SaveToFile(ms,"d:\\test.docx");  
  9. }  
  10. protected XWPFDocument CreatDocxTable()  
  11. {  
  12.     XWPFDocument m_Docx = new XWPFDocument();  
  13.     XWPFParagraph p0 = m_Docx.CreateParagraph();  
  14.     XWPFRun r0 = p0.CreateRun();  
  15.     r0.SetText("DOCX表");  
  16.   
  17.     XWPFTable table = m_Docx.CreateTable(1, 3);//创建一行3列表  
  18.     table.GetRow(0).GetCell(0).SetText("111");  
  19.     table.GetRow(0).GetCell(1).SetText("222");  
  20.     table.GetRow(0).GetCell(2).SetText("333");  
  21.   
  22.     XWPFTableRow m_Row = table.CreateRow();//创建一行  
  23.     m_Row = table.CreateRow();//创建一行  
  24.     m_Row.GetCell(0).SetText("211");  
  25.   
  26.     //合并单元格  
  27.     m_Row = table.InsertNewTableRow(0);//表头插入一行  
  28.     XWPFTableCell cell = m_Row.CreateCell();//创建一个单元格,创建单元格时就创建了一个CT_P  
  29.     CT_Tc cttc = cell.GetCTTc();  
  30.     CT_TcPr ctPr = cttc.AddNewTcPr();  
  31.     ctPr.gridSpan.val = "3";//合并3列  
  32.     cttc.GetPList()[0].AddNewPPr().AddNewJc().val= ST_Jc.center;  
  33.     cttc.GetPList()[0].AddNewR().AddNewT().Value = "abc";       
  34.   
  35.     XWPFTableRow td3 = table.InsertNewTableRow(table.Rows.Count - 1);//插入行  
  36.     cell = td3.CreateCell();  
  37.     cttc = cell.GetCTTc();  
  38.     ctPr = cttc.AddNewTcPr();  
  39.     ctPr.gridSpan.val = "3";  
  40.     cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;  
  41.     cttc.GetPList()[0].AddNewR().AddNewT().Value = "qqq";  
  42.   
  43.     //表增加行,合并列  
  44.     CT_Row m_NewRow = new CT_Row();  
  45.     m_Row = new XWPFTableRow(m_NewRow, table);  
  46.     table.AddRow(m_Row); //必须要!!!  
  47.     cell = m_Row.CreateCell();  
  48.     cttc = cell.GetCTTc();  
  49.     ctPr = cttc.AddNewTcPr();  
  50.     ctPr.gridSpan.val = "3";  
  51.     cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;  
  52.     cttc.GetPList()[0].AddNewR().AddNewT().Value = "sss";  
  53.   
  54.     //表未增加行,合并2列,合并2行  
  55.     //1行  
  56.     m_NewRow = new CT_Row();  
  57.     m_Row = new XWPFTableRow(m_NewRow, table);  
  58.     table.AddRow(m_Row);  
  59.     cell = m_Row.CreateCell();  
  60.     cttc = cell.GetCTTc();  
  61.     ctPr = cttc.AddNewTcPr();  
  62.     ctPr.gridSpan.val = "2";  
  63.     ctPr.AddNewVMerge().val = ST_Merge.restart;//合并行  
  64.     ctPr.AddNewVAlign().val = ST_VerticalJc.center;//垂直居中  
  65.     cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;  
  66.     cttc.GetPList()[0].AddNewR().AddNewT().Value = "xxx";  
  67.     cell = m_Row.CreateCell();  
  68.     cell.SetText("ddd");  
  69.     //2行,多行合并类似  
  70.     m_NewRow = new CT_Row();  
  71.     m_Row = new XWPFTableRow(m_NewRow, table);  
  72.     table.AddRow(m_Row);  
  73.     cell = m_Row.CreateCell();  
  74.     cttc = cell.GetCTTc();  
  75.     ctPr = cttc.AddNewTcPr();  
  76.     ctPr.gridSpan.val = "2";  
  77.     ctPr.AddNewVMerge().val = ST_Merge.@continue;//合并行  
  78.     cell = m_Row.CreateCell();  
  79.     cell.SetText("kkk");  
  80.     ////3行  
  81.     //m_NewRow = new CT_Row();  
  82.     //m_Row = new XWPFTableRow(m_NewRow, table);  
  83.     //table.AddRow(m_Row);  
  84.     //cell = m_Row.CreateCell();  
  85.     //cttc = cell.GetCTTc();  
  86.     //ctPr = cttc.AddNewTcPr();  
  87.     //ctPr.gridSpan.val = "2";  
  88.     //ctPr.AddNewVMerge().val = ST_Merge.@continue;  
  89.     //cell = m_Row.CreateCell();  
  90.     //cell.SetText("hhh");  
  91.   
  92.     return m_Docx;  
  93. }  
  94. static void SaveToFile(MemoryStream ms, string fileName)  
  95. {  
  96.     using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))  
  97.     {  
  98.         byte[] data = ms.ToArray();  
  99.   
  100.         fs.Write(data, 0, data.Length);  
  101.         fs.Flush();  
  102.         data = null;  
  103.     }  
  104. }  


 

 

 NPOI:由于目前网上提供的NPOI对于Word还不稳定,上述代码不能保证能用。

 经过调试的例子下载:http://download.csdn.net/detail/gltide/6753163,例中附有最新NPOI。

最新NPOI(2.0RC)及上述例子(2014-1-9):http://download.csdn.net/detail/gltide/6829979,例中增加对页面设置和表居中代码。

 

转自:http://blog.csdn.net/gltide/article/details/17416547

posted on 2017-04-21 16:20  ymworkroom  阅读(177)  评论(0)    收藏  举报