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

Je développe une application qui travaille avec des fichiers Excel.
J’ai besoin d’une fonctionnalité pour supprimer une feuille.
Je dois utiliser l’assembly Microsoft.Office.Interop.Excel.dll.

Cela fonctionne parfaitement sur la machine de développement, mais lorsque j’essaie de la déployer sur le serveur, j’obtiens une erreur :

Could not load file or assembly ‘office, Version=14.0.0.0,
Culture=neutral, PublicKeyToken=71e9bce111e9429c’ or one of its
dependencies

Je comprends que le problème survient lorsque MS Office n’est pas installé sur la machine.
Le client ne veut en aucun cas installer et acheter MS Office sur un serveur.

J’ai installé les « Redistributable Primary Interop Assemblies » sur la machine de développement comme conseillé ici : http://forums.asp.net/t/1530230.aspx/1
et j’ai recompilé mon projet.

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

L’exception

Retrieving the COM class factory for component with CLSID
{00024500-0000-0000-C000-000000000046} failed due to the following
error: 80040154 Class not registered (Exception from HRESULT:
0x80040154 (REGDB_E_CLASSNOTREG)).

survient à la ligne

app = new Excel.Application();

Quelqu’un peut-il conseiller sur la manière de faire fonctionner cette fonctionnalité correctement ?

Vous ne pouvez pas utiliser Microsoft.Office.Interop.Excel sans avoir MS Office installé.

Cherchez simplement sur Google des bibliothèques qui permettent de modifier des fichiers xls ou xlsx :