Impression de fichiers Excel depuis Sharepoint

PhilSfr Messages postés 3 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 22 juin 2011 - 20 juin 2011 à 17:30
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 22 juin 2011 à 18:03
Bonjour,

J'utilise la bibliothèque Microsoft.Office.Interop.Excel pour imprimer des fichiers Excel par programme.
En projet console l'impression fonctionne :
static void Main(string[] args)
        {
            Application excelApp = new Application();
            Workbook wb = null;
            excelApp.ScreenUpdating = false;
            excelApp.DisplayAlerts = false;
            try
            {
                wb = excelApp.Workbooks.Open(@"\\gedtest\ged\BE\test_Excel\test1.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                wb.PrintOut(1, 1, 1, Type.Missing, printerName, Type.Missing, Type.Missing, Type.Missing);
                                
            }
            catch (Exception e)
            {
                string message = e.Message;
            }
            finally
            {
                excelApp.ScreenUpdating = true;
                excelApp.DisplayAlerts = true;
                // Cleanup:
                GC.Collect();
                GC.WaitForPendingFinalizers();
                //Marshal.FinalReleaseComObject(ws);
                wb.Close(false, Type.Missing, Type.Missing);
                Marshal.FinalReleaseComObject(wb);
                excelApp.Quit();
                Marshal.FinalReleaseComObject(excelApp);
            }
        }


Je recopie ces instructions dans le code d'un WebPart:

public class ExcelPrint : Microsoft.SharePoint.WebPartPages.WebPart
    {
        protected override void CreateChildControls()
        {
            try
            {
                System.Web.UI.WebControls.Button B_Print = new System.Web.UI.WebControls.Button();
                B_Print.Text = "print excel files";
                B_Print.Click += new EventHandler(B_Print_Onclick);
                //B_Print.OnClientClick = "RecupItem()";
                B_Print.ID = "B_Print";
 
                //this.Controls.Add(new LiteralControl(" &nbsp"));
                this.Controls.Add(B_Print);
                base.CreateChildControls();
 
                // Your code here...
                
                //this.Controls.Add(new LiteralControl(this.MyList));
            }
            catch (Exception ex)
            {
                string message = ex.Message;
            }
 
        }
 
        public void B_Print_Onclick(Object sender, EventArgs ea)
        {
            
            ApplicationClass excelApp = new ApplicationClass();
            Workbook wb = null;
            excelApp.ScreenUpdating = false;
            excelApp.DisplayAlerts = false;
            excelApp.Visible = true;
 
            try
            {
                wb = excelApp.Workbooks.Open(@"\\gedtest\ged\BE\test_Excel\test1.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                //wb.PrintPreview(false);
                wb.PrintOut(1, 1, 1, Type.Missing, printerName, Type.Missing, Type.Missing, Type.Missing);
                /
            }
            catch (Exception e)
            {
                string message = e.Message;
            }
            finally
            {
                excelApp.ScreenUpdating = true;
                excelApp.DisplayAlerts = true;
                // Cleanup:
                GC.Collect();
                GC.WaitForPendingFinalizers();
                //Marshal.FinalReleaseComObject(ws);
                wb.Close(false, Type.Missing, Type.Missing);
                Marshal.FinalReleaseComObject(wb);
                excelApp.Quit();
                Marshal.FinalReleaseComObject(excelApp);
            }
        }
    }

Et là je reste bloqué sur l'instruction suivante:
wb.PrintOut(1, 1, 1, Type.Missing, printerName, Type.Missing, Type.Missing, Type.Missing);


sans message d'erreur.
Je n'arrive vraiment pas à voir ce qui pourrait coincer.
Merci de votre aide

4 réponses

PhilSfr Messages postés 3 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 22 juin 2011
21 juin 2011 à 14:42
De plus dans mon programme console (fonctionnel), lorsque je provoque moi-même une erreur d'exécution à PrintOut (exemple: paramètre invalide), là je vais bien dans le catch.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 juin 2011 à 07:28
Bonjour

pour avoir une idée de comment paramétrer mes méthodes Microsoft.Office.Interop.Excel, je lance un classeur et j'enregistre une macro correspondant à l'action que je veux réaliser.

Pour imprimer une page dans PdfCretor ça me donne ça:
    Application.ActivePrinter = "PDFCreator sur Ne00:"
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
        "PDFCreator sur Ne00:", Collate:=True


On constate que les paramètres "from" et "to" ou tu as mis "1" ne sont pas présents et que Collate = true.

Ensuite quand tu tapes la méthode "PrintOut" Intellisense t'indique que les paramètres d'entrée sont des "object" et tu as mis des "int" et des "type".

Voila ce qui marche chez moi pour Excel 2003

   object M = System.Reflection.Missing.Value;    
            object Copies = (object)1;//cast ton int en object
            object PrinterName = (object)  "PDFCreator sur Ne00:";// cast le string en object
            object Vrai = (object)true;//cast le bool en object

            _ApplicationXL.ActivePrinter = PrinterName.ToString();
            _MonClasseur.PrintOut(M, M, Copies, M, PrinterName, M,Vrai, M);


J'ai fais une source sur Excel, dans laquelle je n'avais pas implémenté de module d'impression, je la mettrai à jour prochainement.


Whismeril
0
PhilSfr Messages postés 3 Date d'inscription lundi 20 décembre 2010 Statut Membre Dernière intervention 22 juin 2011
22 juin 2011 à 09:07
Merci de ta réponse.
Mais comme j'ai dit depuis un main ma fonction PrintOut telle que je l'ai écrite imprime bien ! Et peu importe le cast en object.

C'est lorsque j'insère mon code dans
public void B_Print_Onclick(Object sender, EventArgs ea)

que ça me fait le pb.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
22 juin 2011 à 18:03
Bonsoir,
je n'ai jamais piloté Excel en application console, mais en WinForm en appliquant le typage à la lettre j'ai pu faire ce que je voulais.

Whismeril
0
Rejoignez-nous