• 利用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;
                }
            }
        }
    }
  • 相关阅读:
    如何通过js在子页面调用父页面元素的click事件
    时间戳转换成时间格式
    sql 生成某个范围内的随机数
    Ioc思想
    【Sharepoint控件】MOSS模式化窗口
    【Sharepoint代码段】MOSS模拟超级管理员的方法
    【Sharepoint对象模型】MOSS根据模板添加子网站
    【Sharepoint控件】MOSS列表添加时SPUser字段赋值
    【C#代码段】asp在数据库加入数据
    【C#代码段】ajax从asp后台获取数据
  • 原文地址:https://www.cnblogs.com/wzwyc/p/9110441.html
Copyright © 2020-2023  润新知