asp プロジェクト (C#) に問題があります。
次のエラーがあります: CLSID {00024500-0000-0000-C000-000000000046} を持つコンポーネントの COM クラス ファクトリを取得すると、次のエラーが原因で失敗しました:サーバーから Excel ファイルを生成しようとすると、80040154 がスローされます。私はすでにそれに関するいくつかの投稿を見てきましたが、それらが私に当てはまるかどうか、または私の問題を解決できるかどうかはわかりません. 私のコードを示して説明しましょう。
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
private Excel.Application oXL;
private Excel._Workbook oWB;
private ExcelFile f;
protected void bExcel_Click(object sender, EventArgs e)
{
if (Session["mode"] == null)
Response.Redirect(accueil);
// Set the values
oXL = new Excel.Application();
oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
f = new ExcelFile((Excel._Worksheet)oWB.ActiveSheet);
oXL.Visible = true;
/* displaying data from a gridview, non revelant here (?) */
oXL.Visible = true;
f = null;
oXL = null;
oWB = null;
}
エラーの説明 (225 行目) :
Erreur source:
Ligne 224 : // Set the values
Ligne 225 : oXL = new Excel.Application();
Ligne 226 : oWB = (Excel._Workbook) oXL.Workbooks.Add(Missing.Value));
Ligne 227 : f = new ExcelFile((Excel._Worksheet)oWB.ActiveSheet);
さて、サーバーからExcelファイルを生成しようとするとこの問題が発生しますが、ローカルバージョンでデバッグモードを実行すると発生しません(コードは機能します)。私の会社のすべてのワークステーションには、コンピューターに MS Office Excel がインストールされていますが、使用しているサーバーにはインストールされていません。私の質問は、サーバーに Excell をインストールする必要がないことによる解決策はありますか?
サーバーは私のサービスからのものではないため、サーバーにExcelをインストールすることは避けようとしています. サーバー上のアセンブリ フォルダーにライブラリをコピーしようとしました (すべてのワークステーションが同じであるため、参照は機能するはずです ?) が、サーバーからライブラリへのアクセスを許可するために与えなければならなかったアクセス許可が見つかりませんでした (私はそれを悪く説明しているわけではありません)。
前もって感謝します、
EDIT:私が理解していないことがあります.それは、すでに書かれている前のコードでは、Excelアプリケーションは次のように起動できるということです:
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=registrationData.xls");
// Pour les caractères spéciaux (é, à, etc...)
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
using (StringWriter sw = new StringWriter())
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
Table table = new Table();
TableRow tRow = new TableRow();
/* Adding each information of the grid using tRow.Cells.Add() */
table.RenderControl(htw);
// Response needs the Htmlwriter
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
そして、これは Excel がインストールされていなくても機能していました。なぜなら (よくわかりませんが)、Excel アプリケーションを呼び出すだけで、バッファ (StringWriter) でいっぱいになったからです。しかし、テーブルを使用するのは退屈であり、相互運用機能を使用してファイルを既に作成しているため、テーブルを使用したくありません... サーバーにインストールされているアセンブリを使用するために与える権限を見つけることができれば、すべての作業ステーションがExcel があれば、このコードで使用する方法で使用できるはずです。