利用NPOI生成DOCX文档

首先安装NPOI控件:

Install-Package NPOI

代码:

using NPOI.OpenXmlFormats.Wordprocessing;
using NPOI.XWPF.UserModel;
using System.IO;
using System.Windows;

namespace NPOIDemo
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MemoryStream ms = new MemoryStream();
            XWPFDocument m_Docx = new XWPFDocument();
            m_Docx = CreatDocxTable();
            m_Docx.Write(ms);
            ms.Flush();
            SaveToFile(ms, "d:\\test.docx");
        }

        private XWPFDocument CreatDocxTable()
        {
            XWPFDocument m_Docx = new XWPFDocument();
            XWPFParagraph p0 = m_Docx.CreateParagraph();
            XWPFRun r0 = p0.CreateRun();
            r0.SetText("DOCX表");

            XWPFTable table = m_Docx.CreateTable(1, 3);//创建一行3列表  
            table.GetRow(0).GetCell(0).SetText("111");
            table.GetRow(0).GetCell(1).SetText("222");
            table.GetRow(0).GetCell(2).SetText("333");

            XWPFTableRow m_Row = table.CreateRow();//创建一行  
            m_Row = table.CreateRow();//创建一行  
            m_Row.GetCell(0).SetText("211");

            //合并单元格  
            m_Row = table.InsertNewTableRow(0);//表头插入一行  
            XWPFTableCell cell = m_Row.CreateCell();//创建一个单元格,创建单元格时就创建了一个CT_P  
            CT_Tc cttc = cell.GetCTTc();
            CT_TcPr ctPr = cttc.AddNewTcPr();
            ctPr.AddNewGridspan();
            ctPr.gridSpan.val = "3";//合并3列  
            cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
            cttc.GetPList()[0].AddNewR().AddNewT().Value = "abc";

            XWPFTableRow td3 = table.InsertNewTableRow(table.Rows.Count - 1);//插入行  
            cell = td3.CreateCell();
            cttc = cell.GetCTTc();
            ctPr = cttc.AddNewTcPr();
            ctPr.AddNewGridspan();
            ctPr.gridSpan.val = "3";//合并3列  
            cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
            cttc.GetPList()[0].AddNewR().AddNewT().Value = "qqq";

            //表增加行,合并列  
            CT_Row m_NewRow = new CT_Row();
            m_Row = new XWPFTableRow(m_NewRow, table);
            table.AddRow(m_Row); //必须要!!!  
            cell = m_Row.CreateCell();
            cttc = cell.GetCTTc();
            ctPr = cttc.AddNewTcPr();
            ctPr.AddNewGridspan();
            ctPr.gridSpan.val = "3";//合并3列  
            cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
            cttc.GetPList()[0].AddNewR().AddNewT().Value = "sss";

            //表未增加行,合并2列,合并2行  
            //1行  
            m_NewRow = new CT_Row();
            m_Row = new XWPFTableRow(m_NewRow, table);
            table.AddRow(m_Row);
            cell = m_Row.CreateCell();
            cttc = cell.GetCTTc();
            ctPr = cttc.AddNewTcPr();
            ctPr.AddNewGridspan();
            ctPr.gridSpan.val = "2";//合并3列  
            ctPr.AddNewVMerge().val = ST_Merge.restart;//合并行  
            ctPr.AddNewVAlign().val = ST_VerticalJc.center;//垂直居中  
            cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
            cttc.GetPList()[0].AddNewR().AddNewT().Value = "xxx";
            cell = m_Row.CreateCell();
            cell.SetText("ddd");
            //2行,多行合并类似  
            m_NewRow = new CT_Row();
            m_Row = new XWPFTableRow(m_NewRow, table);
            table.AddRow(m_Row);
            cell = m_Row.CreateCell();
            cttc = cell.GetCTTc();
            ctPr = cttc.AddNewTcPr();
            ctPr.AddNewGridspan();
            ctPr.gridSpan.val = "2";//合并3列  
            ctPr.AddNewVMerge().val = ST_Merge.@continue;//合并行  
            cell = m_Row.CreateCell();
            cell.SetText("kkk");
            ////3行  
            //m_NewRow = new CT_Row();  
            //m_Row = new XWPFTableRow(m_NewRow, table);  
            //table.AddRow(m_Row);  
            //cell = m_Row.CreateCell();  
            //cttc = cell.GetCTTc();  
            //ctPr = cttc.AddNewTcPr();  
            //ctPr.gridSpan.val = "2";  
            //ctPr.AddNewVMerge().val = ST_Merge.@continue;  
            //cell = m_Row.CreateCell();  
            //cell.SetText("hhh");  

            return m_Docx;
        }

        private void SaveToFile(MemoryStream ms, string fileName)
        {
            using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
            {
                byte[] data = ms.ToArray();

                fs.Write(data, 0, data.Length);
                fs.Flush();
                data = null;
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/wzwyc/p/9110441.html
今日推荐