最近做项目,需要多word文档进行编辑并导出一个新的word,在最初的word编辑中留下特定的字符串用来替换,然后在本地生成一个新的word文档,并且不修改服务器中的word文档,这样才能保证服务器中的文件在下次使用的时候能正常使用。

代码:

  1.     /// <summary>
  2. /// 读取出word文档中的内容后对word文档进行修改并保存在本地
  3. /// </summary>
        /// <param name="jtmodel">实体类(在数据库中读取出来的数据)</param>
  4. /// <param name="pathfile">替换后的字符</param>
    private void ReadWord(Jtmodle jtmodel, String pathfile)
  5. {
  6. Microsoft.Office.Interop.Word.Document oWordDoc = null;
  7. Microsoft.Office.Interop.Word.ApplicationClass oWordApp = null;
  8. object missing = System.Reflection.Missing.Value;
  9. try
  10. {
  11. object fileName = System.Web.HttpContext.Current.Server.MapPath(pathfile).ToString();
  12. object readOnly = false;
  13. object isVisible = true;
  14. oWordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
  15. oWordDoc = oWordApp.Documents.Open(ref fileName, ref missing, ref readOnly,
  16. ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
  17. ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing);
  18. #region 字符替换
  19. oWordApp = Replce("{htmc}", jtmodel.htmc.ToString(), oWordApp);
  20. oWordApp = Replce("{htbh}", jtmodel.htbh.ToString(), oWordApp);
  21. oWordApp = Replce("{qydd}", jtmodel.qydd.ToString(), oWordApp);
  22. oWordApp = Replce("{qyrq}", jtmodel.qyrq.ToString(), oWordApp);
  23. oWordApp = Replce("{sxrq}", jtmodel.sxrq.ToString(), oWordApp);
  24. oWordApp = Replce("{fkqx}", jtmodel.fkqx.ToString(), oWordApp);
  25. oWordApp = Replce("{jfqx}", jtmodel.jfqx.ToString(), oWordApp);#endregion
  26.  
  27. #region 保存文件到客户端
  28. string filePath = @"d:\\WordDown\\";
  29. if (!Directory.Exists(filePath))
  30. {
  31. Directory.CreateDirectory(filePath);
  32. }
  33. if (!System.IO.File.Exists(@"d:\\WordDown\\" + jtmodel.name.Trim() + ".doc"))
  34. {
  35. oWordDoc.SaveAs(@"d:\\WordDown\\" + jtmodel.name.Trim() + ".doc");
  36. ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", @"<script>alert('合同文档生成成功,已保存在本地磁盘D:\\WordDown\\" + jtmodel.name.Trim() + ".doc!');</script>");
  37. }
  38. else
  39. {
  40. ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", @"<script>alert('该合同文档已经存在本地磁盘D:\\WordDown\\" + jtmodel.name.Trim() + ".doc,生成失败!');</script>");
  41. }
  42. oWordApp.NormalTemplate.Saved = true;
  43. oWordDoc.Close(ref missing, ref missing, ref missing);
  44. oWordApp.Application.Quit(ref missing, ref missing, ref missing);
  45. #endregion
  46. }
  47. catch
  48. {
  49. oWordDoc.Close(ref missing, ref missing, ref missing);
  50. oWordApp.Application.Quit(ref missing, ref missing, ref missing);
  51. }
  52. }
  53. /// <summary>
  54. /// 替换word中的字符串
  55. /// </summary>
  56. /// <param name="oldstr">被替换的符</param>
  57. /// <param name="newstr">替换后的字符</param>
  58. /// <param name="oWordApp"></param>
  59. private Microsoft.Office.Interop.Word.ApplicationClass Replce(string oldstr, string newstr, Microsoft.Office.Interop.Word.ApplicationClass oWordApp)
  60. {
  61. object missing = System.Reflection.Missing.Value;
  62. oWordApp.Selection.Find.ClearFormatting();
  63. oWordApp.Selection.Find.Replacement.ClearFormatting();
  64. oWordApp.Selection.Find.Text = oldstr;
  65. oWordApp.Selection.Find.Replacement.Text = newstr;
  66. object objReplace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;
  67. oWordApp.Selection.Find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
  68. ref missing, ref missing, ref missing, ref objReplace, ref missing, ref missing, ref missing, ref missing);
  69. return oWordApp;
  70. }

原本不打算用替换字符串的方式编辑word,在网上看到还有可以在word中添加标签的然后对word文档进行编辑,但是苦于不知道怎么给word文档插入标签,只好适用替换字符串的方法来实现功能了

异常:

  1. 检索 COM 类工厂中 CLSID {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005
    解决方法:
  1. <system.web>
  1.   <identity impersonate="true" userName="Administrator" password="abc123"/>
  1.   </system.web>
  2.  
  3. IIS中 oWordApp.Documents.Open 为空的解决办法:

1.(适用于.NET)
 1).通过webconfig中增加模拟,加入管理员权限,
 <identity impersonate="true" userName="系统管理员" password="系统管理员密码"/>
 2).这样就能够启动Application进程,操作EXCEL了,能够新建EXCEL,导出EXCEL,但是还是不能打开服务器端的EXCEL文件

