asp.net 填充word 模版标签并下载使用笔记

1,新建word模版,方法是找需要用程序填充的word文档,在需要输入的地方用"书签"(插入-->书签-->输入id-->ok)标记后保存既可.
2,在word模版上修改安全添加everyone 可读,以防文件无法打开.
3,在工程里添加"引用"找到"Microsoft Word 10.0 Object Library"或"Microsoft Word 11.0 Object Library"点确定.
4,新建类叫WordOp.cs 意思是操作word的类.
内容如下:

/
using System;
using System.Web.Security;
using Microsoft.Office.Interop.Word;
using System.IO;
/// <summary>
/// Word 的摘要说明
/// </summary>
public class WordOp
{
    public WordOp()
{
   //
   // TODO: 在此处添加构造函数逻辑
   //
}
    private ApplicationClass WordApp ;
    private Document WordDoc;
    private static bool isOpened=false;//判断word模版是否被占用
    public void SaveAs(string strFileName,bool isReplace)
    {
        if (isReplace && File.Exists(strFileName))
        {
            File.Delete(strFileName);
        }
        object missing = Type.Missing;
        object fileName = strFileName;
        WordDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
         ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
    }
    //定义一个Word.Application 对象
    public void activeWordApp()
    {
        WordApp = new ApplicationClass();
    }

    public void Quit()
    {
        object missing = System.Reflection.Missing.Value;
        WordApp.Application.Quit(ref missing, ref missing, ref missing);
        isOpened = false;
    }
  
    //基于模版新建Word文件
    public void OpenTempelte(string strTemppath)
    {
        object Missing = Type.Missing;
        //object Missing = System.Reflection.Missing.Value;

        activeWordApp();
        WordApp.Visible = false;

        object oTemplate = (object)strTemppath;
        try
        {
            while (isOpened)
            {
                System.Threading.Thread.Sleep(500);
            }
            WordDoc = WordApp.Documents.Add(ref oTemplate, ref Missing, ref Missing, ref Missing);
            isOpened = true;
            WordDoc.Activate();
        }
        catch (Exception Ex)
        {
            Quit();
            isOpened = false;
            throw new Exception(Ex.Message);
        }


    }
    public void FillLable(string LabelId,string Content)
    {

        //打开Word模版
       // OpenTempelte(tempName);     //对LabelId的标签进行填充内容Content,即函件题目项
        object bkmC = LabelId;
        if (WordApp.ActiveDocument.Bookmarks.Exists(LabelId) == true)
        {
            WordApp.ActiveDocument.Bookmarks.get_Item(ref bkmC).Select();

        }
        WordApp.Selection.TypeText(Content);
        //SaveAs(saveAsFileName);
        //Quit();

    }
}

/

5,在需要使用的页面后台调用既可,举例如下:

            string path = Server.MapPath("download");
            string templatePath = path + "";
            WordOp wop = new WordOp();
            wop.OpenTempelte(templatePath);
            wop.FillLable("id", "1");
            wop.FillLable("usr_name", "测试");
            wop.SaveAs(path + ");
            wop.Quit();
            Response.redirect(@"/download/savetest.doc");//做个跳转用于下载.

说明:此方法需要在安装office 2003 时添加.net frame1.1 支持,在高级里面选择,否则会报找到不Micosoft.Office.Interop.Word 错误

 

注意事项:

aspnet使用ms&nbsp;word&nbsp;excel模板问题

 

异常详细信息: System.UnauthorizedAccessException: 对路径 F:/xxxx.xls

被拒绝访问

解决方案一

在需要进行读写操作的目录下添加Network Service这个帐号,

由于在iis 6.0中,默认的应用程序池中的标示用的是Network Service,

所以在进程中是使用Network Service这个帐号运行来运行w3wp.exe进程,

而当我们在运行VS 2003的时候需要对某一个目录下进行读写操作,

看了一下该文件夹,发现没有Network Service,添加上该账号,同时选上FULL CONTROL,问题解

访问word模板权限,不用设置用户名和密码

Application当程序运行到这句时出现下面的错误:检索 COM 类工厂中 CLSID 为

{000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误:

80070005。

3.单击”安全”选项卡,分别在”启动和激活权限”和”访问权限”组中选中”自定义”,然后

自定义->编辑->添加ASP.NET账户和IUSER_计算机名。

解决方法二:如果上述方法不能解决问题,就应该是权限问题,请尝试用下面

的方法:在web.config中使用身份模拟,在节中加入

下用是不使用用户名和密码的

解决方法一:

1:在服务器上安装office的word软件.

2:在”开始”- >”运行”中输入dcomcnfg.exe启动”组件服务”

3:依次双击”组件服务”- >”计算机”- >”我的电脑”-

>”DCOM配置”

4:在”DCOM配置”中找到”Microsoft

word应用程序”,在它上面点击右键,然后点击”属性”,弹出”Microsoft

word应用程序属性”对话框

5:点击”标识”标签,选择”交互式用户”

6:点击”安全”标签,在”启动和激活权限”上点击”自定义”,然后点击对应的”编辑”按钮,在弹出的”安全性”对话框中填加

一个”NETWORK

SERVICE”用户(注意要选择本计算机名),并给它赋予”本地启动”和”本地激活”权限.

7:依然是”安全”标签,在”访问权限”上点击”自定义”,然后点击”编辑”,在弹出的”安全性”对话框中也填加一个”NETWORK

SERVICE”用户,然后赋予”本地访问”权限.

这样,我们便配置好了相应的word的DCOM权限.

注意:这是在WIN2003上配置的,在2000上,可能是配置ASPNET用户

由于word是在服务器上打开的,所以应该写一个把导出数据保存在服务器上,然后再传递给客户端的方法,最后每次调用这个功能的时候再删除以前在服务器上所生成的所有word

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046}

的组件时失败,原因是出现以下错误: 80070005

在CSDN上总是有网友问这个问题,自己也遇到过,因些写出来供参考:

症状:

oWordApplic = New Word.Application

当程序运行到这句时出现下面的错误:

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046}

