[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开发环境中,WinForm应用经常需要与Office组件交互,比如自动生成Word文档。这个"Winform自动生成Word文档.rar"的压缩包提供了一个解决方案,主要用于WinForm应用程序中创建和导出Word文档。以下是关于这个...
而“Wpf生成word文档”指的是利用WPF技术结合Microsoft Office Interop服务来创建和编辑Microsoft Word文档。这通常涉及到对Word对象模型的深入理解和使用,以便在程序中动态生成文本、表格等元素。 首先,要实现这...
本篇文章将详细解析如何使用ThinkPHP框架生成Word文档并进行导出。 首先,让我们了解`WordController.class.php`和`Wordmaker.class.php`这两个文件的作用。`WordController.class.php`是ThinkPHP的控制器文件,它...
在Java编程环境中,生成Word文档是一项常见的任务,尤其在企业级应用中,如报告生成、数据分析等场景。XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来...
最后,该源码将生成的Word文档打包成一个zip文件,方便用户进行批量下载和分享。通过使用Python的zipfile库,我们可以将多个Word文档压缩成一个zip文件,并提供下载链接或保存到本地。总之,这个Python自动化办公...
本文将详细介绍如何使用 Java POI 生成 Word 文档,并特别关注图片插入功能。 #### 二、基本概念 在深入探讨代码实现之前,我们首先需要了解几个基本概念: - **XWPFDocument**:代表一个 .docx 文件。 - **...
Java作为一种广泛使用的编程语言,提供了多种方法来根据Word模板生成Word文档,而Jacob库就是其中一种非常实用且功能强大的解决方案。 #### Jacob库简介 Jacob(Java and COM Bridge)是一个开源的Java类库,它...
本程序编写环境.NET 4.0、 VS2010,语言为C#,通过引用Aspose.Words.dll,不依赖Office安装,将一定格式的Excel文档转换为Word文件,例如:Excel表中表头为 单位名称 联系人 联系电话 会自动检测出字段[字段0:单位...
最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用docx4j生成word文档。里面包括完整代码和所需jar包。
7. 下载Word文档:生成Word文档后,服务器端可以将其以文件流的形式发送给前端,前端利用axios的blob响应类型来接收这个文件流,并触发文件的下载操作。 以上就是Vue动态生成Word文档的基本实现流程,从构建用户...
在生成Word文档时,我们需要使用FileOutputStream将文档写入到文件中。FileOutputStream是一个输出流,用于将数据写入到文件中。在示例代码中,我们使用FileOutputStream将XWPFDocument对象写入到文件中,从而生成了...
"通过数据库生成Word文档"这个主题涉及到将存储在MySQL数据库中的数据转换为结构化的Word文档,便于阅读、编辑和分享。这里我们将深入探讨如何实现这一过程,并重点关注MySQL数据库的表结构和注释的提取,以及如何...
### PowerDesigner将PDM导出生成WORD文档的方法详解 #### 一、PowerDesigner简介与应用场景 PowerDesigner是一款功能强大的数据库设计工具,它可以帮助用户轻松地进行数据建模、概念设计和物理设计等任务。...
"sql表结构自动生成word文档"这个主题,旨在帮助数据库管理员和开发者更有效地将SQL Server数据库中的表结构转换为易于阅读和分享的Word文档。以下是关于这个主题的详细解释: 1. **SQL Server数据库表结构**:表...
在这个“java--Poi 生成word文档”的示例中,我们将深入探讨如何利用POI库来生成Word文档。Apache POI提供了一组API,允许Java开发者在程序中操作Word的DOCX格式,这是一种基于XML的现代版本。 首先,让我们理解...
标题:“用C#生成word文档” 描述:这段代码示例展示了如何使用C#与Microsoft Office Interop Word库来创建和操作Word文档。虽然描述部分较为简略,但从代码片段可以推测出,这是一个实用的工具,能够帮助用户在不...
利用Word类生成word文档,简洁的代码,不一样的效果,可以批量生产word文档
本资源提供了一个工具,能够根据数据库表的DDL(Data Definition Language)自动生成Markdown和Word格式的文档,极大地提高了工作效率和文档的准确性。接下来,我们将详细讨论这个工具的功能、使用方法以及相关知识...
本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...
标题 "GenerateWord_Sqilte数据库文件生成Word文档_生成word_sqlite_" 指示了一个功能,即从SQLite数据库文件中提取数据并将其转换成Word文档格式。这个过程涉及了数据库操作、数据处理和文档生成等多个技术领域。...