NPOI使用小结

    我在本项目中使用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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XWPFDocument类是Apache POI库中的Word文档处理类,用于读取、创建和修改Word文档。以下是XWPFDocument类的常用方法参考文档: 1. XWPFDocument(InputStream inp):构造函数,从输入流中读取Word文档。 2. void write(OutputStream stream):将当前文档写入输出流中。 3. List<XWPFParagraph> getParagraphs():获取文档中所有段落的列表。 4. List<XWPFTable> getTables():获取文档中所有表格的列表。 5. void createParagraph():创建一个新的段落。 6. XWPFParagraph insertNewParagraph(int pos):在指定位置插入一个新的段落。 7. void removeParagraph(XWPFParagraph paragraph):删除一个段落。 8. XWPFTable createTable():创建一个新的表格。 9. XWPFTable insertNewTable(XWPFParagraph paragraph, int numRows, int numCols):在指定段落中插入一个新的表格。 10. void removeTable(int pos):删除指定位置的表格。 11. XWPFHeader createHeader(HeaderFooterType type):创建一个新的页眉。 12. XWPFFooter createFooter(HeaderFooterType type):创建一个新的页脚。 13. void setParagraph(XWPFParagraph paragraph, int pos):在指定位置设置一个段落。 14. int getPosOfParagraph(XWPFParagraph paragraph):获取指定段落在文档中的位置。 15. void addPictureData(byte[] pictureData, int pictureType):向文档中添加图片数据。 16. XWPFParagraph createParagraph():创建一个新的段落。 17. XWPFRun createRun():在当前段落中创建一个新的文本运行。 18. void setParagraph(XWPFParagraph para):将指定的段落设置为当前段落。 19. XWPFParagraph insertNewParagraph(XWPFParagraph p, int pos):在指定位置插入一个新的段落。 20. void removeBodyElement(int pos):删除指定位置的段落或表格。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值