asp.net  Word 操作[转]

 前言:这两天研究了一下 office编程,主要是要实现对Word文件的操作。C#、VB的Win Form代码都写了。完全OK。等到用在asp.net上时出现了问题,出现无法创建activeX 对象和文件无法访问的错误。后来终于找到了解决办法,虽然不知道什么原理,不过代码总算能执行了。  解决办法如下:

(转)操作WORD配置说明

引入:Word的对象库文件“MSWORD.OLB”(word 2000为MSWORD9.OLB)(这是针对老版本的情况,在用vs.net2005的时候,直接在引用对话框中,在com组件里找到对word的库文件的引用就可以了,文件名好像是一样的.)

1.运行Dcomcnfg.exe
2.组件服务――计算机――我的电脑――DCOM配置――找到microsoft word 文档
3.点击属性
4.选择“安全性”
5.选定“使用自定义访问权限”和“使用自定义启动权限”
6.分别编辑权限,添加Everyone(ASPNET,VS Developers,Debugger User
)(注:其实准确的应该是"ISUR_机器名"这个用户才对)
7.选择“身份标识”,在选定“交互式用户” 即可
8.在Web.config里加 <identity impersonate="true"/> (这句插在<system.web>段里就可以了)

  我做了上面的事情还是不能运行,后来在IIS里做了下面的设置: 在IIS下右键点本地计算机/应用程序池,选择属性,点击标识,将预定义帐户改成本地系统。就可以运行了。

PS:Dim oWord as new Word.Application和 creatobject("Word.Application")没什么太大区别都可以运行。

环境:Win2003、VS2003、C#、VB

          另转asp.net的C#代码:

 
ASP.NET操作Word文档一直是一个大家比较关心的话题,其实在ASP.NET里操作Word文档一点也不难,大家只需按本文提示,就能轻轻松松操作Word文档!
一、准备工作
   
首先请确认服务端已经安装了Office Word(以下将以Office XP为例),操作系统为win2000XP,并且已配置好.NET的运行环境及安装VS.NET C#开发环境后,我们就可以打开VS.NET,并新建一个Visual C#项目>ASP.NET Web应用程序,位置为“http://localhost/word”。
二、引用Word对象库文件
   
要操作Word,我们就需要Word的对象库文件“MSWORD.OLB(word 2000MSWORD9.OLB),通常安装了Office Word后,你就可以在office安装目录的Office10文件夹下面找到这个文件,当我们将这个文件引入到项目后,我们就可以在源码中使用各种操作函数来操作Word。具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为DLL组件,这样我们只要在源码中创建该组件对象即可达到操作Word的目的!
三、Webform1.aspx.cs代码(vs.net2003默认新建页文件名都为webform1,在vs.net2005里已经换成了default1.aspx.cs了)
   
完成添加引用后,MSWORD.OLB已经转化为相关DLL文件并放置于项目的BIN目录下了,这样我们只需在源码中创建该对象,并使用word库文件内置的操作函数即可轻松实现操作WordWebform1.aspx.cs源码如下:
using  System;
using
 System.Collections;
using
 System.ComponentModel;
using
 System.Data;
using
 System.Drawing;
using
 System.Web;
using
 System.Web.SessionState;
using
 System.Web.UI;
using
 System.Web.UI.WebControls;
using
 System.Web.UI.HtmlControls; 
