Ich schreibe eine Anwendung, die mit Excel-Dateien funktioniert. Ich benötige eine Funktion, um ein Blatt zu löschen. Ich muss eine Assembly Microsoft.Office.Interop.Excel.dll verwenden.
Auf dem Entwicklercomputer läuft es einwandfrei, aber wenn ich versuche, es auf dem Server bereitzustellen, wird folgende Fehlermeldung angezeigt:
Datei oder Assembly 'Office, Version = 14.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c' oder eine ihrer Abhängigkeiten konnte nicht geladen werden
Ich verstehe, dass das Problem auftritt, wenn MS Office nicht auf einem Computer installiert ist. Der Kunde möchte MS Office nicht um jeden Preis auf einem Server installieren und kaufen.
Ich installiere "Redistributable Primary Interop Assemblies" auf dem Entwicklercomputer wie hier empfohlen: http://forums.asp.net/t/1530230.aspx/1 und kompiliere mein Projekt erneut.
Codebeispiel:
public bool DeleteSheet(string tableName)
{
Excel.Application app = null;
Excel.Workbooks wbks = null;
Excel._Workbook _wbk = null;
Excel.Sheets shs = null;
bool found = false;
try
{
app = new Excel.Application();
app.Visible = false;
app.DisplayAlerts = false;
app.AlertBeforeOverwriting = false;
wbks = app.Workbooks;
_wbk = wbks.Add(xlsfile);
shs = _wbk.Sheets;
int nSheets = shs.Count;
for (int i = 1; i <= nSheets; i++)
{
Excel._Worksheet _iSheet = (Excel._Worksheet)shs.get_Item(i);
if (_iSheet.Name == tableName)
{
_iSheet.Delete();
found = true;
Marshal.ReleaseComObject(_iSheet);
break;
}
Marshal.ReleaseComObject(_iSheet);
}
if (!found)
throw new Exception(string.Format("Table \"{0}\" was't found", tableName));
_wbk.SaveAs(connect, _wbk.FileFormat, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
}
finally
{
_wbk.Close(null, null, null);
wbks.Close();
app.Quit();
Marshal.ReleaseComObject(shs);
Marshal.ReleaseComObject(_wbk);
Marshal.ReleaseComObject(wbks);
Marshal.ReleaseComObject(app);
}
return true;
}
Eine Ausnahme
Das Abrufen der COM-Klassenfactory für Komponenten mit der CLSID {00024500-0000-0000-C000-000000000046} ist aufgrund des folgenden Fehlers fehlgeschlagen: 80040154 Klasse nicht registriert (Ausnahme von HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
tritt in der Leitung auf
app = new Excel.Application();
Kann jemand raten, wie diese Funktion erfolgreich funktioniert?