关于Aspose对于Word操作的一些扩展及思考
Aspose.word
/// <summary>
/// 使用操作者
/// </summary>
/// <param name="oWordApplic"></param>
/// <param name="oDoc"></param>
public static DocumentBuilder Builder(this Aspose.Words.Document oDoc)
{
return new DocumentBuilder(oDoc);
}
这样程序中调用写法就改为: DocumentBuilder builder=Doc.Builder();
2、将一些经常出现或者反应习惯进行集成,静态化处理。
比如说我们这里面插入文字,如果按照Aspose提供的,那么我们可能需要做的是:
oWordApplic.Bold = conBold;
oWordApplic.Font.Size = conSize;
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Left;
oWordApplic.Write(strText);
但是我们可以看到,一般操作不需要黑体,字体大小也比较固定,基本上都是靠左对齐,那么我们可以进行一些集成,然后我们按照变动优先级进行默认参数排序(通常认为改动字体可能行最大、其次是是否黑体,对齐方式变动可能性最小)
/// <summary>
/// 添加内容
/// </summary>
/// <param name="strText"></param>
public static void WriteText(this DocumentBuilder oWordApplic, string strText, double conSize = 24, bool conBold = false
, ParagraphAlignment conAlign = ParagraphAlignment.Left)
{
oWordApplic.Bold = conBold;
oWordApplic.Font.Size = conSize;
switch (conAlign)
{
case ParagraphAlignment.Left:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Left;
break;
case ParagraphAlignment.Center:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Center;
break;
case ParagraphAlignment.Right:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Right;
break;
default:
oWordApplic.ParagraphFormat.Alignment = ParagraphAlignment.Left;
break;
}
oWordApplic.Write(strText);
}
那么我们在插入文字时oWordApplic.WriteText(strText);即可~
3、善于将其他的类库与操作类库集成
这里有一个例子,我们经常要将个DataSet里面的数据插入到word的行里面去,我们可以根据DataSet的数据结构特点与Word的表格结构特点类似
我们第一步做的是做一个DataRow,Dictionary,Aspose.Words.Node相互映射并且进行区域行的文字替换。
// 根据字典替换
public static void ReplaceText(this Aspose.Words.Node node, Dictionary<string,string> _ReplaceDic,System.Data.DataRow dr)
{
//System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(oleText);
foreach (System.Data.DataColumn dc in dr.Table.Columns)
{
if (_ReplaceDic.Keys.Contains(dc.ColumnName))
{
node.Range.Replace(_ReplaceDic[dc.ColumnName], dr[dc].ToString(), false, false);
}
else
{
node.Range.Replace(dc.ColumnName, dr[dc].ToString(), false, false);
}
}
}
然后再根据DataTable对word表格进行行控制:
//表格增加新行
public static Row InsertTableRow(this Table table)
{ // Retrieve the first table in the document.
// Clone the last row in the table.
Row clonedRow = (Row)table.LastRow.Clone(true); // Remove all content from the cloned row's cells. This makes the row ready for
// new content to be inserted into.
foreach (Cell cell in clonedRow.Cells)
cell.RemoveAllChildren();
// Add the row to the end of the table.
table.AppendChild(clonedRow);
return clonedRow;
}
这样就会完全遵循了我们所谓的Word替换规则,并且还不会影响word行的样式甚至一些自定义的文字。
4、尝试将代码、类库进行模型化与具现化。
这里讲述的不是代码的一些写法了,而是对待类库的一种理解方式。
Aspose对象首先我们要看他的数据用例
1、Aspose对象关系与Word对象关系肯定是一致的。
2、理解word的文档节点与Aspose中的Node节点的对应关系(文字、图形、书签、表格等)
3、基本上所有的Aspose操作都能找到对应的Word操作(操作一致性,从操作word方向来理解Aspose的)
言而总之、总而言之,反正就这样了
关于Aspose对于Word操作的一些扩展及思考的更多相关文章
- aspose 生成word 简单的文档操作
package aspose.com.word; import com.aspose.words.Document;import com.aspose.words.DocumentBuilder; p ...
- [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc
开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...
- 开源word操作组件DocX的记录
开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱 ...
- DocX开源WORD操作组件的学习系列四
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- DocX开源WORD操作组件的学习系列三
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- DocX开源WORD操作组件的学习系列二
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- DocX开源WORD操作组件的学习系列一
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- WORD操作的问题
最近有个小项目主要是对文档,特别是WORD的操作,读取表格数据存到数据库: 再把数据库的数据读出来写入WORD,下载下来,诸如此类的东西,说来很是简单. 想了想是用什么开发呢? C#常用的,没话说,也 ...
- Aspose.Cells相应操作及下载
Aspose.Cells相应操作 1,上传 1.1 Workbook Workbook workBook = new Workbook(); 属性: 名称 值类型 说明 Colors Color[] ...
随机推荐
- Eclipse+Pydev +Django搭建开发环境时容易出错的几点
1.注意安装的软件和系统的位数是否匹配. 2.安装Django框架的时候注意是否安装了setuptools工具.在Python中,安装第三方模块,是通过setuptools这个工具完成的.Python ...
- codevs 2152 滑雪
2152 滑雪 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场 ...
- 转:搭建Hive的图形界面
原文来自于:http://blog.csdn.net/w13770269691/article/details/17353595 今天想使用一下Hive的图形化工具HWI,我的Hive是0.12.0版 ...
- poj 1606Jugs
http://poj.org/problem?id=1606 #include<cstdio> #include<cstring> #define MAXN 1000000 u ...
- EMV卡复位应答的时间特性 ---ISO7816协议
1.冷复位的时间特性 图1 如图1所示: T0为200clk 从T0结束到RST变为高电平为40000-45000个clock 从RST变为高电平后,卡片必须在400-40000个clock之间应答, ...
- 【转】浮点格式IEEE754详解
原文网址:http://www.cnblogs.com/zjujunge/archive/2012/09/13/2682613.html Intel聘请了最好的数值分析家来为8087FPU设计浮点数格 ...
- Android新浪微博客户端(七)——ListView中的图片异步加载、缓存
原文出自:方杰|http://fangjie.info/?p=193转载请注明出处 最终效果演示:http://fangjie.sinaapp.com/?page_id=54 该项目代码已经放到git ...
- C++ Template Specialization (模板特化)
个人理解这个东西说白了就是当模板类(或函数)的类型参数为某特定值时用对应的特化定义代之. 看个例子吧 #include <iostream> using namespace std; te ...
- spring配置文件中id与name
1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的. 2.name属性则没有这些限定,你可以使用几乎任何的名称 3.配置文件中不允许出现两个id相同的<bean> ...
- 判断客户端浏览器是否安装了Flash插件
<script> /*检测浏览器是否安装了插件(在IE 中无效)*/ function hasPlugin(name){ name = name.toLowerCase(); for(va ...