Wie verwende ich Microsoft.Office.Interop.Excel auf einem Computer ohne installiertes MS Office?

Ich schreibe eine Anwendung, die mit Excel-Dateien arbeitet. Ich benötige eine Funktion, um ein Blatt zu löschen. Ich muss eine Assembly Microsoft.Office.Interop.Excel.dll verwenden.

Auf der Entwicklermaschine läuft es einwandfrei, aber wenn ich versuche, es auf dem Server bereitzustellen, erhalte ich eine Fehlermeldung:

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 die Komponente 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 auf der Leitung auf

app = new Excel.Application();

Kann jemand Ratschläge geben, wie diese Funktion erfolgreich funktioniert?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage