`
kodo521
  • 浏览: 9731 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

将生成的word文档,作为mail的附件发送。报错!

    博客分类:
  • c#
阅读更多
[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.致谢:感谢同事,“感谢”微软。
分享到:
评论
1 楼 ti_tian 2011-08-18  
很有帮助  

相关推荐

    Winform自动生成Word文档.rar

    在.NET开发环境中,WinForm应用经常需要与Office组件交互,比如自动生成Word文档。这个"Winform自动生成Word文档.rar"的压缩包提供了一个解决方案,主要用于WinForm应用程序中创建和导出Word文档。以下是关于这个...

    thinkphp生成word文档并导出

    本篇文章将详细解析如何使用ThinkPHP框架生成Word文档并进行导出。 首先,让我们了解`WordController.class.php`和`Wordmaker.class.php`这两个文件的作用。`WordController.class.php`是ThinkPHP的控制器文件,它...

    java 根据word模板生成word 文档

    Java作为一种广泛使用的编程语言,提供了多种方法来根据Word模板生成Word文档,而Jacob库就是其中一种非常实用且功能强大的解决方案。 #### Jacob库简介 Jacob(Java and COM Bridge)是一个开源的Java类库,它...

    将Excel中的数据按照Word模板生成Word文档

    本程序编写环境.NET 4.0、 VS2010,语言为C#,通过引用Aspose.Words.dll,不依赖Office安装,将一定格式的Excel文档转换为Word文件,例如:Excel表中表头为 单位名称 联系人 联系电话 会自动检测出字段[字段0:单位...

    通过数据库生成Word文档

    "通过数据库生成Word文档"这个主题涉及到将存储在MySQL数据库中的数据转换为结构化的Word文档,便于阅读、编辑和分享。这里我们将深入探讨如何实现这一过程,并重点关注MySQL数据库的表结构和注释的提取,以及如何...

    sql表结构自动生成word文档

    "sql表结构自动生成word文档"这个主题,旨在帮助数据库管理员和开发者更有效地将SQL Server数据库中的表结构转换为易于阅读和分享的Word文档。以下是关于这个主题的详细解释: 1. **SQL Server数据库表结构**:表...

    java--Poi 生成word文档

    在这个“java--Poi 生成word文档”的示例中,我们将深入探讨如何利用POI库来生成Word文档。Apache POI提供了一组API,允许Java开发者在程序中操作Word的DOCX格式,这是一种基于XML的现代版本。 首先,让我们理解...

    基于FME的一键批量生成word文档,用户只需要填好Excel表,工具便可自动生成标准化文档

    本工具基于Excel表格信息实现标准化word文档的一键生成,支持在段落中插入文字、插入图片和在表格中插入文字。 对于不懂编程的人,只要弄清Excel表格的填写,便可以修改成适合自己工作场景的办公小助手,比如制作...

    用C#生成word文档

    标题:“用C#生成word文档” 描述:这段代码示例展示了如何使用C#与Microsoft Office Interop Word库来创建和操作Word文档。虽然描述部分较为简略,但从代码片段可以推测出,这是一个实用的工具,能够帮助用户在不...

    使用poi根据模版生成word文档并转换成PDF文件

    本文将深入探讨如何利用Apache POI框架根据模板生成Word文档,并进一步将其转换为PDF文件。 首先,Apache POI提供了一个名为HWPF(Horrible Word Processor Format)的组件,用于处理Word文档。通过这个组件,我们...

    GenerateWord_Sqilte数据库文件生成Word文档_生成word_sqlite_

    标题 "GenerateWord_Sqilte数据库文件生成Word文档_生成word_sqlite_" 指示了一个功能,即从SQLite数据库文件中提取数据并将其转换成Word文档格式。这个过程涉及了数据库操作、数据处理和文档生成等多个技术领域。...

    java生成word文档完美解决方案.

    本文将深入探讨如何使用Java实现Word文档的完美生成,包括主要的技术框架、步骤以及可能遇到的问题。 首先,Java中常用的库有Apache POI和docx4j,它们都是用于处理Microsoft Office格式的开源库。Apache POI是更...

    数据库文档生成器,根据数据库表DDL生成markdown和word文档.zip

    本资源提供了一个工具,能够根据数据库表的DDL(Data Definition Language)自动生成Markdown和Word格式的文档,极大地提高了工作效率和文档的准确性。接下来,我们将详细讨论这个工具的功能、使用方法以及相关知识...

    docx4j生成word文档

    最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用docx4j生成word文档。里面包括完整代码和所需jar包。

    生成word文档,支持图片

    在IT行业中,生成Word文档并支持插入图片是一项常见的需求,特别是在自动化报告生成、数据可视化或文档制作等场景。本文将详细讲解如何实现这一功能,并探讨相关的技术知识点。 首先,我们来了解一下“生成word文档...

    利用VC自动生成WORD文档的代码

    本文将深入探讨如何利用VC++自动生成Word文档的代码实现。 首先,我们需要包含必要的头文件,如`#import`指令用于导入COM库,这里是`msword.olb`,它是Word对象模型的定义: ```cpp #import "C:\Program Files ...

    生成WORD freemarker导出WORD

    在IT行业中,生成Word文档是一项常见的任务,尤其在企业级应用和自动化报告生成等领域。FreeMarker是一个强大的模板引擎,常用于动态生成HTML、XML等文本,但也可以扩展到生成Word文档。本项目“生成WORD freemarker...

    根据word的xml模板生成word文件

    本文将详细介绍如何根据 Word 的 XML 模板生成 Word 文件,包括服务位置、参数设置、日期类型字段处理等方面的知识点。 一、服务位置 com_service.service.word:wordCreateSer 服务是一个根据 Word 模板生成 Word ...

    按WORD模板r把EXCEL表生成单个WORD文档

    按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表生成单个WORD文档按WORD模板r把EXCEL表...

Global site tag (gtag.js) - Google Analytics