Aspose
是Aspose公司旗下的最全的一套office文档管理解决方案,主要提供.net跟java两个开发语言的控件套包。功能异常强大,各个平台基本都支持,强力推荐大家使用。
本文就根据我所用的经历简要介绍Aspose的一些用法!
注:由于小弟只在ASP.NET 中曾用Aspose 导出过word ,所以接下来的介绍都是asp.net环境下的一些用法。
资源包
首先我们得去官网下载 asp.net aspose的DLL 程序集,稍后会在项目中使用。
官网的DLL 会带有水印和商标,因此大家可以在网上搜索破解版,这里我就不啰嗦了
基本用法
1 | Aspose.Words.Document doc = new Aspose.Words.Document(); |
用来申明一个 word文件对象,后面() 里可以增加参数,实例化有5个重载,括号中什么都不写表示空文档对象,若写上本地word的路径,则是将word文件读取到当前word文件对象中。
1 | Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc); |
DocumentBuilder 类似一个文档操作工具,用来操作已经实例化的Document 对象,DocumentBuilder 里有许多方法 例如插入文本、插入图片、插入段落、插入表格等等
1 | #region 属性说明 |
1 | ////建立Document物件 |
高级进阶 ——–书签的用法
有时候我们希望在word指定的位置插入指定的内容,这个时候我们就需要用到书签了,需要我们在word模版中手动建立书签,请看下面的截图
将光标停留在红色框的位置,然后在word 插入 菜单中找到 书签
给书签取一个名字,然后添加,那后台如何去找到这个书签,请接着往下看
1 | Bookmark mark = doc.Range.Bookmarks["ArticleByTime"]; |
我们将这个方法封装成一个通用的方法,方便重复使用
1 | /// 用Bookmark绑定word对应项的值 |
另外设置书签还有一中方法,MoveToBookmark(),移动到指定书签的位置,然后插入相关的内容
高级进阶 ——–表格的用法
表格可以用HTML 的table 拼接,也可以使用 aspose内部的Table 。
我将2种方式进行了封装,方便大家调用,请看下面这段代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124/// <summary>
/// 向指定的位置插入指定的table数据集
/// </summary>
/// <param name="Location">标签位置</param>
/// <param name="builder">word对象</param>
/// <param name="dt">table数据集</param>
/// <param name="ColumnsWidth">列的宽度</param>
/// <param name="Columns">绑定的列</param>
/// <param name="ColumnsNames">列显示的名字</param>
/// <param name="IsNo">是否开启序号</param>
/// <param name="IsHtml">是否开启HTML渲染表格</param>
private void InsertWordTables(string Location, Aspose.Words.DocumentBuilder builder, DataTable dt, int[] ColumnsWidth, string[] Columns, string[] ColumnsNames, bool IsNo, bool IsHtml)
{
try
{
builder.MoveToBookmark(Location);
if (IsHtml)
{
StringBuilder strTable = new StringBuilder();
if (dt.Rows.Count > 0)
{
string tdStyle = "border:solid windowtext 1.0pt;padding:5px;text-align:center;";
string thStyle = "border:solid windowtext 1.0pt;background:silver;padding:5px;text-align:center;";
string tbStyle = "border-collapse: collapse;border:1px solid; padding:5px;text-align:center;";
strTable.Append("<table style='" + tbStyle + "' cellpadding='0' cellspacing='0'><tr>");
if (IsNo)
{
strTable.Append("<th style='" + thStyle + "'>序号</th>");
}
for (int i = 0; i < ColumnsNames.Length; i++)
{
strTable.Append("<th style='" + thStyle + "'>" + ColumnsNames[i] + "</th>");
}
strTable.Append("</tr>");
for (int i = 0; i < dt.Rows.Count; i++)
{
strTable.Append("<tr>");
if (IsNo)
{
strTable.Append("<td style='" + tdStyle + "'>" + (i + 1).ToString() + "</td>");
}
for (int j = 0; j < Columns.Length; j++)
{
strTable.Append("<td style='" + tdStyle + "'>" + dt.Rows[i][Columns[j].ToString()].ToString() + "</td>");
}
strTable.Append("</tr>");
}
strTable.Append("</table>");
}
else
{
strTable.Append("<p>暂无</p>");
}
builder.InsertHtml(strTable.ToString());
}
else
{
if (dt.Rows.Count > 0)
{
#region 插入表格
builder.InsertParagraph();
builder.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
//开始插入表格
builder.StartTable();
if (IsNo)
{
builder.InsertCell();
builder.Font.Bold = true;
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.Width = 40;
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.Silver;
builder.CellFormat.HorizontalMerge = CellMerge.None;
builder.Write("序号");
}
for (int i = 0; i < ColumnsNames.Length; i++)
{
builder.InsertCell();
builder.Font.Bold = true;
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.Width = ColumnsWidth[i];
builder.CellFormat.VerticalMerge = CellMerge.First;
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.Silver;
builder.CellFormat.HorizontalMerge = CellMerge.None;
builder.Write(ColumnsNames[i]);
}
builder.EndRow();
for (int i = 0; i < dt.Rows.Count; i++)
{
builder.Font.Bold = false;
if (IsNo)
{
builder.InsertCell();
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = 40;
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.White;
builder.Write((i + 1).ToString());
}
for (int j = 0; j < Columns.Length; j++)
{
builder.InsertCell();
builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;
builder.CellFormat.VerticalMerge = CellMerge.None;
builder.CellFormat.Width = ColumnsWidth[j];
builder.CellFormat.Shading.BackgroundPatternColor = System.Drawing.Color.White;
builder.Write(dt.Rows[i][Columns[j].ToString()].ToString());
}
builder.EndRow();
}
builder.EndTable();
#endregion
}
else
{
builder.InsertHtml("<p>暂无</p>");
}
}
}
catch (Exception ex)
{
throw;
}
}
关于aspose 还有很多没有讲解到的,请看官网的API,其实还有很多方法和属性我也没有用到过,若大家有更先进的方法记得留言交流!