asp.net 填充word 模版標籤並下載使用筆記

來源:互聯網
上載者:User

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.登入到電腦上。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.