/// <summary>
/// 生产word 文档
/// </summary>
public class GenerateWord
{
/// <summary>
///模板地址
/// </summary>
public string TempPath { get; set; } /// <summary>
/// 保存地址
/// </summary>
public string SavePath { get; set; } /// <summary>
/// 页眉数据
/// </summary>
public Hashtable HsHeads { get; set; } /// <summary>
/// 页脚数据
/// </summary>
public Hashtable HsFoots { get; set; } /// <summary>
/// 书签数据
/// </summary>
public Hashtable HsBookMark { get; set; } /// <summary>
/// 文档内容
/// </summary>
public DataSet DsBody { get; set; } /// <summary>
/// 文档名称
/// </summary>
public string FileName { get; set; }
public string EmptyLogo { get; set; }
private Thread thread; public void SaveTemplate()
{
DocX document = DocX.Load(TempPath); #region 生成页面页脚 Formatting f = new Formatting();
f.FontColor = Color.FromArgb(, , );
f.Size = ;
f.Bold = true;
f.FontFamily = new FontFamily("Helvetica"); Formatting ffoot = new Formatting();
ffoot.FontColor = Color.Black;
ffoot.Size = ;
ffoot.FontFamily = new FontFamily("Helvetica"); document.AddHeaders(); //添加所有页眉
Headers heads = document.Headers; //获取该文档所有的页眉
Header hfirst = heads.first;
Header head1 = heads.even;
Header head2 = heads.odd; hfirst.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction = Direction.RightToLeft;
head1.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction=Direction.RightToLeft;
head2.InsertParagraph(HsBookMark["MerchantName"].ToString(), false, f).Direction=Direction.RightToLeft; document.AddFooters();//添加所有的页脚
Footers footers = document.Footers; //获取该文档所有的页脚
Footer ffirst = footers.first;
Footer feven = footers.even;
Footer fodd = footers.odd; document.DifferentFirstPage = true;
document.DifferentOddAndEvenPages = true; Paragraph pf = ffirst.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot);
Paragraph pfeven = feven.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot);
Paragraph pfodd = fodd.InsertParagraph(HsFoots["comp_name"].ToString(), false, ffoot); //添加logo
Novacode.Image img;
MemoryStream stmMemory = new MemoryStream(); Paragraph p = head1.InsertParagraph("", false);
if (HsHeads["LogoUrl"] == null || HsHeads["LogoUrl"].ToString() == "")
{ System.Drawing.Image myimg = System.Drawing.Image.FromFile(EmptyLogo);
myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
stmMemory.Seek(, SeekOrigin.Begin);
img = document.AddImage(stmMemory);
}
else
{
System.Net.WebRequest webreq = System.Net.WebRequest.Create(HsHeads["LogoUrl"].ToString());//"http://www.bc.ccoo.cn/logo/logo.gif"
System.Net.WebResponse webres = webreq.GetResponse();
Stream stream = webres.GetResponseStream();
System.Drawing.Image myimg = System.Drawing.Image.FromStream(stream);
myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
stmMemory.Seek(, SeekOrigin.Begin);
img = document.AddImage(stmMemory);
stream.Close();
} string footmark = string.Format("地址:{0} 电话:{1} QQ:{2}", HsFoots["address"].ToString(), HsFoots["tel"].ToString(), HsFoots["qq"].ToString());
//将图像插入到段落后面
Picture pic = img.CreatePicture(); //选择图像,并修改图像尺寸
pic.Rotation = ;
pic.Width = ;
pic.Height = ; //设置图片形状,并水平翻转图片
pic.SetPictureShape(BasicShapes.cube);
pic.FlipHorizontal = false; pf.InsertPicture(pic, );
pf.Direction = Direction.RightToLeft;
pf.InsertParagraphAfterSelf(footmark, false, ffoot); pfeven.InsertPicture(pic);
pfeven.Direction = Direction.RightToLeft;
pfeven.InsertParagraphAfterSelf(footmark, false, ffoot); pfodd.InsertPicture(pic);
pfodd.Direction = Direction.RightToLeft;
pfodd.InsertParagraphAfterSelf(footmark, false, ffoot); #endregion #region 替换文本 document.ReplaceText("$ReportTitle$", HsBookMark["MerchantName"].ToString());
document.ReplaceText("$r_year$", DateTime.Now .Year.ToString());
document.ReplaceText("$r_month$", DateTime.Now.Month.ToString());
document.ReplaceText("$Report_head$", HsBookMark["OperatingCommissioner"].ToString()); document.ReplaceText("$IP$", HsBookMark["IPNUM"].ToString());
document.ReplaceText("$PV$", HsBookMark["PVNUM"].ToString());
document.ReplaceText("$FK$", HsBookMark["FKNUM"].ToString()); document.ReplaceText("$UserFeedBack$", HsBookMark["UserFeedback"].ToString());
document.ReplaceText("$ThinkingMonth$", HsBookMark["ThinkingMonth"].ToString());
document.ReplaceText("$ThinkingNextMonth$", HsBookMark["ThinkingNextMonth"].ToString()); #endregion #region 替换表格数据
Table t = document.Tables[];
if (t != null)
{
//生成Pv流量
if (DsBody.Tables.Count > && DsBody.Tables[].Rows.Count > )
{
List<Cell> listcell = t.Rows[].Cells;
listcell[].Paragraphs[].Append(DsBody.Tables[].Columns[].ColumnName.ToString()).Alignment = Alignment.center;
listcell[].Paragraphs[].Append(DsBody.Tables[].Columns[].ColumnName.ToString()).Alignment = Alignment.center;
listcell[].Paragraphs[].Append(DsBody.Tables[].Columns[].ColumnName.ToString()).Alignment = Alignment.center; for (int i = ; i < t.Rows.Count; i++)
{
listcell = t.Rows[i].Cells;
for (int j = ; j < ; j++)
{
listcell[j + ].Paragraphs[].Append(DsBody.Tables[].Rows[i - ][j].ToString()).Alignment = Alignment.center;
}
}
}
} #endregion #region 动态生成表格
//生成运维日志
if (DsBody.Tables.Count > && DsBody.Tables[].Rows.Count > )
{
for (int i = ; i < DsBody.Tables[].Rows.Count; i++)
{
CreateAndInsertTableAfter(ref document, DsBody.Tables[].Rows[i], Convert.ToString(i + ), HsBookMark["OperatingCommissioner"].ToString());
}
}
#endregion
//声明内存流
MemoryStream ms = new MemoryStream();
//文件保存到内存流
document.SaveAs(ms);
document.Dispose();
#region 更新数据库 //更新数据库
//发送到远处服务器进行保存
#endregion
} private static Table CreateAndInsertTableAfter(ref DocX document,DataRow dr,string indexnum,string head)
{
#region 定义字体颜色
Formatting f1 = new Formatting();
f1.FontColor = Color.White;
f1.Size = ;
f1.Bold = true;
f1.FontFamily = new FontFamily("Helvetica"); Formatting f2 = new Formatting();
f2.FontColor = Color.FromArgb(, , );
f2.Size = ;
f2.Bold = true;
f2.FontFamily = new FontFamily("Helvetica"); Formatting f3 = new Formatting();
f3.FontColor = Color.FromArgb(, , );
f3.Size = ;
f3.Bold = true;
f3.FontFamily = new FontFamily("Helvetica"); Formatting f4 = new Formatting();
f4.FontColor = Color.FromArgb(, , );
f4.Size = ;
f4.Bold = true;
f4.FontFamily = new FontFamily("Helvetica"); Formatting f5 = new Formatting();
f5.FontColor = Color.FromArgb(, , );
f5.Size = ;
f5.Bold = true;
f5.FontFamily = new FontFamily("Helvetica"); Formatting f6 = new Formatting();
f5.FontColor = Color.FromArgb(, , );
f5.Size = ;
f5.FontFamily = new FontFamily("Helvetica");
#endregion Table table = document.InsertTable(, ); table.AutoFit = AutoFit.ColumnWidth; #region Table title table.Rows[].Height = ; List<Cell> listtable = table.Rows[].Cells;
listtable[].Paragraphs[].InsertText(indexnum, false, f1);
listtable[].MarginTop = ;
listtable[].FillColor = Color.FromArgb(, , );
listtable[].Width = ;
listtable[].Paragraphs[].Alignment = Alignment.center; listtable[].FillColor = Color.FromArgb(, , );
listtable[].Paragraphs[].InsertText(dr["systime"].ToString() + "/" + (dr["OpMan"].ToString() == "" ? head : dr["OpMan"].ToString()), false, f6);
listtable[].Paragraphs[].Alignment = Alignment.right;
listtable[].Width = ; List<Cell> listtable1 = table.Rows[].Cells;
listtable1[].Paragraphs[].InsertText("行动", false, f2);
listtable1[].Width = ;
listtable1[].Paragraphs[].Alignment = Alignment.center; listtable1[].Paragraphs[].InsertText(dr["dowhat"].ToString(), false, f6);
listtable1[].Paragraphs[].Alignment = Alignment.left; List<Cell> listtable2 = table.Rows[].Cells;
listtable2[].Paragraphs[].InsertText("原因", false, f3);
listtable2[].Width = ;
listtable2[].Paragraphs[].Alignment = Alignment.center; listtable2[].Paragraphs[].InsertText(dr["reason"].ToString(), false, f6);
listtable2[].Paragraphs[].Alignment = Alignment.left; List<Cell> listtable3 = table.Rows[].Cells;
listtable3[].Paragraphs[].InsertText("作用", false, f4);
listtable3[].Width = ;
listtable3[].Paragraphs[].Alignment = Alignment.center; listtable3[].Paragraphs[].InsertText(dr["effect"].ToString(), false, f6);
listtable3[].Paragraphs[].Alignment = Alignment.left; List<Cell> listtable4 = table.Rows[].Cells;
listtable4[].Paragraphs[].InsertText("结果", false, f5);
listtable4[].Width = ; listtable4[].Paragraphs[].Alignment = Alignment.center;
Novacode.Image img;
MemoryStream stmMemory = new MemoryStream();
if (dr["PicUrl"] != null && dr["PicUrl"].ToString() != "")
{
System.Net.WebRequest webreq = System.Net.WebRequest.Create(dr["PicUrl"].ToString());
System.Net.WebResponse webres = webreq.GetResponse();
Stream stream = webres.GetResponseStream();
System.Drawing.Image myimg = System.Drawing.Image.FromStream(stream);
myimg.Save(stmMemory, myimg.RawFormat); // 保存你的图片到memorystream
stmMemory.Seek(, SeekOrigin.Begin);
img = document.AddImage(stmMemory);
stream.Close();
listtable4[].Paragraphs[].InsertPicture(img.CreatePicture(, ));
}
else
{
var hrefresult = Regex.Match(dr["result"].ToString(), @"(?<=[\s+]?href[\s+]?=[\s+]?('|"")?)[^(""|')>]+?(?=""|')");
if (hrefresult.ToString() != "")
{
Hyperlink link = document.AddHyperlink("点击查看结果", new Uri(hrefresult.ToString()));
listtable4[].Paragraphs[].AppendHyperlink(link);
}
else
{
hrefresult = Regex.Match(dr["result"].ToString(), @"http://www.*");
if (hrefresult.ToString() != "")
{
Hyperlink link = document.AddHyperlink("点击查看结果", new Uri(hrefresult.ToString()));
listtable4[].Paragraphs[].AppendHyperlink(link);
}
else
{
listtable4[].Paragraphs[].Append(dr["result"].ToString());
}
}
} listtable4[].Paragraphs[].Alignment = Alignment.left; #endregion table.Alignment = Alignment.center;
table.InsertParagraphAfterSelf("",false).AppendLine().AppendLine();
return table;
}
public GenerateWord(string TempPath, string FileName, string EmptyLogo, string SavePath, Hashtable HsHeads, Hashtable HsFoots, Hashtable HsBookMark, DataSet DsBody)
{
this.TempPath = TempPath;
this.SavePath = SavePath;
this.EmptyLogo = EmptyLogo;
this.HsHeads = HsHeads;
this.HsFoots = HsFoots;
this.HsBookMark = HsBookMark;
this.FileName = FileName;
this.DsBody = DsBody;
thread = new Thread(new ThreadStart(SaveTemplate));
}
public void Start()
{
if (thread != null)
{
thread.Start();
}
}
}

