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