以前对Excel或Word文档操作都使用微软的COM组件Microsoft Word 15.0 object library。

但是这种方式必须要求服务器上安装Office,而且会出现读写操作完成后未成功释放资源的情况。

还有使用NPOI的方式,可以在没有安装Office的情况下对Word或Excel文档进行读写操作,但是面对复杂的需求,还是显得无能为力。

于是出现了一些其他的API库,如Spire.Doc和Aspose,不但可以很好地读写操作Office文档,而且可以轻松实现PDF等文档格式的转换。

Spire.Doc支持JAVA和C#开发语言。我们可以从官网下载到。

Document document = new Document();
Section section = document.AddSection();
ShowProgressBar(); //显示进度条
for (int i = ; i < dsSpInfo.Tables[].Rows.Count; i++)
{
GenerateWord(document,section, dsSpInfo.Tables[], dsQiandi.Tables[], dsBaocun.Tables[],i); //生成Word文档
}
section.AddColumn(550f, 50f); //添加分栏,参数为分栏宽度
section.AddColumn(550f, 50f);
section.MakeColumnsSameWidth();
string s = Guid.NewGuid().ToString("N") + ".docx";
document.SaveToFile(@"temp\" + s, FileFormat.Docx);
document.Close();
System.Diagnostics.Process.Start(@"temp\" + s);
private void GenerateWord(Document document,Section section,DataTable dtSpInfo, DataTable dtQiandi, DataTable dtBaocun,int index)
{ Paragraph pFamily = section.AddParagraph(); //添加段落
AddTextRange(section, pFamily, cfamily, , true, "黑体", Spire.Doc.Documents.HorizontalAlignment.Center);
AddTextRange(section, pFamily, family, , true, "宋体", Spire.Doc.Documents.HorizontalAlignment.Center); Paragraph paragraph = section.AddParagraph();
AddTextRange(section, paragraph, cGenus, , true, "黑体", Spire.Doc.Documents.HorizontalAlignment.Left);
AddTextRange(section, paragraph, genus, , true, "Times New Roman", Spire.Doc.Documents.HorizontalAlignment.Left); DataRow[] drQiandi = dtQiandi.Select("SPID='" + spid + "'"); //获取表格数据
if (drQiandi.Length > )
{
String[] headerQiandi = { "保存地点", "种质份数", "个体数量", "引种方式", "来源地", "生长状况" }; //表头字段
string[][] arrQiandiData = new string[drQiandi.Length][];
for (int i = ; i < drQiandi.Length; i++)
{
arrQiandiData[i] = new string[] { drQiandi[i]["保存地点"].ToString(), drQiandi[i]["种质份数"].ToString(), drQiandi[i]["个体数量"].ToString(), drQiandi[i]["引种方式"].ToString(), drQiandi[i]["来源地"].ToString(), drQiandi[i]["生长状况"].ToString() };
}
Table tableQiandi = section.AddTable(); //新建表格
tableQiandi.ResetCells(arrQiandiData.Length + , headerQiandi.Length);
tableQiandi.TableFormat.Borders.BorderType = Spire.Doc.Documents.BorderStyle.Single; TableRow rowQiandi = tableQiandi.Rows[]; //添加行
rowQiandi.IsHeader = true; //设为表头
rowQiandi.Height = ;
rowQiandi.HeightType = TableRowHeightType.Auto;
for (int i = ; i < headerQiandi.Length; i++) //生成表头
{
rowQiandi.Cells[i].Width = ;
rowQiandi.Cells[i].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
rowQiandi.Height = ;
rowQiandi.HeightType = TableRowHeightType.Auto;
Paragraph p = rowQiandi.Cells[i].AddParagraph();
AddTextRange(section, p, headerQiandi[i], , true, "黑体", Spire.Doc.Documents.HorizontalAlignment.Center);
} for (int r = ; r < arrQiandiData.Length; r++) //生成表体
{
TableRow dataRow = tableQiandi.Rows[r + ];
dataRow.RowFormat.BackColor = Color.Empty;
for (int c = ; c < arrQiandiData[r].Length; c++)
{
dataRow.Cells[c].Width = ;
dataRow.Cells[c].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
TextRange tr = dataRow.Cells[c].AddParagraph().AppendText(arrQiandiData[r][c]);
tr.CharacterFormat.FontSize = ;
}
}
}
}
private void AddTextRange(Section section, Paragraph pragraph, string word, float fontSize, bool isBold, string fontName, Spire.Doc.Documents.HorizontalAlignment alignType)
{ TextRange textRange = pragraph.AppendText(word);
textRange.CharacterFormat.FontSize = fontSize;
textRange.CharacterFormat.Bold = isBold;
textRange.CharacterFormat.FontName = fontName;
pragraph.Format.HorizontalAlignment = alignType;
}

下面是生成的效果图

需要注意的是,Spire.Doc是收费软件,如果超过了免费版生成表格的数量(好像是25个),就要收取费用。否则会在生成的文档的第一页上方中添加广告。

C#使用Spire.Doc Word for .Net读写Word的更多相关文章

  1. Spire.Doc组件读取与写入Word

    之前写了一篇开源组件DocX读写word的文章,当时时间比较匆忙选了这个组件,使用过程中还是有些不便,不能提前定义好模版,插入Form表单域进行替换.最近无意中发现Spire.Doc组件功能很强大,目 ...

  2. 使用Spire.Doc组件利用模板导出Word文档

    以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作, ...

  3. 【好文翻译】一步一步教你使用Spire.Doc转换Word文档格式

    背景: 年11月,微软宣布作为ECMA国际主要合作伙伴,将其开发的基于XML的文件格式标准化,称之为"Office Open XML" .Open XML的引进使office文档结 ...

  4. 使用Spire.Doc来转换文本

    使用Spire.Doc来转换文本 前段时间,我为不熟悉这个产品的读者们写了一篇关于我对 Spire.Doc的初识印象.Spire.Doc是一个专业的Word .NET库,它是专门为开发人员设计的用来快 ...

  5. Spire.Doc组件

    使用Spire.Doc组件利用模板导出Word文档 以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. ...

  6. [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc

    开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...

  7. 在C#中使用Spire.doc对word的操作总结

    在C#中使用Spire.doc对word的操作总结 在最近的工程中我们要处理一些word文档.通过在网上的大量搜索,我发现大多数软件功能不是不完整就是有重复.极少数可以完全实现的word组件又要收费. ...

  8. Word转图片(使用Spire.doc)

    Spire.Doc for .NET是一款由E-iceblue公司开发的专业的Word .NET类库.支持.net,WPF,Silverlight, 下载地址:http://www.e-iceblue ...

  9. 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc (转)

      [原文地址]http://www.cnblogs.com/liqingwen/p/5898368.html 序 本打算过几天简单介绍下组件 Spire.XLS,突然发现园友率先发布了一篇,既然 x ...

随机推荐

  1. 调整Eclipse中代码字体字号

    Window-->preferences-->general-->appearence-->Colors and fonts中的Basic节点选text font,Edit一下

  2. 用openssl为WEB服务器生成证书(自签名CA证书,服务器证书)

    用openssl为WEB服务器生成证书(自签名CA证书,服务器证书) 来源: https://www.cnblogs.com/osnosn/p/10608455.html 来自osnosn的博客 写于 ...

  3. primo驱动启动顺序

    primo驱动启动顺序HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\ServiceGroupOrderSystem ReservedEMSWdfLoa ...

  4. goflyway简单使用

    前言 一个朋友最近新买的搬瓦工ip突然被强了,要等10周左右才能免费更换ip.而恰巧在网上看到了Goflyway 进阶教程:KCP 协议复活被墙IP 决定试一试.在vultr上临时搭建了测试环境,可能 ...

  5. Scrapy实战篇(九)之爬取链家网天津租房数据

    以后有可能会在天津租房子,所以想将链家网上面天津的租房数据抓下来,以供分析使用. 思路: 1.以初始链接https://tj.lianjia.com/zufang/rt200600000001/?sh ...

  6. 基于STM8的IIC协议---STM8-第五章

    1. 综述 I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备. 它是由数据线SDA和时钟SCL构成的串行总线,可 ...

  7. 2018-2019-2 20165312《网络攻防技术》Exp5 MSF基础应用

    2018-2019-2 20165312<网络攻防技术>Exp5 MSF基础应用 目录 一.知识点总结 二.攻击实例 主动攻击的实践 ms08_067 payload/generic/sh ...

  8. Struts S2-048 RCE漏洞分析

    应该是S2-048目前最详细的一篇了.. 漏洞影响 Struts 2.3.x系列中的Showcase应用 使用了struts1 插件,并在使用ActionMessages时将客户端可控的参数拼接传递给 ...

  9. 喜怨交加C++

    作为被高中理综折磨几年立誓大学不学理工科类的文字爱好者,会学计算机是个意外.出于对理工科的不感兴趣,暑假期间也没有预习过编程知识.在对编程进行学习之前,我将它视为一门科目.一个专业.一项技能,唯独不是 ...

  10. Flex 布局的教程

    前言:以前也经常用flex布局,但是最近看到别人使用的时候,发觉以前自己还是不够理解这个,重新看了一遍http://www.ruanyifeng.com/blog/2015/07/flex-gramm ...