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再展示给用户.(若用户不需要编辑 ...
随机推荐
- AX7: Get started developing
This blog will show how you can start making a customization in AX 7 by showing you the steps needed ...
- @ResponseBody
@Controller public class PersonController { /** * 查询个人信息 * * @param id * @return */ @RequestMapping( ...
- 在大于32GB或64GB容量的SD卡上使用NOOB安装树莓派 - Using NOOB on SD cards larger than 32GB or 64GB for Raspberry Pi
在树莓派上玩了一小段时间了,因为装的软件包越来越多,所以越来越感觉16G的SD卡没办法长期使用下去.于是采购了几张64G的SD卡,打算周末装上系统.可是按照一般的流程,在Windows下用SD For ...
- cocoapods安装及常用命令
如果不是因为我重装了电脑,我大概也不会写这篇博客,网上关于cocoapods的安装可谓是不可胜数. 但是对于新版的系统来说,的确存在很多的坑点,这点不是我一个人遇到的问题 如果是新装的系统,默认是安装 ...
- 用CMake屏蔽Release运行时的控制台窗口
在默认情况下,CMake构建的VS工程运行时会弹出控制台窗口,可以通过手动方式进行屏蔽,也可以通过CMake命令进行屏蔽. 手动方式:分为两步 第一步:右击VS项目,选择"属性"- ...
- 扩展jquery的选择器
I’m sure you all know that it’s possible to create plugins and extend various aspects of the jQuery ...
- JS中this的指向问题&使用call或apply模拟new
this的指向由调用时决定而不是定义时决定,定义的方式: //直接定义在函数里 var a="window中的a"; var name="window"; fu ...
- Elasticsearch升级1.5版本暴露jdk的bug
把测试环境的Elasticsearch升级到1.5.1版本,启动的时候报错: [root@node2 elasticsearch-1.5.1]# bin/service/elasticsearch s ...
- .NET core mvc on Docker
安装Docker 参考:http://www.cnblogs.com/windchen/p/6224233.html 下载.NET CORE MVC镜像 sudo docker pull regist ...
- 关于js中的for(var in)遍历属性报错问题
之前遇到过这个问题,但是没找到问题的所在,将for(var i in array){} 改成了for(var i ;i<array.length;i++)循环,但是今天又遇到了,mark一下错 ...