/// <summary> /// 替换word中指定内容 /// </summary> /// <param name="wordPath">路径</param> /// <param name="keyName">被替换内容</param> /// <param name="keyValue">替换内容</param> /// <returns></returns> public string ReplaceValueByKeyName(string wordPath, string keyName, string keyValue) { FileStream fs = new FileStream(wordPath, FileMode.OpenOrCreate, FileAccess.ReadWrite); XWPFDocument docx = new XWPFDocument(fs);//打开07(.docx)以上的版本的文档 //遍历word中的段落 foreach (var para in docx.Paragraphs) { if (!para.ParagraphText.Contains(keyName)) continue; para.ReplaceText(para.ParagraphText, keyValue);
// NewLine(para, "测试换行"); } FileStream output = new FileStream(wordPath, FileMode.Create); docx.Write(output); fs.Close(); fs.Dispose(); output.Close(); output.Dispose(); return wordPath; }
/// <summary> /// 替换指定内容为图片|图片居中 /// </summary> /// <param name="wordPath">文件路径</param> /// <param name="keyName">需被替换内容</param> /// <param name="imgPath">图片路径</param> /// <param name="imgType">图片类型</param> public void InsertImgToKey(string wordPath, string keyName, string imgPath, PictureType imgType = PictureType.JPEG) { FileStream fs = new FileStream(wordPath, FileMode.Open, FileAccess.Read); XWPFDocument myDocx = new XWPFDocument(fs);//打开07(.docx)以上的版本的文档 //遍历word中的段落 foreach (var para in myDocx.Paragraphs) { if (!para.ParagraphText.Contains(keyName)) continue; para.ReplaceText(para.ParagraphText, string.Empty); XWPFRun run = para.CreateRun(); using (FileStream picData = new FileStream(imgPath, FileMode.Open, FileAccess.Read)) { run.AddPicture(picData, (int)imgType, imgPath, 100 * 9525, 100 * 9525); } para.Alignment = ParagraphAlignment.CENTER; break; } //遍历表格 foreach (var table in myDocx.Tables) { foreach (var row in table.Rows) { foreach (var cell in row.GetTableCells()) { foreach (var para in cell.Paragraphs) { if (!para.ParagraphText.Contains(keyName)) continue; para.ReplaceText(para.ParagraphText, string.Empty); XWPFRun run = para.CreateRun(); using (FileStream picData = new FileStream(imgPath, FileMode.Open, FileAccess.Read)) { run.AddPicture(picData, (int)imgType, imgPath, 100 * 9525, 100 * 9525); } para.Alignment = ParagraphAlignment.CENTER; break; } } } } FileStream output = new FileStream(wordPath, FileMode.Create); myDocx.Write(output); fs.Close(); fs.Dispose(); output.Close(); output.Dispose(); }
换行
1 2 3 4 5 6 7 | private void NewLine(XWPFParagraph paragraph) { paragraph.CreateRun().AddCarriageReturn(); //新增式换行--当前行之后 paragraph.CreateRun().SetText( "" ); //para.InsertNewRun(row).AddCarriageReturn(); //插入式换行--当前行之前 //para.InsertNewRun(row).SetText("换行001"); } |
注:换行问题,不同版本的word或者npoi 版本操作方式存在不一致现象,需要亲测
private void NewLine(XWPFParagraph paragraph, string value) { value = value + "\r\n"; //paragraph.CreateRun().AddCarriageReturn();//新增式换行--当前行之后 paragraph.CreateRun().SetText(value); //paragraph.CreateRun().AddCarriageReturn(); //paragraph.CreateRun().Paragraph.CreateRun().AddCarriageReturn(); //paragraph.CreateRun().Paragraph.CreateRun().SetText(value); }
博客内容主要用于日常学习记录,内容比较随意,如有问题,还需谅解!!!
分类:
008 自定义/常用/第三方控件用法
, 009 YY学习记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)