asp.net 将word文档进行编辑并导出一个新的word
最近做项目,需要多word文档进行编辑并导出一个新的word,在最初的word编辑中留下特定的字符串用来替换,然后在本地生成一个新的word文档,并且不修改服务器中的word文档,这样才能保证服务器中的文件在下次使用的时候能正常使用。
代码:
- /// <summary>
- /// 读取出word文档中的内容后对word文档进行修改并保存在本地
- /// </summary>
/// <param name="jtmodel">实体类(在数据库中读取出来的数据)</param>- /// <param name="pathfile">替换后的字符</param>
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", @"<script>alert('合同文档生成成功,已保存在本地磁盘D:\\WordDown\\" + jtmodel.name.Trim() + ".doc!');</script>");
- }
- else
- {
- ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", @"<script>alert('该合同文档已经存在本地磁盘D:\\WordDown\\" + jtmodel.name.Trim() + ".doc,生成失败!');</script>");
- }
- 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);
- }
- }
- /// <summary>
- /// 替换word中的字符串
- /// </summary>
- /// <param name="oldstr">被替换的符</param>
- /// <param name="newstr">替换后的字符</param>
- /// <param name="oWordApp"></param>
- 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
解决方法:
- <system.web>
- <identity impersonate="true" userName="Administrator" password="abc123"/>
- </system.web>
- 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的更多相关文章
- 在项目中利用TX Text Control进行WORD文档的编辑显示处理
在很多文档管理的功能模块里面,我们往往需要对WORD稳定进行展示.编辑等处理,而如果使用微软word控件进行处理,需要安装WORD组件,而且接口使用也不见得简单易用,因此如果有第三方且不用安装Offi ...
- 把word文档中的所有图片导出
把word文档中的所有图片导出 end
- 将word文档A表格中的内容拷贝到word文档B表格中
Function IsFileExists(ByVal strFileName As String) As Boolean ) <> Empty Then IsFileExists = T ...
- asp.net对word文档进行修改 对于使用word文档做模板编辑比较适用
最近做项目,需要多word文档进行编辑并导出一个新的word,在最初的word编辑中留下特定的字符串用来替换,然后在本地生成一个新的word文档,并且不修改服务器中的word文档,这样才能保证服务器中 ...
- 在线编辑word文档 可保存到服务器
使用说明:该方法只在office xp 和 2003上 测试通过,2000及以下 版本没试. 注意:你要打开的服务器端的word文档要有写权限.iis要开起 web服务扩展中的webdav为允许 具体 ...
- pageoffice实现网页打开编辑保存word文档(基于SSM框架)
pageoffice是一款网页集成word.excel...等office工具 并不免费,但可以试用练习 SSM框架搭建过程就省略了 注意:由于谷歌/火狐升级,不支持插件嵌入,建议使用POBrowse ...
- Asp.net操作Word文档,原来这么简单啊!
引用Word对象库文件 具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为 ...
- Word文档合并的一种实现
今天遇到一个问题,就是需要把多个Word文档的内容追加到一个目标Word文档的后面,如果我有目标文档a.doc以及其他很多个文档b.doc,c.doc…等等数量很多.这个问题,如果是在服务端的话,直接 ...
- 如何才能实现在点击链接时直接在网页中打开word文档,但不提示保存
一般要直接打开需要客户端 1.客户端有word支持 2.客户端浏览器的版本与设置 可寻找一下相关的控件或中间件,我的意见是看能否变通一下,把word转成HTML或PDF再展示给用户.(若用户不需要编辑 ...
随机推荐
- OCP认证之Oracle的SQL语言基础(一)
一.Oracle命令类别 数据操纵语言(DML):select;insert;delete;update;merge 数据定义语言(DDL):create;alter;drop;truncate 事物 ...
- git&sourcetree安装及在IntelliIJ下拉取项目基础使用
be careful: 1)git版本与Sourcetree版本最好一致 ,不能git为2.5,sourcetree为1.8 2)先安装git再安装Sourcetree 3)拥有git和sourcet ...
- Django快速学习搭建blog项目
新手学习Django,本文学习的文档是<Django Web开发指南>.好了我也是新手,没什么好说了,go!- 首先先确定环境,我是在linux(Ubuntu14.04 gnome)下. ...
- Effective objective-c 2.0阅读笔记
这本书非常的好,看完后,感触挺深,总结纪录一下,针对ios开发的备忘: 注:分类和原著有些不同,自己总结学习用的,仅供参考. 系统篇: 了解oc起源:继承c,由Smalltalk演化而来.动态语言 ...
- 基于纹理的图片检索及demo(未启动)
基于纹理的图片检索及demo(未启动)
- maven项目管理构建
准备工作 在eclipse配置maven之前需要我们做好准备工作,如下: 1. 安装jdk 2. 已安装好 maven,将maven配置成功 3. 下载Eclipse,解压缩安装完成,建立工作空间. ...
- tomcat manager配置
在tomcat-user.xml里面配置 <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi=" ...
- PAMI 2010 Context-aware saliency detection
This is a highly-cited paper. The context aware saliency proposed based on four principles, which ca ...
- SQL Server 数据库的维护(三)__事务(transaction)和锁
--维护数据库-- --事务(transaction)和锁-- --事务(transaction)-- --概述: 事务是指封装了一组T-SQL语句的单个逻辑单元.单元中的所有语句作为一个整体,在满足 ...
- 如何写一个简单的http服务器
最近几天用C++写了一个简单的HTTP服务器,作为学习网络编程和Linux环境编程的练手项目,这篇文章记录我在写一个HTTP服务器过程中遇到的问题和学习到的知识. 服务器的源代码放在Github. H ...