NPOI 操作Word
/// <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, * , * );
}
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, * , * );
}
para.Alignment = ParagraphAlignment.CENTER;
break;
}
}
}
} FileStream output = new FileStream(wordPath, FileMode.Create);
myDocx.Write(output);
fs.Close();
fs.Dispose();
output.Close();
output.Dispose();
}
换行
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);
}
NPOI 操作Word的更多相关文章
- NPOI操作word文档1
1.首先进行XWPFDocument类的实例化,该类的实例对应一个word文档 XWPFDocument MyDoc = new XWPFDocument(); 2.设置页面的大小 CT_SectPr ...
- C#中使用Spire.docx操作Word文档
使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法. 之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比 ...
- 利用NPOI导出Word文档帮助类
/// <summary> /// NPOI操作Word /// </summary> public class NpoiWordHelper { /// <summar ...
- NPOI操作EXCEL(一)——npoi基础
去年项目有一个子模块需要解析上百张不一样的excel表格入库,当时用的NPOI,做了很久...也尝试想把代码分享到oschina,结果没坚持两篇就放弃了. 赶巧的是,昨天运营那边提出要录入一些基础数据 ...
- 数据字典生成工具之旅(4):NPOI操作EXECL
这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...
- C#开发中使用Npoi操作excel实例代码
C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...
- NPOI操作EXCEL----------NPOI基础01
来源地址:http://www.cnblogs.com/csqb-511612371/p/4878059.html 先来介绍一下NPOI基本的东西: 1.下载地址:http://npoi.codepl ...
- NPOI操作Excel(一)--NPOI基础
用C#读取Excel的方法有很多中,由于近期工作需要,需要解析的Excel含有合并单元格以及背景色等特殊要求,故在网上查了一些关于读Excel的方法的优缺点,觉得NPOI能满足我的需要,所以搜索了一些 ...
- .net core 使用NPOI填充Word模板导出Word
最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...
随机推荐
- html缓存控制
- 完整的Django入门指南学习笔记6
前言 欢迎来到系列教程的第六部分!在这篇教程中,我们将详细探讨基于类的视图(简称CBV).我们也将重构一些现有的视图,以便利用内置的基于类的通用视图(Generic Class-Based Views ...
- 『TensorFlow』流程控制
『PyTorch』第六弹_最小二乘法对比PyTorch和TensorFlow TensorFlow 控制流程操作 TensorFlow 提供了几个操作和类,您可以使用它们来控制操作的执行并向图中添加条 ...
- css实现0.5px
使用缩放来0.5来实现,注意兼容各种浏览器 .frz-list li:after { content: ''; position: absolute; bottom:; height: 1px; wi ...
- c# Excel 行高、列宽、合并单元格、单元格边框线、冻结
http://www.2cto.com/kf/201007/52724.html 新增选择整列: Range = ((Range)(WALeTieSheet.Cells[1, PwCStartCol_ ...
- Forth 内存布局
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- JsonLayout log4j2 json格式输出日志
如果日志输出时,想改变日志的输出形式为Json格式,可以在log4j2.xml中使用JsonLayout标签,使日志输出格式为Json格式. 前提需要Jackson的包,保证项目中包含jackson的 ...
- 获取进程ID,父进程ID,进程完整路径
准备写一个进程管理的功能模块,今天下午先写了扫描获取本机各个进程路径,获取各个进程映像名称,进程完整路径. 要获取进程信息,第一步想到的就是提权,提权代码用过多次了,今天也小结了一下(http://w ...
- Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules
原文出处:http://jingwang0523.blog.163.com/blog/static/9090710320113294551497/ 最近在用eclipse做项目,新建项目时什么都贪新, ...
- Matlab_audiowrite_音频生成
输出音频文件所需函数为 audiowrite .通过例程进行解释: % 生成时间序列 fs = 5000; % [Hz] 信号采样频率 T = 1; % [s] 信号长度 x = 0:1/fs:T; ...