C#使用Aspose.Words操作word文档
最近接到个需求,由于客服这边要导出大量有一定规则的word文件,里面的内容希望系统自动填充,例如

这里我使用Aspose.Words.dll这个类库,
1.首先,我们需要创建模板文件,毕竟有规则的东西才好开发。在各个位置处添加书签,如下:

2.核心方法如下,由于我这边需求最多填充四个参数:中文品名、英文描述、HAWB、件数,所以下面方法就定义这几个变量。其中,有些模板若不需要个别参数,直接传空值就行。
/// <summary>
/// 非危保函(将指定路径的模板Path_TempleteDoc输出至Path_out路径)
/// </summary>
/// <param name="Path_TempleteDoc">模板文件路径,包含文件名</param>
/// <param name="CNName">中文品名</param>
/// <param name="ENName">英文描述</param>
/// <param name="HAWB">HAWB</param>
/// <param name="PCS">件数</param>
/// <param name="Path_out">文件输出路径,包含文件名</param>
private void HandleGuaranteeDoc(string Path_TempleteDoc,string CNName,string ENName,string HAWB,string PCS,string Path_out)
{
string tempFile = Path.GetFullPath(Path_TempleteDoc).ToString(); //获取模板路径,这个根据个人模板路径而定。
Document doc = new Document(tempFile);
DocumentBuilder builder = new DocumentBuilder(doc); //操作word
Dictionary<string, string> dic = new Dictionary<string, string>(); //创建键值对 第一个string 为书签名称 第二个string为要填充的数据
if (!string.IsNullOrEmpty(CNName))
{
dic.Add("CNName", CNName);
}
if (!string.IsNullOrEmpty(ENName))
{
dic.Add("ENName", ENName);
}
if (!string.IsNullOrEmpty(HAWB))
{
dic.Add("HAWB", HAWB);
}
if (!string.IsNullOrEmpty(PCS))
{
dic.Add("PCS", PCS);
}
foreach (var key in dic.Keys) //循环键值对
{
builder.MoveToBookmark(key); //将光标移入书签的位置
builder.Write(dic[key]); //填充值
}
doc.Save(Path_out); //保存word
}
另附上文件的复制和整个文件夹的复制
文件复制(路径都准确到文件名):
/// <summary>
/// 大文件多次复制文件 true:复制成功 false:复制失败
/// </summary>
/// <param name="soucrePath">原始文件路径包含文件名</param>
/// <param name="targetPath">复制目标文件路径,包含文件名</param>
/// <returns></returns>
public bool CopyFile(string soucrePath, string targetPath)
{
try
{
//读取复制文件流
using (FileStream fsRead = new FileStream(soucrePath, FileMode.Open, FileAccess.Read))
{
//写入文件复制流
using (FileStream fsWrite = new FileStream(targetPath, FileMode.OpenOrCreate, FileAccess.Write))
{
byte[] buffer = new byte[ * * ]; //每次读取2M
//可能文件比较大,要循环读取,每次读取2M
while (true)
{
//每次读取的数据 n:是每次读取到的实际数据大小
int n = fsRead.Read(buffer, , buffer.Count());
//如果n=0说明读取的数据为空,已经读取到最后了,跳出循环
if (n == )
{
break;
}
//写入每次读取的实际数据大小
fsWrite.Write(buffer, , n);
}
}
}
return true;
}
catch (System.Exception ex)
{
return false;
}
}
文件夹复制(路径都指到文件夹路径)
/// <summary>
/// Copy文件夹至
/// </summary>
/// <param name="sourceDir">原路径</param>
/// <param name="toDir">目标路径</param>
public static void CopyDirectInfo(string sourceDir, string toDir)
{
if (!Directory.Exists(sourceDir))
{
throw new ApplicationException("Source directory does not exist");
}
if (!Directory.Exists(toDir))
{
Directory.CreateDirectory(toDir);
}
DirectoryInfo directInfo = new DirectoryInfo(sourceDir);
//copy files
FileInfo[] filesInfos = directInfo.GetFiles();
foreach (FileInfo fileinfo in filesInfos)
{
string fileName = fileinfo.Name;
File.Copy(fileinfo.FullName, toDir + @"/" + fileName, true);
}
//copy directory
foreach (DirectoryInfo directoryPath in directInfo.GetDirectories())
{
string toDirPath = toDir + @"/" + directoryPath.Name;
CopyDirectInfo(directoryPath.FullName, toDirPath);
}
}
C#使用Aspose.Words操作word文档的更多相关文章
- 使用Aspose.Words将Word文档转换为Tiff格式图片文件
用Aspose组件的优点是操作Word文档不需要安装Office就可以实现. 首先需要引用Aspose.Words.dll,链接地址:链接:https://pan.baidu.com/s/1rJvjp ...
- iText操作word文档总结
操作word文档的工具有很多,除了iText之外还有POI,但是POI擅长的功能是操作excel,虽然也可以操作word,但是能力有限,而且还有很多的bug,技术并不成熟,下面就重点介绍一种操作wor ...
- C#操作Word文档(加密、解密、对应书签插入分页符)
原文:C#操作Word文档(加密.解密.对应书签插入分页符) 最近做一个项目,客户要求对已经生成好的RTF文件中的内容进行分页显示,由于之前对这方面没有什么了解,后来在网上也找了相关的资料,并结合自己 ...
- Aspose.Words给word文档加水印
需求:在一些重要的Word文档需要打印时,添加水印以明出处. 方案:使用Aspose组件给word文档 代码:干货如下 /// <summary> /// Inserts a waterm ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- WPF使用Aspose.Words导出Word文档
一.创建Word文档模板 分析需要导出的word文档,将固定的内容和由程序生成的内容分开; 创建一个word(例如:Template.doc)文档,将固定的内容按照一定的格式写入当前文档中; 打开Te ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
- QTP操作word文档
QTP可以对word文档进行操作,这里最主要展示的是向word文档写入内容,并保存的功能. Option explicit Dim wordApp Set wordApp = createobject ...
- c#中操作word文档-四、对象模型
转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型 (.Net Perspective) 本文主要针对在Visual St ...
随机推荐
- cc和gcc
cc就是一个链接文件连接到gcc中.只不过cc是unix中常用的编辑工具,而在linux中用的gcc.有一些在unix中写好的程序要放在linux中,所以要指定命令cc为gcc,其实一样.用where ...
- rest framework 权限
一.权限示例 需求:不同的用户类型有不同的权限 普通用户:只能查看个人信息相关,序号:1 VIP 用户:只能查看个人信息相关,序号:2 SVIP 用户:查看订单相关信息,序号:3 1.新建 app/u ...
- svg动画 animate
最近使用到svg的动画animate,简单总结下animate的主要属性: 1.定义:SVG 的animate 动画元素放在形状元素的内部,用来定义一个元素的某个属性如何踩着时点改变.在指定持续时间里 ...
- Servlet方法之service()
1.service一定要用吗?作用是什么?是不是在程序开始运行时,自动装载执行的系统方法(类似于main)? Service是类GenericServlet中最重要的方法,每次客户向服务器发出请求时, ...
- 《OD学spark》20160925 Spark Core
一.引言 Spark内存计算框架 中国Spark技术峰会 十二场演讲 大数据改变世界,Spark改变大数据 大数据: 以Hadoop 2.x为主的生态系统框架(MapReduce并行计算框架) 存储数 ...
- 洛谷P1378 油滴扩展
P1378 油滴扩展 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完 ...
- 谢特——后缀数组+tire 树
题目 [题目描述] 由于你成功地在 $ \text{1 s} $ 内算出了上一题的答案,英雄们很高兴并邀请你加入了他们的游戏.然而进入游戏之后你才发现,英雄们打的游戏和你想象的并不一样…… 英雄们打的 ...
- 洛谷P3527 [POI2011]MET-Meteors(整体二分)
传送门 整体二分 先二分一个答案,判断是否可行,把可行的全都扔到左边,不可行的扔到右边 判断是否可行用树状数组就行 具体细节看代码好了 整体二分细节真多……也可能是我大脑已经退化了? //minamo ...
- Java基础--正则表达式的规则
注意:正则表达式只关注格式是否正确,不关注内容是否有效. 一.字符集合, []表示一个字符. 1.[abc] :指a,b,c中的任意一个字符. 2.[^abc]:指除了a,b,c外的任意字符. 3.[ ...
- 存储引擎:MySQL系列之七
一.MyISAM存储引擎 缺点: 不支持事务 最小粒度锁:表级 读写相互阻塞,写入不能读,读时不能写 不支持MVCC(支持多版本并发控制机制) 不支持聚簇索引 不支持数据缓存 不支持外键 崩溃恢复性较 ...