Exportation excel

ericdu93 Messages postés 56 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 28 août 2008 - 16 mars 2008 à 17:32
ericdu93 Messages postés 56 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 28 août 2008 - 16 mars 2008 à 18:49
Bonjour,

Je cherche à faire fonctionner mon exécutable sur une autre machine. Voici la configuration!

Ma machine A:
Systeme: Windows xp pro
Logiciel: office excel 2007

Ma machine B:
Systeme: Windows xp pro
Logiciel: office excel 2000

mon code permet d'exporter un datagridview vers un fichier excel.

Voici le contexte, donc ma form est composé d'un simple datagridview avec un bouton. Lorsque je clique sur ce bouton ca executé mon code d'exportation et le fichier est créer dans C:\Bonjour.xls. Ensuite je génère l'exécutable avec le fichier d'interop excel version 12.0

J'exécute mon exécutable, ca marche bien, l'exportation fonctionne.

Par contre lorsque j'exécute mon exécutable sur ma machine B, je clique sur le bouton, j'obtiens l'erreur suivante:

Ancien format ou bibliothèque de types non valides. (Exception from Hresult: 0x80028018 (TYPE_E_INVDATAREAD))

Et voici mon code d'exportation:

private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                //Start Excel and get Application object.
                oXL = new Microsoft.Office.Interop.Excel.Application();
                oXL.Visible = false;

                //Get a new workbook.
                oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add(System.Reflection.Missing.Value));
                oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;

                // Copier les noms des colonnes
                int i = 0;
                foreach (DataGridViewColumn ch in dgView1.Columns)
                {
                    oRng = oSheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", Missing.Value);
                    oSheet.Cells[1, i + 1] = ch.Name.Trim();
                    oRng.Interior.ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
                    oRng.Font.Bold = true;
                    oRng.BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, Missing.Value);
                    oRng.EntireColumn.AutoFit();
                    i++;
                }
                oWB.SaveAs(@"C:\Bonjour.xls", M, M, M, M, M, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, M, M, M, M, M);

//... pour une raison de lisibilité, j'ai enlevé ici un bout de code ici qui permet juste d'exporter les valeurs des champs. Et donc là, le code exporte juste le nom de chaque colonne.
       }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
}

De ce que j'ai pu trouvé sur le net, il est dit que c'est office qui n'est pas installé sur ma machine B. Or ma machine B a office excel 2000.

Donc d'après vous est-ce que le problème vient de la version d'excel ?

Dans tous les cas, quel solution me proposez-vous pour résoudre mon problème ?

Merci d'avance.

PS: bien entendu sur ma machine B, j'ai mis dans le meme dossier que l'exécutable ma dll interop excel version 12.0 et la framework 2.0 est installé.

1 réponse

ericdu93 Messages postés 56 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 28 août 2008 1
16 mars 2008 à 18:49
Je viens de rajouter un thread juste après l'initialisation de l'excel application comme suit:

                oXL = new Microsoft.Office.Interop.Excel.Application();
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");

Cette fois-ci j'obtiens une autre erreur lors de l'exécution sur ma machine B.

Thread Attempted to read or write protected memory. This is often an indication that other memory is corrupt

Que dois-je faire pour résoudre cette erreur ?
0
Rejoignez-nous