的组件时失败,原因是出现以下错误: 80070005。

oWordApplic = New Word.Application

当程序运行到这句时出现下面的错误:

检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046}

的组件时失败,原因是出现以下错误: 80070005。

解决方法一:

控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档

之后

单击属性打开此应用程序的属性对话框。

2. 单击标识选项卡,然后选择交互式用户。

3.单击”安全”选项卡,分别在”启动和激活权限”和”访问权限”组中选中”自定义”,然后

自定义->编辑->添加ASP.NET账户和IUSER_计算机名

* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。

13. 确保允许每个用户访问,然后单击确定。

14. 单击确定关闭 DCOMCNFG。

解决方法二:

如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:

在web.config中使用身份模拟,在

节中加入

1.webconfig文件

2.引用用命名空间:using using Microsoft.Office;

在此之前需要添加引用,右击项目,添加引用,浏览C:Program FilesMicrosoft

OfficeOFFICE11找到excel.exe 确定

3.调用方法

string sql = “select top 20 uid as 用户编号,username as 用户名 from

dnt_users”;

ds = SqlHelp.ExecuteDataSet(SqlHelp.sqlCon, CommandType.Text, sql,

null);

ExportToExcel(ds,

Server.MapPath(“excel/”+DateTime.Now.ToString(“yyyyMMddhhssm”)));

4.方法

#region

//从DataSet到出到Excel

///导出指定的Excel文件

public void ExportToExcel(DataSet ds, string

strExcelFileName)

{

if (ds.Tables.Count == 0 || strExcelFileName == “”) return;

doExport(ds, strExcelFileName);

}

///执行导出

private void doExport(DataSet ds, string strExcelFileName)

{

Excel.Application excel1 = new Excel.Application();

int rowIndex = 1;

int colIndex = 0;

excel1.Application.Workbooks.Add(true);

System.Data.DataTable table = ds.Tables[0];

foreach (DataColumn col in table.Columns)

{

colIndex++;

excel1.Cells[1, colIndex] = col.ColumnName;

}

foreach (DataRow row in table.Rows)

{

rowIndex++;

colIndex = 0;

foreach (DataColumn col in table.Columns)

{

colIndex++;

excel1.Cells[rowIndex, colIndex] =

row[col.ColumnName].ToString();

}

}

excel1.Visible = false;

excel1.ActiveWorkbook.SaveAs(strExcelFileName + “.XLS”,

Excel.XlFileFormat.xlExcel9795, null, null, false, false,

Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null,

null);

excel1.Quit();

excel1 = null;

GC.Collect();//垃圾回收

}

#endregion

5.服务器配置

Retrieving the COM class factory for component with CLSID

{00024500-0000-0000-C000-000000000046} failed due to the following

error: 80070005.

中文翻译为:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}

的组件时失败,原因是出现以下错误: 80070005

1:在服务器上安装office的Excel软件.

2:在”开始”->”运行”中输入dcomcnfg.exe启动”组件服务”

3:依次双击”组件服务”->”计算机”->”我的电脑”->”DCOM配置”

4:在”DCOM配置”中找到”Microsoft Excel

应用程序”,在它上面点击右键,然后点击”属性”,弹出”Microsoft Excel 应用程序属性”对话框

5:点击”标识”标签,选择”交互式用户”

6:点击”安全”标签,在”启动和激活权限”上点击”自定义”,然后点击对应的”编辑”按钮,在弹出的”安全性”对话框中填加一个”NETWORK

SERVICE”用户(注意要选择本计算机名),并给它赋予”本地启动”和”本地激活”权限.

7:依然是”安全”标签,在”访问权限”上点击”自定义”,然后点击”编辑”,在弹出的”安全性”对话框中也填加一个”NETWORK

SERVICE”用户,然后赋予”本地访问”权限.

这样,我们便配置好了相应的Excel的DCOM权限.

注意:我是在WIN2003上配置的,在2000上,可是配置ASPNET用户

Retrieving the COM class factory for component with CLSID

{00020819-0000-0000-C000-000000000046} failed due to the following

error: 80040154

1.运行dcomcnfg打开组件服务,

2.依次展开”组件服务”->”计算机”->”我的电脑”->”DCOM配置”

3.找到”Microsoft Excel应用程序”或”Microsoft Word应用程序”,

4.右键打开属性对话框,点击”标识”选项卡,

5.点”下列用户”,把管理员的用户密码正确填写进去…

6.点击”安全”选项卡,

7.依次把”启动和激活权限”,”访问权限”,”配置权限”,都选择为自定义,

8.然后依次点击它们的编辑,把everyone(或者User)添加进去,并加入所有的权限…

检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}

的组件时失败,原因是出现以下错误: 8000401a。

注意错误类别,需要你手工登录服务器就是接显示器,接键盘,一般放在机房可能不能这样解决了

可以使用下面这样样子解决,记得登录后不要注销。

在 Microsoft Windows Server 2003 年请登录到 Console0 上使用 / 控制台

开关来解决此问题。若要这样做,请按照下列步骤操作:

1.单击 开始,单击 运行,键入 mstsc /console,然后单击确定。

2.登录到计算机上。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值