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?
Antworten:
Sie können Microsoft.Office.Interop.Excel nicht verwenden, ohne ms office installiert zu haben.
Suchen Sie einfach in Google nach einigen Bibliotheken, mit denen Sie xls oder xlsx ändern können:
quelle
Wenn der "Kunde MS Office nicht um jeden Preis auf einem Server installieren und kaufen möchte", können Sie Excel nicht verwenden ... Aber ich kann den Trick nicht verstehen: Es geht um eine grundlegende Office-Lizenz, die ungefähr 150 kostet USD ... Und ich denke, dass die Suche nach einer Alternative weit mehr kostet als dieser Betrag!
quelle
Sie können einen Dienst erstellen und Excel auf dem Server generieren und dann Clients das Herunterladen von Excel ermöglichen. Da Sie eine Excel-Lizenz für 1000 Personen kaufen, ist es besser, eine Lizenz für den Server zu haben.
hoffentlich hilft das.
quelle
Suchen Sie nach GSpread.NET. Sie können mit Google Spreadsheets mithilfe der API von Microsoft Excel arbeiten. Sie müssen alten Code nicht mit der neuen Google API-Verwendung neu schreiben. Fügen Sie einfach ein paar Zeilen hinzu:
Set objExcel = CreateObject("GSpreadCOM.Application"); app.MailLogon(Name, ClientIdAndSecret, ScriptId);
Es ist ein OpenSource-Projekt und erfordert keine Installation von Office.
Die Dokumentation finden Sie hier http://scand.com/products/gspread/index.html
quelle