使用 OfficeIntegration.Word 实现lightswitch导出WORD的功能(续)
2011-11-02 09:16
836 查看
上一篇文档中,先对模板进行了设置,然后利用OfficeIntegration包对模板进行了调用,并输出相应的数据。本文在此基础上进一步对WORD进行了表格合并功能的操作,但还有一些功能进行尝试中。
原本考虑用VBA,在模板文档里执行合并的操作。但考虑到安全性问题,放弃了这种做法。直接用dynamic 来操作客户端WORD。
目前还需要解决的问题是输出的日期格式,一种方法是在数据源里就格式化成自己想要的格式(字符类型),另一种只能在模板里再想想办法了。
效果如下图
partial void GenerateDocument_Execute() { // Write your code here. string path= Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); Assembly ass = Assembly.GetExecutingAssembly(); Stream s = ass.GetManifestResourceStream(this.GetType(), "MonthPlan.docx"); byte[] bt = new byte[s.Length]; s.Read(bt, 0, bt.Length); s.Close(); s.Dispose(); var fileName = this.WorkPlanHeads.SelectedItem.PlanYearMonth + "工作计划"; FileStream fs = new FileStream(path + "\\"+fileName+".docx", FileMode.Create); fs.Write(bt, 0, bt.Length); fs.Close(); fs.Dispose(); List<OfficeIntegration.ColumnMapping> planHeadColumn = new List<ColumnMapping>() { new ColumnMapping("PlanYear","PlanYear"), new ColumnMapping("PlanMonth","PlanMonth"), new ColumnMapping("FillDate","FillDate") }; dynamic doc = OfficeIntegration.Word.GenerateDocument(path + "\\"+ fileName+".docx", this.WorkPlanHeads.SelectedItem, planHeadColumn); List<string> detailsHeader = new List<string>() { "" ,"TypeName","PlanContent","WorkEmp","WorkDept","PlanEndDate","Remark" }; OfficeIntegration.Word.ExportEntityCollection(doc, "PlanDetail", 2, false, this.WorkPlanHeads.SelectedItem.WorkPlanDetails, detailsHeader); // OfficeIntegration.Word.SaveAsPDF(doc, path + "\\" + fileName + ".pdf", true); string preStr="",curStr=""; int indexStart = 2, indexEnd = 2; //VBA索引从1开始+标题列 var table = doc.Tables(1); //模板中第一个表 for (int i = 2; i < table.Rows.Count+1; i++) { curStr = doc.Tables(1).Cell(i, 2).Range.Text;//取出表格中的数据,也可利用数据源来做 if (curStr == preStr) { indexEnd = i; table.Cell(i - 1, 2).Range.Text = "";//合并单元格内容删除 if (i == table.Rows.Count) { if (indexEnd > indexStart) table.Cell(indexStart, 2).Merge(table.Cell(indexEnd, 2)); } } else { if (indexEnd > indexStart) table.Cell(indexStart,2).Merge(table.Cell(indexEnd,2)); indexStart = i; } preStr = curStr; } doc.Save();//直接保存文档 }
原本考虑用VBA,在模板文档里执行合并的操作。但考虑到安全性问题,放弃了这种做法。直接用dynamic 来操作客户端WORD。
目前还需要解决的问题是输出的日期格式,一种方法是在数据源里就格式化成自己想要的格式(字符类型),另一种只能在模板里再想想办法了。
效果如下图
相关文章推荐
- 使用 OfficeIntegration.Word 实现lightswitch导出WORD的功能
- 使用 OfficeIntegration.Word 实现lightswitch导出WORD的功能
- 使用 OfficeIntegration.Word 实现lightswitch导出WORD的功能(续)
- 使用IText实现office Word文档导出
- 利用JavaScript 实现Word简单导出功能
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 使用struts2实现数据库数据导出成word文档(项目当中实际用的)
- 真导出Excel功能实现(使用Gembox.Spreadsheet v2.9 组件)
- JAVA 数据导出Word文档模板的功能实现
- 水晶报表导出为pdf, word , excel 格式(已经测试过,实现了该功能)
- 使用Magento导入导出功能实现批量上传带图片产品
- 使用NPOI实现word和excel的导入导出
- 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
- 报表导出到word或者excel的功能实现
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
- Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
- 使用hive、java api两种方式实现wordcount功能、及个人感悟
- 在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能
- 忆龙2009:如何使用iMC实现帐号的导出功能