Comment utiliser Microsoft.Bureau de.Interop.Excel sur une machine sans installé MS Office?

Je suis en train d'écrire une application qui fonctionne avec des fichiers excel.
J'ai besoin d'une fonction pour supprimer une feuille.
J'ai utiliser une assemblée Microsoft.Office.Interop.Excel.dll.

Il est en cours d'exécution fine sur l'ordinateur du développeur, mais quand j'essaie de le déployer sur le serveur j'obtiens une erreur:

Impossible de charger le fichier ou l'assembly 'office, Version=14.0.0.0,
Culture=neutral, PublicKeyToken=71e9bce111e9429c' ou une de ses
dépendances

Je comprends que le problème se produit lorsque MS Office n'est pas installé sur une machine.
Le client ne voulez pas l'installer et acheter MS Office sur un serveur qui n'est pas à n'importe quel prix.

J'ai installer "Redistribuable Primary Interop Assemblies" sur l'ordinateur du développeur comme indiqué ici: http://forums.asp.net/t/1530230.aspx/1
et compiler mon projet de nouveau.

Exemple de Code:

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;
}

Une exception

De la récupération de la fabrique de classe COM pour le composant avec le CLSID
{00024500-0000-0000-C000-000000000046} a échoué en raison de l'suivantes
erreur: 80040154 Classe non enregistrée (Exception de HRESULT:
0x80040154 (REGDB_E_CLASSNOTREG)).

se produit sur la ligne

app = new Excel.Application();

Quelqu'un peut vous conseiller sur la façon d'obtenir cette fonction de travail avec succès?

  • Et bien je vois c'est un vieux poste - donc peut-être trop tard, mais j'ai dû le faire dans le passé et j'ai utilisé les Formats Open XML: support.office.com/en-us/article/...
InformationsquelleAutor John Wales | 2012-07-12