asp.net操作word

http://www.cnblogs.com/jinglelin/archive/2005/09/02/228486.html 

涉及到asp.net操作word的问题 今年陆续又碰到操作excel、word等office文档 使用的都是Interop相关dll,打开office相关进程进行操作 为免忘记,将相关tip整理如下: 1. 引用文件,几个dll打包了 2. 操作word代码示例: using ImportExportToOffice; using Microsoft.ApplicationBlocks.Data; protected void btnJianJie_Click(object sender, EventArgs e) { string sYear = DropDownList2.SelectedValue; string sMonth = DropDownList1.SelectedValue; string sDate1 = String.Format("{0}-{1}-{2}", sYear, sMonth, "1"); string sDate2 = String.Format("{0}-{1}-{2}", sYear, sMonth, System.DateTime.DaysInMonth(int.Parse(sYear), int.Parse(sMonth)).ToString()); word = new ImportExportToWord(); string sTmpUrl = "../Report/" + Guid.NewGuid().ToString() + ".Doc"; string sTmpFile = Server.MapPath(sTmpUrl); string sModelDoc = Server.MapPath("../Report/国际漫游简报模板.doc"); System.IO.File.Copy(sModelDoc, sTmpFile, true); try { word.Open(sTmpFile); object sBookMark = ""; //GSM 来访前十 分公司 sBookMark = "GSM_1"; if (word.Document.Bookmarks.Exists(sBookMark.ToString())) { word.Document.Bookmarks.get_Item(ref sBookMark).Select(); string sSql = "SELECT TOP 10 t1.ToCarrier, COUNT(t1.ToCarrier) AS Num, t2.ShortName AS Name" + " FROM BiteGSM t1 INNER JOIN" + " BranchInfo t2 ON t1.ToCarrier = t2.ID" + " INNER JOIN DispatchInfo t3 ON t1.DispatchID = t3.ID" + " Where t3.SendTime >='" + sDate1 + "'" + " And t3.SendTime <='" + sDate2 + "'" + " And t1.SimType=1" + " GROUP BY t1.ToCarrier, t2.ShortName" + " ORDER BY COUNT(t1.ToCarrier) DESC"; SqlDataReader dr = SqlHelper.ExecuteReader(Connection.ConnectionString, CommandType.Text, sSql); while (dr.Read()) { word.Application.Selection.TypeText(dr["Name"].ToString()); word.GoToRightCell(); word.Application.Selection.TypeText(dr["Num"].ToString()); word.GoToLeftCell(); word.GoToDownCell(); } dr.Close(); } //CDMA 来访前十 分公司 sBookMark = "CDMA_1"; if (word.Document.Bookmarks.Exists(sBookMark.ToString())) { word.Document.Bookmarks.get_Item(ref sBookMark).Select(); string sSql = "SELECT TOP 10 t1.ToCarrier, COUNT(t1.ToCarrier) AS Num, t2.ShortName AS Name" + " FROM BiteGSM t1 INNER JOIN" + " BranchInfo t2 ON t1.ToCarrier = t2.ID" + " INNER JOIN DispatchInfo t3 ON t1.DispatchID = t3.ID" + " Where t3.SendTime >='" + sDate1 + "'" + " And t3.SendTime <='" + sDate2 + "'" + " And t1.SimType=2" + " GROUP BY t1.ToCarrier, t2.ShortName" + " ORDER BY COUNT(t1.ToCarrier) DESC"; SqlDataReader dr = SqlHelper.ExecuteReader(Connection.ConnectionString, CommandType.Text, sSql); while (dr.Read()) { word.Application.Selection.TypeText(dr["Name"].ToString()); word.GoToRightCell(); word.Application.Selection.TypeText(dr["Num"].ToString()); word.GoToLeftCell(); word.GoToDownCell(); } dr.Close(); } //GSM 去访前十 分公司 sBookMark = "GSM1"; if (word.Document.Bookmarks.Exists(sBookMark.ToString())) { word.Document.Bookmarks.get_Item(ref sBookMark).Select(); string sSql = "SELECT TOP 10 t1.ToCarrier, COUNT(t1.ToCarrier) AS Num, t2.CarrierName AS Name" + " FROM Unicom2TSTT t1 INNER JOIN" + " CarrierInfo t2 ON t1.ToCarrier = t2.ID" + " INNER JOIN DispatchInfo t3 ON t1.DispatchID = t3.ID" + " Where t3.SendTime >='" + sDate1 + "'" + " And t3.SendTime <='" + sDate2 + "'" + " And t1.SimType=1" + " GROUP BY t1.ToCarrier, t2.CarrierName" + " ORDER BY COUNT(t1.ToCarrier) DESC"; SqlDataReader dr = SqlHelper.ExecuteReader(Connection.ConnectionString, CommandType.Text, sSql); while (dr.Read()) { word.Application.Selection.TypeText(dr["Name"].ToString()); word.GoToRightCell(); word.Application.Selection.TypeText(dr["Num"].ToString()); word.GoToLeftCell(); word.GoToDownCell(); } dr.Close(); } //CDMA 去访前十 分公司 sBookMark = "CDMA1"; if (word.Document.Bookmarks.Exists(sBookMark.ToString())) { word.Document.Bookmarks.get_Item(ref sBookMark).Select(); string sSql = "SELECT TOP 10 t1.ToCarrier, COUNT(t1.ToCarrier) AS Num, t2.CarrierName AS Name" + " FROM Unicom2TSTT t1 INNER JOIN" + " CarrierInfo t2 ON t1.ToCarrier = t2.ID" + " INNER JOIN DispatchInfo t3 ON t1.DispatchID = t3.ID" + " Where t3.SendTime >='" + sDate1 + "'" + " And t3.SendTime <='" + sDate2 + "'" + " And t1.SimType=2" + " GROUP BY t1.ToCarrier, t2.CarrierName" + " ORDER BY COUNT(t1.ToCarrier) DESC"; SqlDataReader dr = SqlHelper.ExecuteReader(Connection.ConnectionString, CommandType.Text, sSql); while (dr.Read()) { word.Application.Selection.TypeText(dr["Name"].ToString()); word.GoToRightCell(); word.Application.Selection.TypeText(dr["Num"].ToString()); word.GoToLeftCell(); word.GoToDownCell(); } dr.Close(); } word.SaveAs(sTmpFile); word.Quit(); SysUtil.Log(UserContext.GetUserContext(), FunctionContext.GetFunctionContext(),OperType.其它, LogLevel.信息, "生成国际漫游简报成功"); Response.Write(""); } catch (Exception err) { try { word.Quit(); } catch { } SysUtil.Log(UserContext.GetUserContext(), FunctionContext.GetFunctionContext(),OperType.其它, LogLevel.信息, "生成国际漫游简报失败,错误信息:" + err.Message); } } 3.部署相关: 确保服务器正确安装office 2k3 运行后若office进程起不来,如下检查: 1.运行Dcomcnfg.exe 2.组件服务――计算机――我的电脑――DCOM配置――找到microsoft word 文档 3.点击属性 4.选择“安全性” 5.选定“使用自定义访问权限”和“使用自定义启动权限” 6.分别编辑权限,添加Everyone(ASPNET,VS Developers,Debugger User) 7.选择“身份标识”,在选定“交互式用户” 即可 8.在Web.config里加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET生成WORD文档服务器部署注意事项 配置详情请下载附件图解 1、Asp.net 2.0在配置Microsoft Excel、Microsoft Word应用程序权限时 error: 80070005 和8000401a 的解决总 2007-11-01 11:30 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档 之后 单击属性打开此应用程序的属性对话框。 单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后 自定义->编辑->添加ASP.NET账户和IUSER_计算机名 * 这些帐户仅在计算机上安装有 IIS 的情况下才存在。 在标识选项卡选择下列用户,输入用户名密码 13. 确保允许每个用户访问,然后单击确定。 14. 单击确定关闭 DCOMCNFG。 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a 。 运行dcomcnfg打开组件服务, 依次展开"组件服务"->"计算机"->"我的电脑"->"DCOM配置" 找到"Microsoft Excel应用程序"或"Microsoft Word应用程序", 右键打开属性对话框,点击"标识"选项卡, 点"下列用户",把管理员的用户密码正确填写进去... 点击"安全"选项卡, 依次把"启动和激活权限","访问权限","配置权限",都选择为自定义, 然后依次点击它们的编辑,把everyone添加进去,并加入所有的权限... OK,解决此问题! 2、请设置web.config中的帐号和密码,否则会提示检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 例如
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值