之前一直通过在VS里添加引用COM里Microsoft Word 16.0 Object Library引用,导入Microsoft.Office.Interop.Word命名空间,使用此命名空间里的相关类对Word文件进行操作。这种方法有个致命缺点,就是当电脑里未安装Word软件或者Word软件版本与引用的COM库里的版本不一致时,会导致操作Word文件失败。
其实可以利用NuGet里的NPOI包来对Word文件进行操作。
通过NuGet管理器导入NPOI包后,在工程文件中引入NPOI.XWPF.UserModel命名空间,绝大部分操作Word文件需要用到的功能模块都在这个命名空间中,例如XWPFDocument类表示一个Word文档对象,XWPFParagraph类表示一个段落对象,XWPFRun类表示段落内的文本对象,XWPFTable类表示表格对象,等等,详细列表可以通过对象浏览器查看NPOI.OOXML程序集。
使用NPOI包操作Word文件代码
using System;
using System.Collections.Generic;
using System.IO;
using NPOI.XWPF.UserModel;
namespace MyWrod{
public class MyWord{
public void ExportWord() { //导出Word文件
//创建一个Word文档对象
XWPFDocument doc = new XWPFDocument();
//在Word文档对象中创建一个段落对象
XWPFParagraph paragraph = doc.CreateParagraph();
paragraph.Alignment=ParagraphAlignment.CENTER; //设置此段落对齐方式为水平居中
paragraph.SpacingBetween=1.5; //设置段落的行距,如果Rule设置成EXACT,将此值乘12得到固定的磅值,否则为多倍行距
paragraph.SpacingLineRule = LineSpacingRule.EXACT; //设置行距的值类型为固定值,不设置的话默认为多倍行距,一定要在定义SpacingBetween值后设置此属性
//在此段落对象中创建一个文本对象,并设置文本的字体、大小及颜色
XWPFRun run = paragraph.CreateRun();
run.FontFamily="黑体";run.FontSize=16;run.SetColor("FF0000");
run.SetText("我是内容"); //写入文本内容
//创建Word文件并写入内容
FileStream fs = new FileStream("Word文件的路径及文件名",FileMode.Create);
doc.Write(fs);
fs.Close();
}
public void ImportWord() { //读取Word文件,并在此基础上操作
FileStream fs = new FileStream("Word文件的路径及文件名",FileMode.Open);
//根据提供的文件,创建一个Word文档对象
XWPFDocument doc = new XWPFDocument(fs);
//获取Word文档的所有段落对象
IList<XWPFParagraph> paragraphs = doc.Paragraphs;
//所有表格对象
IList<XWPFTable> tables = doc.Tables;
//指定表格中行的对象
List<XWPFTableRow> rows = tables[0].Rows;
//指定行的所有单元格对象
List<ICell> cells = rows[0].GetTableICells();
//指定单元格
XWPFTableCell cell=row.GetCell(0);
//指定单元格的段落对象
XWPFParagraph paragraph=cell.Paragraphs[0];
//……
}
}
}