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 ...
随机推荐
- HDU - 1061-快速幂签到题
快速幂百度百科:快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. HDU - 1061 代码实现如下: import java.util.Sc ...
- 小程序组件 scroll-view 滑动
小程序组件 scroll-view 中分别有上下竖向滑动和左右横向滑动之分,在这次项目中刚好需要用到横向滑动,但在测试过程中发现横向滑动没有了效果(静止在那里没移动过),经调试发现: 1.scroll ...
- 基于c#的windows基础设计(学习日记2)【关于多态】
这次的多态很简单,没什么知识点 . 直接贴代码了: public abstract class Animal //建立一个抽象类 { private bool m_sex; private strin ...
- python中模块包的离线下载教程
1.简介 当我们进行Python项目的迁移时(例如迁移到另外一台服务器上),如果该服务器要求离线安装, 往往需要我们将项目中的所需模块包进行离线操作. 2.教程 2.1 首先安装pip2pi模块,它可 ...
- Python—装饰器详解
装饰器:(语法糖) 本质是函数,它是赋予函数新功能,但是不改变函数的源代码及调用方式 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 3.函数的返回值也不变 这两点简而言 ...
- 正确学习Linux系统的5个建议
摘要: 最近几年Linux系统应用越来越广泛,以至于很多人开始热衷学习Linux.但是我们都是从小都是学习windows系统长大的,从windows 98到现在的windows 10,而根据学习win ...
- js计算时间差
<!doctype html> <html lang="en"> <head> <meta http-equiv="Conten ...
- ef core code frist
https://docs.microsoft.com/zh-cn/ef/core/get-started/aspnetcore/new-db?view=aspnetcore-2.1 1.先创建对应的实 ...
- jQuery-2.DOM---节点的删除
DOM节点删除之empty()的基本用法 要移除页面上节点是开发者常见的操作,jQuery提供了几种不同的方法用来处理这个问题,这里我们开仔细了解下empty方法 empty 顾名思义,清空方法,但是 ...
- Python全栈之路----常用模块----包及跨模块导入
当你的模块文件越来越多,就需要对模块文件进行划分,比如把负责跟数据库交互的都放一个文件夹,把与页面交互相互的放入一个文件夹. 像上面这样,一个文件夹管理多个模块文件,这个文件夹就被称为包. 那不同包之 ...