[size=medium]
现象简述:
将生成的word文档,作为mail的附件发送给客服部门。连续点击发送按钮报错。一般点击到第2,3次时报错。(winform)
在发现这个错误时我有点不解因为
a.c#生成word开发过,
b.c#发送mail开发过。
c.二者结合是再正常不过的业务需求也开发过(控制台程序)
纠结…………
好了找错吧!
主要程序代码
fileName = Func_cfg.getBakPath() + fileName;
string dotName = Func_cfg.getTemplatePath() + "工单.dot";
WordUtility wordUtility = new WordUtility(dotName);
wordUtility.createWordDocment();
wordUtility.replaceItems(ht);
wordUtility.saveAs(@fileName);//这句报错 文件只读
wordUtility.close();
//发送报表
SendReport(fileName);
1.怀疑程序写法问题,导致word进程没有被关闭。
wordUtility.close();
wordUtility类的close方法如下
public void close()
{
object o = false;
oDoc.Close(ref o, ref oMissing, ref oMissing);
oDoc = null;
oWord.Quit(ref o, ref oMissing, ref oMissing);
oWord = null;
}
查看任务管理器,在错误发生前,没有未关闭的进程。
又查了一下参数的意义,觉得问题不在这里。
2.调查了一下saveas()方法参数意义 也没有发现问题
3.在同事的帮助下修改了写法
fileName = Func_cfg.getTempPath() + fileName;
string bakFilePath = Func_cfg.getBakPath() + fileName;
string dotName = Func_cfg.getTemplatePath() + "工单.dot";
WordUtility wordUtility = new WordUtility(dotName);
wordUtility.createWordDocment();
wordUtility.replaceItems(ht);
wordUtility.saveAs(@fileName);
wordUtility.close();
SendReport(fileName);
MyUtility.copyFile(fileName, bakFilePath, true);
MyUtility.deleFile(fileName);//这句报错 说文件被打开
貌似跟1一样
将
MyUtility.deleFile(fileName);
前移如下
wordUtility.close();
MyUtility.deleFile(fileName);//断点放在这句
SendReport(fileName);
执行到断点处时一切正常,由此判断word生成没有问题,问题出在发送mail的方法
SendReport里,再根据经验推断,很可能附件语句占用了word文档进程。
sMTPUtility.addAttachment(fullFileName);
4.找到问题的所在开始想解决方法。
MailMessage message = new MailMessage ();
message .Dispose();
不起作用
5.到网上查。也有人遇到此问题。但未找到解决方法,不过还是找到了点解决思路。
网上说stream没有关闭。可是保存附件时并没有打开stream?难道是dot添加附件是自己打开的?
下面能做是尽快找到关闭流的方法。
还好找到了,遍历后关闭。
this.message.Attachments[i].ContentStream.Close();
6.测试后,一切ok。
7.思考:上面c中提到程序为何没有发生?也曾经对一个word文档多次发送?
原来c是控制台程序运行完一次就释放了。
8.致谢:感谢同事,“感谢”微软。
分享到:
相关推荐
本程序编写环境.NET 4.0、 VS2010,语言为C#,通过引用Aspose.Words.dll,不依赖Office安装,将一定格式的Excel文档转换为Word文件,例如:Excel表中表头为 单位名称 联系人 联系电话 会自动检测出字段[字段0:单位...
"通过数据库生成Word文档"这个主题涉及到将存储在MySQL数据库中的数据转换为结构化的Word文档,便于阅读、编辑和分享。这里我们将深入探讨如何实现这一过程,并重点关注MySQL数据库的表结构和注释的提取,以及如何...
在这个“java--Poi 生成word文档”的示例中,我们将深入探讨如何利用POI库来生成Word文档。Apache POI提供了一组API,允许Java开发者在程序中操作Word的DOCX格式,这是一种基于XML的现代版本。 首先,让我们理解...
JavaGenWord是一个基于Java语言的工具,用于根据预先定义的模板生成Word文档。这个过程主要依赖于FreeMarker库,这是一个强大的、开源的模板引擎,广泛应用于生成动态内容,如HTML、XML、PDF或如本例中的Word文档。...
在现代Web应用中,有时我们需要将网页上的内容导出为Word文档,以便用户可以离线查看或打印。本文将详细讲解如何使用JavaScript实现这一功能,主要依赖于两个JavaScript库:html2docx和FileSaver.js。这两个库可以...
标题:“用C#生成word文档” 描述:这段代码示例展示了如何使用C#与Microsoft Office Interop Word库来创建和操作Word文档。虽然描述部分较为简略,但从代码片段可以推测出,这是一个实用的工具,能够帮助用户在不...
标题 "GenerateWord_Sqilte数据库文件生成Word文档_生成word_sqlite_" 指示了一个功能,即从SQLite数据库文件中提取数据并将其转换成Word文档格式。这个过程涉及了数据库操作、数据处理和文档生成等多个技术领域。...
本文将深入探讨如何使用Java实现Word文档的完美生成,包括主要的技术框架、步骤以及可能遇到的问题。 首先,Java中常用的库有Apache POI和docx4j,它们都是用于处理Microsoft Office格式的开源库。Apache POI是更...
4. 模板变量:在模板示例中,使用了多个变量,例如 ${acceptNo}、${disposeDeadline} 等,这些变量将在生成 Word 文档时被替换为实际的数据。 5. Java 字符串操作:在生成 Word 文档时,需要对字符串进行操作,例如...
最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用docx4j生成word文档。里面包括完整代码和所需jar包。
最后,该源码将生成的Word文档打包成一个zip文件,方便用户进行批量下载和分享。通过使用Python的zipfile库,我们可以将多个Word文档压缩成一个zip文件,并提供下载链接或保存到本地。总之,这个Python自动化办公...
在IT行业中,生成Word文档并支持插入图片是一项常见的需求,特别是在自动化报告生成、数据可视化或文档制作等场景。本文将详细讲解如何实现这一功能,并探讨相关的技术知识点。 首先,我们来了解一下“生成word文档...
在IT行业中,生成Word文档是一项常见的任务,尤其是在自动化报告、数据导出或系统集成等场景。C#作为.NET框架下的主要编程语言,提供了多种方法来实现这一目标。本系列将详细探讨如何使用C#来创建和操作Word文档,...
在IT领域,特别是软件开发行业中,使用Java生成Word文档是一种常见的需求,特别是在自动化报告生成、文档模板填充等场景中。本文将深入探讨如何利用Java语言和相关库来实现这一功能,重点介绍Apache POI和一个相对...
通常,你会看到如何创建模板文件,如何设置数据源,以及如何使用POI-TL API将数据注入到模板中生成最终的Word文档。示例代码可能会包括以下关键部分: ```java // 导入必要的库 import ...
在IT行业中,生成Word文档是一项常见的任务,尤其在企业级应用和自动化报告生成等领域。FreeMarker是一个强大的模板引擎,常用于动态生成HTML、XML等文本,但也可以扩展到生成Word文档。本项目“生成WORD freemarker...
本文主要介绍了使用 Java 生成 Word 文档的方法,通过使用 iText 库来生成 PDF 文件,并将其转换为 Word 文档。下面是相关的知识点: 1. iText 库简介 iText 是一个 Java 类库,能够快速产生 PDF 文件。它提供了...
按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表...
本篇将深入探讨如何使用Java通过模板生成Word文档,以及相关的关键知识点。 一、模板引擎简介 模板引擎允许开发者定义好文档的结构和样式,然后在运行时填充数据,生成最终的Word文档。这种方式可以将数据逻辑与...
在C#编程环境中,我们可以利用Microsoft.Office.Interop.Word库来实现根据Word模板生成新的Word文档。这个功能在很多业务场景中非常实用,例如批量生成报告、合同等。在本项目中,"c#根据word模板生成word文档"的...