Impression d'un document excel [Résolu]

Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Dernière intervention
25 juillet 2013
- - Dernière réponse : Whismeril
Messages postés
12366
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
- 12 févr. 2013 à 09:58
Bonjour à tous,

je fais comme suis pour générer un fichier Excel

        private void Click_Exporter(object sender, EventArgs e)
        {
            Microsoft.Office.Interop.Excel.Application oXL;
            Microsoft.Office.Interop.Excel._Workbook oWB;
            Microsoft.Office.Interop.Excel._Worksheet oSheet;
            Microsoft.Office.Interop.Excel.Range oRng;
            object M = System.Reflection.Missing.Value;

            int i = 0;
            int j = 0;
            int k = 0;

            try
            {
                //Start Excel and get Application object.
                oXL = new Microsoft.Office.Interop.Excel.Application();
                //oXL.Visible = true;

                //Get a new workbook.
                //oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add(System.Reflection.Missing.Value));
                oWB = oXL.Workbooks.Open(Application.StartupPath + @"/Impressions/EmploiDuTemps.xls", M, M, M, M, M, M, M, M, M, M, M, M, M, M);
                oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;
                oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.Sheets[1];
                oSheet.Name = "Feuil1";
                oSheet.Activate();

                foreach (DataGridViewColumn col in dgvClassesEDT.Columns)
                {
                    if (oSheet.Cells[4, 1] != null)
                    {
                        oRng = oSheet.get_Range(Convert.ToChar(65 + i).ToString() + "1", M);
                        //oSheet.Cells[3, i + 1] = col.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++;
                    }
                }
                oSheet.Cells[1, 4] = string.Concat("PROFESSEUR PRINCIPAL ", this.txtTitre.Text, " ", this.txtNomEns.Text, " ", this.txtPrenomEns.Text);
                oSheet.Cells[1, 3] = DateTime.Now.ToLongDateString();
                oSheet.Cells[1, 1] = this.txtClasse.Text;
                oSheet.Cells[1, 2] = this.txtAnnee.Text;

                j = 3;

                foreach (DataGridViewRow uneLigne in dgvClassesEDT.Rows)
                {
                    i = 2;
                    int h = 0;

                    if (oSheet.Cells[6, 1] != null)
                    {
                        oRng = oSheet.get_Range(Convert.ToChar(65 + h).ToString() + j.ToString(), M);
                        for (k = 0; k < dgvClassesEDT.Rows.Count - 1; k++)
                        {
                            oSheet.Cells[k + 3, 1] = k + 1; //col.Name.Trim();
                            oRng.Interior.ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic;
                            oRng.Font.Bold = false;
                            //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();
                            //k++;
                        }
                    }

                    foreach (DataGridViewColumn uneColonne in dgvClassesEDT.Columns)
                    {
                        if (oSheet.Cells[j, i] != null)
                        {
                            oRng = oSheet.get_Range(Convert.ToChar(65 + i - 1).ToString() + j.ToString(), M);
                            if (uneLigne.Cells[uneColonne.Name].Value != null) oSheet.Cells[j, i] = "'" + uneLigne.Cells[uneColonne.Name].Value.ToString().Trim();
                            oRng.Font.Bold = false;
                            //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++;
                        }
                    }
                    oSheet.Columns.AutoFit();
                    j++;
                }
                oXL.Visible = true;
                //_MaFeuille = (_Worksheet)_MonClasseur.Sheets[NumeroFeuille];
                oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.Sheets[2];
                oSheet.Name = "EmploiDuTemps";
                oSheet.Activate();
                //_MaFeuille.Name = NouveauNom;
                //_MaFeuille.Activate();

                //this.btnExporter.Text = "&Aperçu";
            }
            catch (FileNotFoundException Lg)
            {
                MessageBox.Show(Lg.Message, "Erreur");
            }
        }

Je voudrais savoir, s'il est possible d'imprimer directement ce fichier sans l'afficher et sans le sauvegarder. Merci de me répondre.
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
642
Date d'inscription
mercredi 10 septembre 2008
Dernière intervention
9 février 2017
3
Merci
Salut,

La fonction est simple. Elle te permet d'imprimer dans un fichier PDF (via pdfCreator).

La variable copies est le nombre de copies que tu veux faire,
PrinterName est le nom de l'imprimante
(Arrête moi si je dis des bêtises wishmeril)

Dans ton cas tu devrais avoir après adaptation de cette méthode quelquechose comme :
oWB.PrintOut(M, M, Copies, M, PrinterName, M, Vrai, M);

C'est même la seule ligne importante.

Procède par étape :
Dans un premier temps essaye d'imprimer dans un fichier PDF.
Ensuite adapte cette méthode si tu veux utiliser une "vraie imprimante".

Mais pour utiliser cette fonction (celle ci dessus) tu dois juste l'appeler comme ceci (pas de paramètres en entrée):

imprime();


Après tu peux imaginer une méthode à laquelle tu lui passes le nom du classeur à imprimer du genre :

imprime("Nom du classeur");


Une autre avec le chemin de l'imprimante et le nom du classeur:

imprime("chemin imprimante", "nom du classeur");


etc etc...

@++

SD

Merci dodo7263 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de dodo7263
Messages postés
12366
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
0
Merci
Bonjour,

j'ai posté une source qui permet en autre d'imprimer une feuille excel. Dans l'exemple c'est avec pdf creator, mais ça marche avec de "vraie" imprimante.
Il ne me semble pas nécessaire d'enregistrer le fichier et si tu ne veux pas l'afficher il suffit que oXL.Visible = False. Cependant cela risque de poser des soucis le temps que tu debugues, car si tu arrête le programme, excel est actif, invisible et avec accès à ta feuille. Et là il faut jouer du CTL ATL SUPPR


Whismeril
Commenter la réponse de Whismeril
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Dernière intervention
25 juillet 2013
0
Merci
Merci Whismeril,
je vais voir le code, je te tiens informé
Commenter la réponse de cs_warzet
Messages postés
99
Date d'inscription
jeudi 17 janvier 2008
Dernière intervention
25 juillet 2013
0
Merci
Voici, il se trouve que j'ai déjà connaissance de ce code, mais justement je ne sais comment utiliser ta fonction [code=cs] public void Imprime()
{
object Copies = (object)1;
object PrinterName = (object)"PDFCreator sur Ne00:";
object Vrai = (object)true;

_ApplicationXL.ActivePrinter = PrinterName.ToString();
_MonClasseur.PrintOut(_M, _M, Copies, _M, PrinterName, _M, Vrai, _M);
}
[code=cs]
alors si tu as un tuyau, il serait le bien venu.
Merci
Commenter la réponse de cs_warzet
Messages postés
12366
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
0
Merci
Pas mieux!


Whismeril
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.