Willy laroche

B10g $ur 13$ t3chn0$ M!cr0$0ft 3t p1u$ $! 4ff!n!té$…


3 Commentaires

C# Manipuler Office avec COM Interop

Suite à plusieurs questions sur le sujet, je me permets d’écrire ce petit bout de code qui servira à ouvrir un fichier Excel (ou autre documents office) avec COM Interop.

Pour info, j’utilise la version 14.0.0.0 de l’assembly : Microsoft.Office.Interop.Excel

C# 4 (.NET 4)

D’après ce que j’ai entendu, il y a des problèmes de compatibilité sur l’utilisation d’Interop avec la version Office 64 bits, prévilégiez donc la version 32bits.

Il vous faudra aussi manipuler ces objets sous la culture « en-US » si vous êtes sur une Culture autre que celle-ci.

Dans mon cas je suis sous la culture « fr-FR ».

Petit exemple :

CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");

Application _excelApp = new Application();
object opt = Type.Missing;

Workbook workBook = null;
Worksheet sheet = null;

try
{
    workBook = _excelApp.Workbooks.Open(thisFileName, opt, opt, opt, opt, opt,
               opt, opt, opt, opt, opt, opt, opt, opt, opt);

    //your process...
}
catch (Exception ex)
{
    throw new Exception(ex.Message);
}
finally
{
    if (workBook != null)
        workBook.Close(opt, opt, opt);

    if (_excelApp != null)
        _excelApp.Quit();

    // Clean unmanaged objects
    if (_excelApp != nullMarshal.FinalReleaseComObject(_excelApp);
    if (workBook != nullMarshal.FinalReleaseComObject(workBook);
    if (sheet != nullMarshal.FinalReleaseComObject(sheet);

    _excelApp = null;
    workBook = null;
    sheet = null;

    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();

    Thread.CurrentThread.CurrentCulture = currentCulture;
}

Voilà, le fichier Office Excel est correctement libéré.

Publicités