首页 > 技术文章 > NPOI word文档表格在新的文档中多次使用

hardenzhao 2020-02-06 10:49 原文

  • 最近有一个项目,涉及到文档操作,有一个固定的模版,模版中有文字和表格,表格会在新的文档中使用n多次
    //获取模版中的表格
    FileStream stream = new FileStream(strPath + "**.docx", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
    XWPFDocument docTemp = new XWPFDocument(stream);
    XWPFTable table=docTemp.Tables[0];
    XWPFDocument doc;
    Directory.CreateDirectory(strPath + "\\document");//系统报告模板路径
    FileStream stream = new FileStream("**.docx",FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
    XWPFDocument docTemp = new XWPFDocument(stream);
    XWPFTable table=docTemp.Tables[0];
    //单个表格的操作
    using
    (FileStream file = new FileStream("E:/01work/model2.docx", FileMode.Create, FileAccess.ReadWrite)) {
    doc = new XWPFDocument();
            int ct=doc.Tables.Count;
    table.GetRow(0).GetCell(0).SetText("");
       //对表格不停的操作……
    doc.CreateTable();
                 doc.SetTable(ct, table);
    }
    //在次之前一切正常
    XWPFDocument doc;
    Directory.CreateDirectory(strPath + "\\document");//系统报告模板路径
    FileStream stream = new FileStream("**.docx",FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
    XWPFDocument docTemp = new XWPFDocument(stream);
    XWPFTable table=docTemp.Tables[0];
    //插入多个
    using (FileStream file = new FileStream("E:/01work/model2.docx", FileMode.Create, FileAccess.ReadWrite)) {
           doc = new XWPFDocument();
        for(int i=0;i<10;i++){
    table.GetRow(0).GetCell(0).SetText("");    //对表格不停的操作……

    int ct=doc.Tables.Count; doc.CreateTable(); doc.SetTable(ct, table);
    } }

    运行后问题来了,所有的表格被填充一样的内容,无比的崩溃

  • 但我有一个原则,必须战胜它,努力了数小时之后
XWPFDocument doc;
Directory.CreateDirectory(strPath + "\\document");//系统报告模板路径
FileStream stream;
XWPFDocument docTemp;
XWPFTable table;
//插入多个
using (FileStream file = new FileStream("E:/01work/model2.docx", FileMode.Create, FileAccess.ReadWrite)) {
       doc = new XWPFDocument();
    for(int i=0;i<10;i++){
        stream = new FileStream("**.docx",FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
docTemp = new XWPFDocument(stream);
stream.Close();//一定一定要记住关闭后再打开
table=docTemp.Tables[0];
table.GetRow(
0).GetCell(0).SetText("");    //对表格不停的操作…… int ct=doc.Tables.Count; doc.CreateTable(); doc.SetTable(ct, table); } }

代码没有多少变化,也是辛勤汗水的浇注,希望能帮到大家

推荐阅读