/// <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的更多相关文章

  1. NPOI操作word文档1

    1.首先进行XWPFDocument类的实例化,该类的实例对应一个word文档 XWPFDocument MyDoc = new XWPFDocument(); 2.设置页面的大小 CT_SectPr ...

  2. C#中使用Spire.docx操作Word文档

    使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法. 之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比 ...

  3. 利用NPOI导出Word文档帮助类

    /// <summary> /// NPOI操作Word /// </summary> public class NpoiWordHelper { /// <summar ...

  4. NPOI操作EXCEL(一)——npoi基础

    去年项目有一个子模块需要解析上百张不一样的excel表格入库,当时用的NPOI,做了很久...也尝试想把代码分享到oschina,结果没坚持两篇就放弃了. 赶巧的是,昨天运营那边提出要录入一些基础数据 ...

  5. 数据字典生成工具之旅(4):NPOI操作EXECL

    这篇会介绍NPOI读写EXECL,读写EXECL的组件很多,可以使用微软自己的COM组件EXECL.exe读写,不过这种方式限制很大. 1:客户环境必须装Office(虽然现在机子上不装Office的 ...

  6. C#开发中使用Npoi操作excel实例代码

    C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Exce ...

  7. NPOI操作EXCEL----------NPOI基础01

    来源地址:http://www.cnblogs.com/csqb-511612371/p/4878059.html 先来介绍一下NPOI基本的东西: 1.下载地址:http://npoi.codepl ...

  8. NPOI操作Excel(一)--NPOI基础

    用C#读取Excel的方法有很多中,由于近期工作需要,需要解析的Excel含有合并单元格以及背景色等特殊要求,故在网上查了一些关于读Excel的方法的优缺点,觉得NPOI能满足我的需要,所以搜索了一些 ...

  9. .net core 使用NPOI填充Word模板导出Word

    最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...

随机推荐

  1. English trip V2 - A 1. Mother tongue 母语 Teacher:Lamb Key: Comparative 比较级 superlative 最高级

    In this lesson you will learn to talk about languages. 课上内容(Lesson) mother tongue: Chinese official  ...

  2. 解决安卓UI刷新卡屏,只显示最后一处刷新的问题

    ---恢复内容开始--- 错误1 安卓的机制决定了只有UI线程(也就是主线程)才能更新UI界面 否则会导致UI界面混乱的问题 这就说明了在new Thread中直接showImage是会报“出现非主线 ...

  3. webstorm keys

    {"licenseId":"ThisCrackLicenseId","licenseeName":"xuza",&quo ...

  4. angular js中ng-model时间格式化

    直接上带代码,事实上此时不用ng-model,直接用value即可 <div class="form-group m-b-sm"> <label class=&q ...

  5. MapServer Configuring with IIS

    MapServer Configuring with IIS 一.前言 1.MapServer简介 MapServer是一个用C语言编写的开源地理数据呈现引擎.除了浏览地理信息系统数据之外,MapSe ...

  6. Linux c读取任意大小文件的所有数据

    代码如下,执行完之后被分配的动态内存的指针会保存到result中.由于是动态分配内存,读取内容不再使用之后注意用free 释放掉,如不明白,请多搜索以下动态内存分配的资料. #include < ...

  7. Android : 跟我学Binder --- (4) 驱动情景分析

    目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...

  8. 创建Car类,包含name,price属性,构造器等方法,创建测试类,在main方法中创建Set接口的实现类,添加5个以上的Car对象,遍历集合元素,验证重复元素是否过滤了; 如果没有过滤,实现过滤功能;把每个小车的price降10000元,再遍历,查看price是否已改变

    i汽车类 package com.lanxi.demo2_3; public class Car { private String name; private int price; @Override ...

  9. 1.配置OpenCV开发环境VS2010

  10. 剑指Offer 4. 重建二叉树 (二叉树)

    题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...