///这些引用都可以不要了.在vs.net 2005里的web.config已经添加了上述引用.
namespace
 word
{
/// <summary>
/// Webform1 的摘要说明。
/// </summary>

public class Webform1 : System.Web.UI.Page
{
protected
 System.Web.UI.WebControls.TextBox SaveAs;
protected
 System.Web.UI.WebControls.Button Button;
protected
 System.Web.UI.WebControls.Label Label2;
protected
 System.Web.UI.WebControls.Label Label1;
protected
 System.Web.UI.WebControls.Label result;
protected
 System.Web.UI.WebControls.TextBox wordText;
Web form Designer generated code

public void Button_Click(object sender, System.EventArgs e)
{
Object Nothing
=
System.Reflection.Missing.value;
//取得Word文件保存路径

object filename=@SaveAs.Text;
//创建一个名为WordApp的组件对象

Word.Application WordApp=new Word.ApplicationClass();
//创建一个名为WordDoc的文档对象

Word.Document WordDoc=WordApp.Documents.Add(ref Nothing,ref Nothing,ref Nothing,ref Nothing);
//增加一表格

Word.Table table=WordDoc.Tables.Add(WordApp.Selection.Range,1,1,ref Nothing,ref Nothing);
//在表格第一单元格中添加自定义的文字内容

table.Cell(1,1).Range.Text=wordText.Text;
//在文档空白地方添加文字内容

WordDoc.Paragraphs.Last.Range.Text="Wellcome To Aspxcn.Com";
//将WordDoc文档对象的内容保存为DOC文档

WordDoc.SaveAs(ref filename,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing,ref Nothing);
//关闭WordDoc文档对象

WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
//关闭WordApp组件对象

WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
//返回结果

result.Text="文档路径:<a href="/"+SaveAs.Text+"'>"+SaveAs.Text+"</a>(点击链接查看)<br>生成结果:成功!";
}


private void Page_Load(object sender, System.EventArgs e)
{
}

}

}

四、Webform1.aspx代码

   
完成CS源码后,我们就可以设计Webform页面了,完整的代码如下:
<%@ Page language="c#" Codebehind="Webform1.aspx.cs" AutoEventWireup="false" Inherits="word.Webform1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>基于Webforms的操作Word</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="javascript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body ms_positioning="GridLayout">
<form id="form1" method="post" runat="server">
<FONT face="宋体">
<asp:TextBox id="wordText" style="Z-INDEX: 101; LEFT: 144px; POSITION: absolute; TOP: 129px" runat="server" Height="190px" Width="360px" TextMode="MultiLine"></asp:TextBox>
<asp:TextBox id="SaveAs" style="Z-INDEX: 102; LEFT: 143px; POSITION: absolute; TOP: 80px" runat="server" Width="360px">C:myword.doc</asp:TextBox>
<asp:Button id="Button" style="Z-INDEX: 103; LEFT: 237px; POSITION: absolute; TOP: 340px" runat="server" Width="98px" on onClick="Button_Click" Text="生成Word文档"></asp:Button>
<INPUT style="Z-INDEX: 104; LEFT: 361px; WIDTH: 49px; POSITION: absolute; TOP: 340px; HEIGHT: 24px" type="reset" value="重填" size="20"></FONT>
<FONT face="宋体">基于Webforms的操作Word(小宝.NET)</FONT>
<asp:Label id="Label1" style="Z-INDEX: 105; LEFT: 143px; POSITION: absolute; TOP: 54px" runat="server" Width="187px" Height="18px">Word文件保存路径:</asp:Label>
<asp:Label id="Label2" style="Z-INDEX: 106; LEFT: 142px; POSITION: absolute; TOP: 107px" runat="server" Width="159px" Height="12px">Word文件内容:</asp:Label>
<asp:Label id="result" style="Z-INDEX: 107; LEFT: 148px; POSITION: absolute; TOP: 387px" runat="server" Width="352px" Height="18px" ForeColor="Red"></asp:Label>
</form>
</body>
</HTML>

五、web.config设置
   web.config
文件还需添加一句 <identity impersonate="true"/>以启用模拟身份,因为默认ASPNET这个用户是没有权限访问Word.ApplicationClass(),当启用模拟身份后所有页面将会使用匿名Internet用户帐户(IUSR_machinename)这个用户名的权限执行,这样我们就能成功访问Word.ApplicationClass()并在ASP.NET中操作Word
VB.net:
Public  Class WordClass
    
