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


Poster un commentaire

Insérer des images avec Open Office XML

Pour faire un petit rappel, Open Office Xml est une méthode permettant de générer des fichiers Office (Word et Excel) à travers une application ou autre.
Le processus de génération s’effectue côté serveur et ne requiert pas l’installation d’Office sur le serveur.

Il est indispensable au niveau du projet de référencer 2 librairies: 

  • WindowsBase.dll
  • DocumentFormat.OpenXml.dll

Une description d’Open Office XML est dispo ici:

Avant tout, il faut installer le SDK :

Le SDK permet de générer les classes nécessaires à la génération du fichier (Word ou Excel par exemple).

 Créer un fichier Word 2007 et importer dans le SDK afin de générer les classes correspondantes qui devront être intégrées à votre projet.
La problématique est de savoir comment intégrer des images dans le document (logo, icônes…) Lire la suite


Poster un commentaire

Créer un splash screen original en XAML

Profiter du Designer de Visual Studio 2010 ou de Blend pour concevoir le splash, voici le mien:
Code XAML :
    <Grid x:Name= »LayoutRoot » Background= »White » ShowGridLines= »True »>
        <StackPanel Canvas.ZIndex= »1000″ Orientation= »Horizontal » Visibility= »Visible » VerticalAlignment= »Center » HorizontalAlignment= »Center » Margin= »0,0,0,50″>
            <TextBlock x:Name= »txtPercent » FontSize= »120″ Opacity= »0.05″ VerticalAlignment= »Bottom »>
                <Run Text= »00″/>
            TextBlock>
        StackPanel>
        <StackPanel Orientation= »Vertical » VerticalAlignment= »Center » HorizontalAlignment= »Center » Margin= »0,0,0,50″>
            <Grid Height= »Auto » HorizontalAlignment= »Center » VerticalAlignment= »Center » Width= »Auto »>
                <Rectangle x:Name= »progressBarBackground » Stroke= »Black » StrokeThickness= »1″ Height= »8″ VerticalAlignment= »Center » Width= »150″ Margin= »0,0,0,0″/>
                <Rectangle x:Name= »progressBar » Fill= »Orange » Width= »0″ Height= »6″ HorizontalAlignment= »Left » VerticalAlignment= »Center » Margin= »1,0,1,0″/>
            Grid>
        StackPanel>
    Grid>
Grid>
Les éléments surlignés sont importants car ils seront mis à jour par l’intermédiaire du script javascript ci-dessous.
Pensez à retirer la balise et garder uniquement le dans le XAML. Lire la suite