2.(以下适用于所有语言)
  在组件服务,DOCM设置 Microsoft Excel Application的属性,
  因为是在64位系统上面操作,组件服务中DOCOM中默认是没有的,因为Microsoft Excel Application是32的DCOM配置,所以通过如下方式解决(参考第三步)

3.(在64bit系统中的DCOM管理中添加32Bit的Excel、Word等的管理)
   1).开始--〉运行--〉cmd
   2)命令提示符下面,输入“mmc -32”回车,打开32的控制台
   3).文件菜单中,添加删除管理单元--〉“组件服务”(在最下面),确认后,关闭即可。
   4).开始-管理工具-组件服务,在"DCOM配置"中,可以找到“"Microsoft Excel 应用程序”了。找到“Microsoft Excel 应用程序”,在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框
 5).点击“标识”标签,选择“交互式用户” **:这个在32Bit的2003上或XP上不需要,但这里需要。
 6).点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限
   7).依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.

4.重新启动IIS,测试通过

asp.net 将word文档进行编辑并导出一个新的word的更多相关文章

  1. 在项目中利用TX Text Control进行WORD文档的编辑显示处理

    在很多文档管理的功能模块里面,我们往往需要对WORD稳定进行展示.编辑等处理,而如果使用微软word控件进行处理,需要安装WORD组件,而且接口使用也不见得简单易用,因此如果有第三方且不用安装Offi ...

  2. 把word文档中的所有图片导出

    把word文档中的所有图片导出 end

  3. 将word文档A表格中的内容拷贝到word文档B表格中

    Function IsFileExists(ByVal strFileName As String) As Boolean ) <> Empty Then IsFileExists = T ...

  4. asp.net对word文档进行修改 对于使用word文档做模板编辑比较适用

    最近做项目,需要多word文档进行编辑并导出一个新的word,在最初的word编辑中留下特定的字符串用来替换,然后在本地生成一个新的word文档,并且不修改服务器中的word文档,这样才能保证服务器中 ...

  5. 在线编辑word文档 可保存到服务器

    使用说明:该方法只在office xp 和 2003上 测试通过,2000及以下 版本没试. 注意:你要打开的服务器端的word文档要有写权限.iis要开起 web服务扩展中的webdav为允许 具体 ...

  6. pageoffice实现网页打开编辑保存word文档(基于SSM框架)

    pageoffice是一款网页集成word.excel...等office工具 并不免费,但可以试用练习 SSM框架搭建过程就省略了 注意:由于谷歌/火狐升级,不支持插件嵌入,建议使用POBrowse ...

  7. Asp.net操作Word文档,原来这么简单啊!

    引用Word对象库文件  具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为 ...

  8. Word文档合并的一种实现

    今天遇到一个问题,就是需要把多个Word文档的内容追加到一个目标Word文档的后面,如果我有目标文档a.doc以及其他很多个文档b.doc,c.doc…等等数量很多.这个问题,如果是在服务端的话,直接 ...

  9. 如何才能实现在点击链接时直接在网页中打开word文档,但不提示保存

    一般要直接打开需要客户端 1.客户端有word支持 2.客户端浏览器的版本与设置 可寻找一下相关的控件或中间件,我的意见是看能否变通一下,把word转成HTML或PDF再展示给用户.(若用户不需要编辑 ...

随机推荐

  1. OCP认证之Oracle的SQL语言基础(一)

    一.Oracle命令类别 数据操纵语言(DML):select;insert;delete;update;merge 数据定义语言(DDL):create;alter;drop;truncate 事物 ...

  2. git&sourcetree安装及在IntelliIJ下拉取项目基础使用

    be careful: 1)git版本与Sourcetree版本最好一致 ,不能git为2.5,sourcetree为1.8 2)先安装git再安装Sourcetree 3)拥有git和sourcet ...

  3. Django快速学习搭建blog项目

    新手学习Django,本文学习的文档是<Django Web开发指南>.好了我也是新手,没什么好说了,go!- 首先先确定环境,我是在linux(Ubuntu14.04 gnome)下. ...

  4. Effective objective-c 2.0阅读笔记

    这本书非常的好,看完后,感触挺深,总结纪录一下,针对ios开发的备忘: 注:分类和原著有些不同,自己总结学习用的,仅供参考.   系统篇: 了解oc起源:继承c,由Smalltalk演化而来.动态语言 ...

  5. 基于纹理的图片检索及demo(未启动)

    基于纹理的图片检索及demo(未启动)

  6. maven项目管理构建

    准备工作 在eclipse配置maven之前需要我们做好准备工作,如下: 1. 安装jdk 2. 已安装好 maven,将maven配置成功 3. 下载Eclipse,解压缩安装完成,建立工作空间.  ...

  7. tomcat manager配置

    在tomcat-user.xml里面配置 <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi=" ...

  8. PAMI 2010 Context-aware saliency detection

    This is a highly-cited paper. The context aware saliency proposed based on four principles, which ca ...

  9. SQL Server 数据库的维护(三)__事务(transaction)和锁

    --维护数据库-- --事务(transaction)和锁-- --事务(transaction)-- --概述: 事务是指封装了一组T-SQL语句的单个逻辑单元.单元中的所有语句作为一个整体,在满足 ...

  10. 如何写一个简单的http服务器

    最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...