Docx 生成word文档二的更多相关文章

  1. Docx 生成word文档

    1.生成word代码 /// <summary> /// 生成word文档 /// </summary> /// <param name="tempPath&q ...

  2. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  3. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...

  4. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  5. C#开源组件DocX处理Word文档基本操作(二)

    上一篇 C#开源组件DocX处理Word文档基本操作(一) 介绍了DocX的段落.表格及图片的处理,本篇介绍页眉页脚的处理. 示例代码所用DocX版本为:1.3.0.0.关于版本的区别,请参见上篇,而 ...

  6. 将HTML导出生成word文档

    前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...

  7. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  8. Android根据word模板文档将表单数据生成word文档的方案整理

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行: 参考资料:<Fre ...

  9. Aspose.Words简单生成word文档

    Aspose.Words简单生成word文档 Aspose.Words.Document doc = new Aspose.Words.Document(); Aspose.Words.Documen ...

随机推荐

  1. golang 高效字符串拼接

    https://blog.csdn.net/u012210379/article/details/45110705 虽然方便,但是使用+=操作符并不是在一个循环中往字符串末尾追加字符串最有效的方式,一 ...

  2. minutia cylinder code MCC lSSR 匹配算法

    图一 是LSS匹配算法, 图二是LSSR 匹配算法,数据采用MCC SDK自带的十个人的数据.LSS EER6.0%左右,LSSR EER 0%

  3. Ignite-Spark

    2017.12.02 Ignite-Spark 讲ppt的时候还是很紧张 PPT地址 https://files.cnblogs.com/files/swobble/Spark.pptx

  4. CSS3 学习笔记(动画 多媒体查询)

    动画 1.@keyframes规则用于创建动画.在@keyframes中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果 2.使用animation进行动画捆绑.两个值:动画名称.时长 ...

  5. 一个事件一定时间内只允许点击执行一次 与 vue阻止滚动穿透

    可能我的方法很笨,简单实现来的就是给两个状态,一个状态点击时就发生改变,另外一个给一个定时器延迟改变 篮圈部分,给了两种状态,一个isDisable,一个comeTime 点击事件以后comeTime ...

  6. 苹果CMS

    本篇将主要讲解使用过程中普遍遇到的“问题”,这些问题并非是BUG,通常是需要我们自己去注意的一些点.(会结合用户反馈持续补充)http://www.maccms.com/doc/v10/faq.htm ...

  7. 反编译之jadx工具

    1.jadx是个开源 https://github.com/skylot/jadx 2.下载后cd到文件的根目录 然后输入命令 ./gradlew dist 之后会出现build文件进入/build/ ...

  8. SPSS分析技术:多元方差分析

    SPSS分析技术:多元方差分析 下面要介绍多元方差分析的内容,多元方差分析是研究多个自变量与多个因变量相互关系的一种统计理论方法,又称多变量分析.多元方差分析实质上是单因变量方差分析(包括单因素和多因 ...

  9. Linux下c开发 之 线程通信

    Linux下c开发 之 线程通信 1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linux本身 ...

  10. codeforces 1131D-Gourmet choice

    传送门:QAQQAQ 题意:有两个数组,一个数组有n个数,另一个数组有m个数.s[i][j]表示第一个数组第i个数和第二个数组第j个数的大小关系,要求构造出一种方案,使条件成立. 先考虑没有等于号的情 ...