[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文档。以下是关于这个...
本篇文章将详细解析如何使用ThinkPHP框架生成Word文档并进行导出。 首先,让我们了解`WordController.class.php`和`Wordmaker.class.php`这两个文件的作用。`WordController.class.php`是ThinkPHP的控制器文件,它...
本篇文章将深入探讨如何使用FreeMarker结合Java技术生成Word文档。 首先,理解FreeMarker的基本原理。FreeMarker是一个基于模板的语言,它不依赖任何特定的编程语言,而是与数据模型相结合,将模板和数据合并成最终...
在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:单位...
### PowerDesigner将PDM导出生成WORD文档的方法详解 #### 一、PowerDesigner简介与应用场景 PowerDesigner是一款功能强大的数据库设计工具,它可以帮助用户轻松地进行数据建模、概念设计和物理设计等任务。...
"通过数据库生成Word文档"这个主题涉及到将存储在MySQL数据库中的数据转换为结构化的Word文档,便于阅读、编辑和分享。这里我们将深入探讨如何实现这一过程,并重点关注MySQL数据库的表结构和注释的提取,以及如何...
7. 下载Word文档:生成Word文档后,服务器端可以将其以文件流的形式发送给前端,前端利用axios的blob响应类型来接收这个文件流,并触发文件的下载操作。 以上就是Vue动态生成Word文档的基本实现流程,从构建用户...
"sql表结构自动生成word文档"这个主题,旨在帮助数据库管理员和开发者更有效地将SQL Server数据库中的表结构转换为易于阅读和分享的Word文档。以下是关于这个主题的详细解释: 1. **SQL Server数据库表结构**:表...
在这个“java--Poi 生成word文档”的示例中,我们将深入探讨如何利用POI库来生成Word文档。Apache POI提供了一组API,允许Java开发者在程序中操作Word的DOCX格式,这是一种基于XML的现代版本。 首先,让我们理解...
本工具基于Excel表格信息实现标准化word文档的一键生成,支持在段落中插入文字、插入图片和在表格中插入文字。 对于不懂编程的人,只要弄清Excel表格的填写,便可以修改成适合自己工作场景的办公小助手,比如制作...
在现代Web应用中,有时我们需要将网页上的内容导出为Word文档,以便用户可以离线查看或打印。本文将详细讲解如何使用JavaScript实现这一功能,主要依赖于两个JavaScript库:html2docx和FileSaver.js。这两个库可以...
标题:“用C#生成word文档” 描述:这段代码示例展示了如何使用C#与Microsoft Office Interop Word库来创建和操作Word文档。虽然描述部分较为简略,但从代码片段可以推测出,这是一个实用的工具,能够帮助用户在不...
利用Word类生成word文档,简洁的代码,不一样的效果,可以批量生产word文档
本资源提供了一个工具,能够根据数据库表的DDL(Data Definition Language)自动生成Markdown和Word格式的文档,极大地提高了工作效率和文档的准确性。接下来,我们将详细讨论这个工具的功能、使用方法以及相关知识...
本文将详细介绍如何使用VC++编程自动生成Word文档,包括创建Word实例、添加文本、格式化文本、保存文档等操作。同时,本文还将对类型库的概念进行讲解,并对Microsoft Office 2000 Word进行介绍。 一、创建Word实例...
本文将深入探讨如何使用Java实现Word文档的完美生成,包括主要的技术框架、步骤以及可能遇到的问题。 首先,Java中常用的库有Apache POI和docx4j,它们都是用于处理Microsoft Office格式的开源库。Apache POI是更...