首页 新闻 会员 周边

NPOI 读取word模板内容不全

0
悬赏园豆:10 [已解决问题] 解决于 2022-02-25 16:56

这是我的word模板
下面是我的代码

public void Export(string tempFilePath, string outPath, Dictionary<string, string> data)
{
using (FileStream stream = System.IO.File.OpenRead(tempFilePath))
{
XWPFDocument doc = new XWPFDocument(stream);
//遍历段落
foreach (var para in doc.Paragraphs)
{
ReplaceKey(para, data);
}
//遍历表格
foreach (var table in doc.Tables)
{
foreach (var row in table.Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
ReplaceKey(para, data);
}
}
}
}
//写文件
FileStream outFile = new FileStream(outPath, FileMode.Create);
doc.Write(outFile);
outFile.Close();
}
}

private static void ReplaceKey(XWPFParagraph para, Dictionary<string, string> data)
{
string text = "";
foreach (var run in para.Runs)
{
text = run.ToString();
foreach (var key in data.Keys)
{
//$$模板中数据占位符为$KEY$
if (text.Contains($"${key}$"))
{
if (key.IndexOf("image") > -1 && !string.IsNullOrEmpty(data[key]))
{
using (FileStream picData = new FileStream(data[key], FileMode.Open, FileAccess.Read))
{
System.Drawing.Image imgPhoto = System.Drawing.Image.FromFile(data[key]);
int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;
text = text.Replace($"${key}$", "");
if (data[key].Split('.')[1].ToLower() == "jpg")
{
NPOI.XWPF.UserModel.PictureType imgType = NPOI.XWPF.UserModel.PictureType.JPEG;
run.AddPicture(picData, (int)imgType, data[key], sourceWidth1600, sourceHeight1600);
}
if (data[key].Split('.')[1].ToLower() == "png")
{
NPOI.XWPF.UserModel.PictureType imgType = NPOI.XWPF.UserModel.PictureType.PNG;
run.AddPicture(picData, (int)imgType, data[key], sourceWidth * 1600, sourceHeight * 1600);
}
}
}
else
{
text = text.Replace($"${key}$", data[key]);
}
}

            }
            run.SetText(text, 0);
            para.Alignment = ParagraphAlignment.CENTER;
            break;
        }
    }

出现的问题是,读取到$handler$的时候,只能读取到$handler,之前也有过这个问题,检查记录那一栏的$record$只能读取到$,我以为是命名的问题,不论改成什么$jilu$,任何名字都没用,还是只能读出“$”,于是我把他删除,重新加了一列,检查记录出来了,问题又跑到上报人那里去了,这是咋回事呀。。。

问题补充:


我把记录的名字改成,record之后又出现问题了,但是检查人员又好了。。。。

我去帮你买西瓜的主页 我去帮你买西瓜 | 菜鸟二级 | 园豆:205
提问于:2021-05-23 13:48
< >
分享
最佳答案
0

写入word的时候如果直接在word里输入就会有丢失$符号的问题,在txt里打好,再剪切过去就不会有问题,不知道是什么bug

我去帮你买西瓜 | 菜鸟二级 |园豆:205 | 2022-02-25 16:53
其他回答(2)
0

Free Spire.Doc可以替换模板内容生成Word文档

收获园豆:5
ms_doudou | 园豆:1166 (小虾三级) | 2021-05-24 10:44
0

NPOI 本质上是读取world的xml 格式,建议world 导出为xml,用vs code 编辑xml 找到$关键字, 可能关键被分割或者分离了,只需要想html一样 修改节点将内容$关键字$ 放在一起就可以了。有什么问题可以继续追问

收获园豆:5
winds_随风 | 园豆:156 (初学一级) | 2021-05-24 11:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册