Public 
Function wirteWord(ByVal str As StringByVal title As StringAs Boolean
        
Dim WordApp As Word.Application
        
Dim WordDoc As
 Word.Document
        
Try

            
Dim obj As Object = System.Reflection.Missing.Value
            
'取得Word文件保存路径

            Dim filename As Object = "C:InetpubwwwrootSLOA_NETdocumentDocManage" + title + ".doc"
            
'创建一个名为WordApp的组件对象
            WordApp = New Word.ApplicationClass
            
'vs.net 2005里已经没有applicationclass了,直接用application即可

            '创建一个名为WordDoc的文档对象
            WordDoc = WordApp.Documents.Add()
            
'在文档空白地方添加文字内容

            WordDoc.Paragraphs.Last.Range.Text = str
            
'保存
            WordDoc.SaveAs(filename)
            
'关闭WordDoc文档对象

            WordDoc.Close()
            
'关闭WordApp组件对象

            WordApp.Quit()
            
Return True

        
Catch ex As Exception
            
If Not WordDoc Is Nothing Then

                WordDoc.Close()
            
End If
            
If Not WordApp Is Nothing Then
                WordApp.Quit()
            
End If
            
Return False
        
End Try
    
End Function

    
Public Function readWord(ByVal title As StringAs String
        
Dim WordApp As Word.Application
        
Dim WordDoc As
 Word.Document
        
Try

            
Dim obj As Object = System.Reflection.Missing.Value
            
Dim filename As Object = "C:InetpubwwwrootSLOA_NETdocumentDocManage" + title + ".doc"

            WordApp 
= New Word.ApplicationClass
            WordDoc 
=
 WordApp.Documents.Open(filename)
            
Dim comment As String =
 WordDoc.Range.Text
            WordDoc.Close()
            WordApp.Quit()
            
Return
 comment
        
Catch ex As
 Exception
            
If Not WordDoc Is Nothing Then

                WordDoc.Close()
            
End If
            
If Not WordApp Is Nothing Then
                WordApp.Quit()
            
End If
            
Return Nothing
        
End Try
    
End Function

    
Public Function printWord(ByVal title As StringAs Boolean
        
Dim WordApp As Word.Application
        
Dim WordDoc As
 Word.Document
        
Try

            
Dim obj As Object = System.Reflection.Missing.Value
            
Dim filename As Object = "C:InetpubwwwrootSLOA_NETdocumentDocManage" + title + ".doc"

            WordApp 
= New Word.ApplicationClass
            WordDoc 
=
 WordApp.Documents.Open(filename)
            WordApp.Visible 
= True

            
'WordApp.ActivePrinter = WordDoc.Range.Text
            'WordDoc.Close()
            'WordApp.Quit()
            Return True
        
Catch ex As Exception
            
'If Not WordDoc Is Nothing Then

            'WordDoc.Close()
            'End If
            'If Not WordApp Is Nothing Then
            'WordApp.Quit()
            'End If
            'Return Nothing
        End Try
        
Return False
    
End Function


    
Public Function printSetWord(ByVal title As String)
        
Dim WordApp As
 Word.Application
        
Dim WordDoc As
 Word.Document
        
Try

            
Dim obj As Object = System.Reflection.Missing.Value
            
Dim filename As Object = "C:InetpubwwwrootSLOA_NETdocumentDocManage" + title + ".doc"

            WordApp 
= New Word.ApplicationClass
            WordDoc 
=
 WordApp.Documents.Open(filename)
            WordApp.Visible 
= True

            WordApp.PrintPreview 
= True
            
'WordDoc.Close()
            'WordApp.Quit()
        Catch ex As Exception
            
'If Not WordDoc Is Nothing Then

            'WordDoc.Close()
            'End If
            'If Not WordApp Is Nothing Then
            'WordApp.Quit()
            'End If
            'Return Nothing
        End Try
    
End Function

    
Public Function viewWord(ByVal title As String)
        
Dim WordApp As
 Word.Application
        
Dim WordDoc As
 Word.Document
        
Try

            
Dim obj As Object = System.Reflection.Missing.Value
            
Dim filename As Object = "C:InetpubwwwrootSLOA_NETdocumentDocManage" + title + ".doc"

            WordApp 
= New Word.ApplicationClass
            WordDoc 
=
 WordApp.Documents.Open(filename)
            WordApp.Visible 
= True

            WordApp.PrintPreview 
= True
        
Catch ex As Exception
            
If Not WordDoc Is Nothing Then

                WordDoc.Close()
            
End If
            
If Not WordApp Is Nothing Then
                WordApp.Quit()
            
End If
            
Return Nothing
        
End Try
    
End Function

End Class

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、付费专栏及课程。

余额充值