当前位置: 首页 > 工具软件 > NPOI > 使用案例 >

NPOI使用小结

刘辰钊
2023-12-01

    我在本项目中使用NPOI操作Word文件,分别对Word中段落表格页边距页脚进行了操作。


一、创建一个docx

 XWPFDocument doc = new XWPFDocument(stream); // stream是文件流,此处用来读取文件,若要新建则不需要传入文件流
复制代码


二、设置页边距

XWPFDocument m_Docx = new XWPFDocument(); //新建一个docx文件
CT_SectPr sectPr = new CT_SectPr(); 
sectPr.pgMar = new CT_PageMar();
sectPr.pgMar.bottom = "1442";  // 下
sectPr.pgMar.top = "994"; // 上
sectPr.pgMar.left = 1800; // 左
sectPr.pgMar.right = 1800; // 右
m_Docx.Document.body.sectPr = sectPr; // 设置页边距
复制代码

    注:此处上和下是string类型、而左和右则用的int类型。


三、操作表格

    操作表格分为两种情况:第一种新建docx文件添加一个新的表格、第二中就是读取已有文件中的表格。我在项目中只用了第二种。

   我们先看看表格有哪些属性:

XWPFDocument doc = new XWPFDocument(stream); // 读取一个docx文件
var tables = doc.Tables; // 文件中的所有表格  是一个列表
foreach (var table in tables) // 遍历所有表
{
    foreach (var row in table.Rows) // 表中的每一行
    {
        foreach (var cell in row.GetTableCells()) // 表中的每一格
        {
            foreach (var para in cell.Paragraphs)  // 表中的在格子里的每一个段落
            {
                // ...
                //在这次项目我用了ReplaceText来替换段落中的文字
                para.ReplaceText(para.ParagraphText, string.Empty);//第一个参数就原文字,第二个参数就是你想要替换的文字

                //修改段落中的样式(字体)
                 foreach (var parafont in para.Runs)
                 {
                     parafont.FontSize = 14  // 设置字体大小 int
                     parafont.SetFontFamily("宋体", FontCharRange.None);// 设置成宋体 第二个参数是 字体字符范围
                     /* None = 0,
                        Ascii = 1,
                        CS = 2,
                        EastAsia = 3,
                        HAnsi = 4
                     */
                    // para.Runs[1].SetText(D2D.ChangeReason); 
                 }
                
            }
        }
    }
}复制代码

    代码中的Runs我不太理解具体的划分规则,我在文件中加了ChangeReason和ChangeType自己定的位。

    其中有这么一种情况,我们可以使用已有的一个表格放到一个新建的docx文件中,这样我们就可以把上面编辑好的表格放入新的docx文件中了。

XWPFDocument doc = new XWPFDocument(stream); // 读取一个docx文件
var tables = doc.Tables;
XWPFDocument m_Docx = new XWPFDocument(); //新建一个docx文件
m_Docx.CreateTable(); // 新建一个表格
m_Docx.SetTable(index, tables[index]); // 设置一个表格 包含两个参数 一个是表格的索引,一个是表格的实体
复制代码

    注:必须先CreateTable,然后在SetTable并且索引不能超过界限。


四、操作段落

      操作段落和表格类似都是可以新建,或是从已有文件中获取。

XWPFDocument m_Docx = new XWPFDocument();//新建一个docx文件
m_Docx.CreateParagraph(); //新建一个段落
p1.Alignment = ParagraphAlignment.CENTER; //居中 
XWPFRun runTitle = p1.CreateRun();
runTitle.IsBold = true; //加粗
runTitle.SetText("天津市大学软件学院学生信息采集表");//设置文字
runTitle.FontSize = 22;
runTitle.SetFontFamily("宋体", FontCharRange.None);//宋体


XWPFDocument doc = new XWPFDocument(stream);// 读取一个docx文件
var para=doc.GetParagraphArray(index)// 获取某一个段落 
doc.GetParagraphsEnumerator(); // 这个应该是获取文件中所有的段落 当时没有注意到
XWPFDocument m_Docx = new XWPFDocument();//新建一个docx文件
m_Docx.CreateParagraph();
m_Docx.SetParagraph(para, index);//设置段落
复制代码

    注:必须先CreateTParagraph,然后在SetParagraph并且索引不能超过界限。


五、操作页脚

    操作页脚和表格类似都是可以新建,或是从已有文件中获取。

XWPFDocument m_Docx = new XWPFDocument();  //新建一个docx文件
//创建页脚
CT_Ftr m_ftr = new CT_Ftr();
m_ftr.AddNewP().AddNewR().AddNewT().Value = "fff";//页脚内容


XWPFDocument doc = new XWPFDocument(stream); // 读取一个docx文件
var foot = doc.GetFooterArray(0)._getHdrFtr(); //获取页脚
//创建页脚关系
XWPFRelation Frelation = XWPFRelation.FOOTER;
XWPFFooter m_f = (XWPFFooter)m_Docx.CreateRelationship(Frelation, XWPFFactory.GetInstance(), m_Docx.FooterList.Count + 1);
//设置页脚
m_f.SetHeaderFooter(m_ftr); // 新的
m_f.SetHeaderFooter(foot ); // 读取的

CT_HdrFtrRef m_HdrFtr = m_SectPr.AddNewFooterReference();
m_HdrFtr.type = ST_HdrFtr.@default;
m_HdrFtr.id = m_f.GetPackageRelationship().Id;

复制代码


转载于:https://juejin.im/post/5b5db68f6fb9a04fc0311a39

 类似资料: