ASP.NET操作Word文档

时间:2008/1/11 16:48:55      阅读:13046     附件: wordapplication.zip (经验值:5)     下载:58
ASP.NET操作Word文档一直是一个大家比较关心的话题,其实在ASP.NET里操作Word文档一点也不难,大家只需按本文提示,就能轻轻松松操作Word文档!
一、准备工作
   首先请确认服务端已经安装了Office Word(以下将以Office XP为例),操作系统为win2000或XP,并且已配置好.NET的运行环境及安装VS.NET C#开发环境后,我们就可以打开VS.NET,并新建一个Visual C#项目>ASP.NET Web应用程序,位置为“http://localhost/word”。
二、引用Word对象库文件
   要操作Word,我们就需要Word的对象库文件“MSWORD.OLB”(word 2000为MSWORD9.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库文件内置的操作函数即可轻松实现操作Word,Webform1.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
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!
评论
  • Re:ASP.NET操作Word文档  (2008/1/15 18:27:58) by 张三四 
    谢谢,正好有用
  • Re:ASP.NET操作Word文档  (2008/1/18 11:21:38) by jason 
    请问要怎么样做才可以发文章上来供大家讨论和学习。谢谢!
  • Re:ASP.NET操作Word文档  (2008/1/24 22:54:09) by skxcall 
    谢谢,正好有用
  • Re:ASP.NET操作Word文档  (2008/2/1 10:56:10) by sixstring 
    不错
  • Re:ASP.NET操作Word文档  (2008/3/12 11:06:17) by chen 
    不错啊 谢谢
  • Re:ASP.NET操作Word文档  (2008/3/14 11:04:13) by 闄堝叴 
    谢谢咯
  • Re:ASP.NET操作Word文档  (2008/3/14 11:08:38) by 闂勫牆鍙?Url= 
    回复姓名又变另一个乱码了!
  • Re:ASP.NET操作Word文档  (2008/4/25 10:14:07) by 黄杨 
    可以用来实现报表的操作
  • Re:ASP.NET操作Word文档  (2008/6/18 0:12:33) by 鏈辨櫤鍒?Url= 
    很喜欢你们的网站
  • Re:ASP.NET操作Word文档  (2008/6/18 0:13:23) by 鏈辨櫤鍒?Url= 
    你们是一个团队吗??
  • Re:ASP.NET操作Word文档  (2008/6/18 0:14:33) by 鏈辨櫤鍒?Url= 
    我公司想做一个图片验证码的接入系统,你们有关于这方面的技术支持吗?
  • Re:ASP.NET操作Word文档  (2008/8/21 19:31:40) by wwwwww 
    新手,把附件下来看看
  • Re:ASP.NET操作Word文档  (2008/8/29 23:06:28) by xeilin 
    很好呀 我怎么引用了没有组件加载啊
  • Re:ASP.NET操作Word文档  (2009/1/19 22:44:43) by 恒辉 
    调试不成功,很多错误,我是新手,能否发一个现成的给我看看heng_hui@126.com
  • Re:ASP.NET操作Word文档  (2009/5/14 12:06:06) by 何羽凡 
    自己照着写出了点问题,想看看源码~~
  • Re:ASP.NET操作Word文档  (2009/7/21 17:51:03) by 浪里乾坤 
    谢了,正要找这方面的资料呢
  • Re:ASP.NET操作Word文档  (2009/8/13 14:28:28) by eben_s 

    支持也下,正在寻找这方面的资料

标 题:
 
姓 名:
 
主 页:

验证码:

评论:
 

Because of the cache,you may see your comments several minutes later.