博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net 将word文档进行编辑并导出一个新的word
阅读量:4685 次
发布时间:2019-06-09

本文共 4955 字,大约阅读时间需要 16 分钟。

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

代码:

    ///         /// 读取出word文档中的内容后对word文档进行修改并保存在本地        ///        /// 实体类(在数据库中读取出来的数据)        /// 替换后的字符         private void ReadWord(Jtmodle jtmodel, String pathfile)        {            Microsoft.Office.Interop.Word.Document oWordDoc = null;            Microsoft.Office.Interop.Word.ApplicationClass oWordApp = null;            object missing = System.Reflection.Missing.Value;            try            {                object fileName =  System.Web.HttpContext.Current.Server.MapPath(pathfile).ToString();                object readOnly = false;                object isVisible = true;                      oWordApp = new Microsoft.Office.Interop.Word.ApplicationClass();                oWordDoc = oWordApp.Documents.Open(ref fileName, ref missing, ref readOnly,                                     ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,                                     ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing);                #region 字符替换                oWordApp = Replce("{htmc}", jtmodel.htmc.ToString(), oWordApp);                oWordApp = Replce("{htbh}", jtmodel.htbh.ToString(), oWordApp);                oWordApp = Replce("{qydd}", jtmodel.qydd.ToString(), oWordApp);                oWordApp = Replce("{qyrq}", jtmodel.qyrq.ToString(), oWordApp);                oWordApp = Replce("{sxrq}", jtmodel.sxrq.ToString(), oWordApp);                oWordApp = Replce("{fkqx}", jtmodel.fkqx.ToString(), oWordApp);                oWordApp = Replce("{jfqx}", jtmodel.jfqx.ToString(), oWordApp);#endregion                #region 保存文件到客户端                string filePath = @"d:\\WordDown\\";                if (!Directory.Exists(filePath))                {                    Directory.CreateDirectory(filePath);                }                if (!System.IO.File.Exists(@"d:\\WordDown\\" + jtmodel.name.Trim() + ".doc"))                {                    oWordDoc.SaveAs(@"d:\\WordDown\\" + jtmodel.name.Trim() + ".doc");                    ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", @"");                }                else                {                    ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", @"");                }                oWordApp.NormalTemplate.Saved = true;                oWordDoc.Close(ref missing, ref missing, ref missing);                oWordApp.Application.Quit(ref missing, ref missing, ref missing);                                #endregion            }            catch             {                oWordDoc.Close(ref missing, ref missing, ref missing);                oWordApp.Application.Quit(ref missing, ref missing, ref missing);            }        }        ///         /// 替换word中的字符串        ///         /// 被替换的符        /// 替换后的字符        ///         private Microsoft.Office.Interop.Word.ApplicationClass Replce(string oldstr, string newstr, Microsoft.Office.Interop.Word.ApplicationClass oWordApp)        {            object missing = System.Reflection.Missing.Value;            oWordApp.Selection.Find.ClearFormatting();            oWordApp.Selection.Find.Replacement.ClearFormatting();            oWordApp.Selection.Find.Text = oldstr;            oWordApp.Selection.Find.Replacement.Text = newstr;            object objReplace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;            oWordApp.Selection.Find.Execute(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,                ref missing, ref missing, ref missing, ref objReplace, ref missing, ref missing, ref missing, ref missing);            return oWordApp;        }

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

异常:

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 解决方法:
  
   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,测试通过

转载于:https://www.cnblogs.com/mrma/p/4349699.html

你可能感兴趣的文章
crontab调用python脚本新思路
查看>>
df和du显示的磁盘空间使用情况不一致的原因及处理(文件删除后磁盘空间不释放)...
查看>>
进程与线程的关系与区别
查看>>
第一次使用maven记录
查看>>
SharePoint服务器端对象模型 之 使用CAML进展数据查询
查看>>
Building Tablet PC Applications ROB JARRETT
查看>>
Adobe® Reader®.插件开发
查看>>
存储过程 利用游标 解决复制业务
查看>>
【POJ 3461】Oulipo
查看>>
实验四 主存空间的分配和回收模拟
查看>>
C++陷阱系列:让面试官倒掉的题
查看>>
HUE通过oozie工作流执行shell脚本
查看>>
精密模拟电路设计注意事项笔记
查看>>
javascript必知之prototype
查看>>
.net异步调用WebService的三种方式--zt
查看>>
1.jquery笔记
查看>>
TypeScript入门( 二)
查看>>
20165310 NetSec2019 Week6 Exp4 恶意代码分析
查看>>
Hadoop综合大作业+补爬虫大作业
查看>>
background-position设置
查看>>