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 ...
随机推荐
- guxh的python笔记八:特殊方法
1,类的特殊方法 新建一个类,本章内容中的特殊方法如果不创建类或新增方法,默认使用的就是下面的类: class Foo: """this is Foo"&q ...
- BOM&DOM
BOM(浏览器对象模型) 1. location相关 . location.href 获取当前url . location.href="http://www.sogo.com" 跳 ...
- DBMS_NETWORK_ACL_ADMIN (OCP 053 第七题)
You create an access control list(ACL)using the DBMS_NETWORK_ACL_ADMIN package It is a list of users ...
- koa和express对比
不同: 1.启动方式不同 koa采用了new Koa()的方式,而express采用传统的函数形式 2.中间件形式二者不一样,这是由二者处理中间件的逻辑差异导致的,实际上这也是二者最根本的差别 3.k ...
- 在Postman中使用不受信任的SSL证书(转)
add by zhj: 在http://www.cnblogs.com/ajianbeyourself/p/3898911.html中提到: 对于不受信任的证书,浏览器会发出告警,不过这些也只是告警而 ...
- 数字证书、SSL、HTTPS及在Nginx中的配置
一.什么是 RSA.SSL.HTTPS RSA:它是非对称加密算法的一种,而且是最常用的一种.它的理论基础是:计算两个大质数的乘积非常简单,而对该乘积进行因子分解就非常困难.而且 这两个质数越大,对其 ...
- python-模块2
from collections import namedtuple # # 类 # p = namedtuple("Point", ["x", "y ...
- tensorFlow(三)逻辑回归
tensorFlow 基础见前博客 逻辑回归广泛应用在各类分类,回归任务中.本实验介绍逻辑回归在 TensorFlow 上的实现 理论知识回顾 逻辑回归的主要公式罗列如下: 激活函数(activati ...
- [Leetcode 134]汽车加油站 Gas Station (环形)
[题目] There are N gas stations along a circular route, where the amount of gas at station i is gas[i] ...
- Java基础-常用工具类(二)
Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入. 通过 Scanner 类的 next() 与 nextLine() ...