none
Crear Reportes de Word desde Excel y guardarlos todos en uno solo Word o PDF con C# RRS feed

  • Pregunta

  • Hola estoy desarrollando una aplicación con C# donde selecciono un archivo de excel dando click a un boton, selecciono la plantilla de word con un boto, cuando doy click en imprimir por cada registro o fila del excel me genera un reporte y me reemplaza ciertos datos que le indico con ayuda de la plantilla en un nuevo documento de word, ya me guarda todos los documentos pero no puedo hacer que me guarde todos los documentos .docx en uno solo o en un PDF

    POR FAVOR AYUDA!!

    Librerias que uso:

    Microsoft.Office.Interop.Word

    Microsoft.Office.Interop.Excel

     //Seleccionar ruta del Archivo de Excel y guardarla en tun textbox
            private void pictureExcel_Click(object sender, EventArgs e)
            {
                OpenFileDialog openfile1 = new OpenFileDialog();
                openfile1.Filter = "Archivo de Excel |*.xlsx";
                openfile1.Title = "Seleccione el archivo de Excel";
                if (openfile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    if (openfile1.FileName.Equals("") == false)
                    {
                        textBoxRutaExcel.Text = openfile1.FileName;
                    }
                }
            }
            //Seleccionar ruta del Archivo de Word y guardarla en un textbox
            private void pictureWord_Click(object sender, EventArgs e)
            {
                if (textBoxRutaExcel.Text != "")
                {
                    OpenFileDialog openfile1 = new OpenFileDialog();
                    openfile1.Filter = "Archivo de word |*.docx";
                    openfile1.Title = "Seleccione el archivo de Word";
                    if (openfile1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        if (openfile1.FileName.Equals("") == false)
                        {
                            textBoxRutaPlantilla.Text = openfile1.FileName;
                        }
                    }
                }
                else
                { MessageBox.Show("¡Primero seleccione el Archivo de Excel!"); }
            }

    //Función para leer archivo de excel
            
            private string[] readExcel(int index)
            {
                string ruta = textBoxRutaExcel.Text;
                Excel.Application xlApp;
                Excel.Workbook xlworkbook;
                Excel.Worksheet xlworksheet;
                string[] data = new string[8];
                xlApp = new Excel.Application();
                xlworkbook = xlApp.Workbooks.Open(ruta, 0, true, 5, "", "", true);
                xlworksheet = (Excel.Worksheet)xlworkbook.Worksheets.get_Item(1);
                object missingfila = Type.Missing;
                index += 2;
                //en el arreglo solo se guardan ciertos campos de la hoja de excel
                data[0] = xlworksheet.get_Range("A" + index.ToString()).Text; //get Campo 
                data[1] = xlworksheet.get_Range("C" + index.ToString()).Text; //get Campo 
                data[2] = xlworksheet.get_Range("D" + index.ToString()).Text; //get Campo 
                data[3] = xlworksheet.get_Range("F" + index.ToString()).Text; //get Campo 
                data[4] = xlworksheet.get_Range("H" + index.ToString()).Text; //get Campo 
                data[5] = textBoxNotificador.Text;
                data[6] = xlworksheet.get_Range("K" + index.ToString()).Text; //get Campo 
                data[7] = xlworksheet.get_Range("S" + index.ToString()).Text; //get Campo 
                xlworkbook.Close(false);
                xlApp.Quit();
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlworksheet);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlworkbook);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp);
                //return data []

                return data;
            }
           
           
            //GENERAR CITATORIO E IMPRIMIR
            private void pictureImprimir_Click(object sender, EventArgs e)
            {
                if (textBoxRutaExcel.Text != "" & textBoxRutaPlantilla.Text != "" & textBoxNotificador.Text != "" & textBoxCantCruce.Text != "")
                {
                    //Seleccionar la ruta destino para guardar el reporte
                    FolderBrowserDialog openfolder1 = new FolderBrowserDialog();
                    if (openfolder1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        if (openfolder1.RootFolder.Equals("") == false)
                        {
                            textBoxRutaCarpetaDestino.Text = openfolder1.SelectedPath;
                            labeloading.Text = "";
                        }
                    }
                    cant = Convert.ToInt32(textBoxCantCruce.Text);
                    //now create word file intro template and fill data
                    Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
                    //load document
                    Microsoft.Office.Interop.Word.Document doc = null;
                    object fileName = textBoxRutaPlantilla.Text;
                    object missing = Type.Missing;

                    progressBar1.Maximum = cant;

                    for (int i = 0; i < cant; i++) //crear numero de reportes
                    {
                        doc = app.Documents.Open(fileName, missing, missing); //pasar por parametro ruta del archivo
                        app.Selection.Find.ClearFormatting();
                        app.Selection.Find.Replacement.ClearFormatting();
                        // read file excel
                        string[] tmp = new string[8];
                        tmp = readExcel(i);
                        //fill data to template AQUI SE REEMPLAZAN LOS DATOS DE LA PLANTILLA
                        app.Selection.Find.Execute("<VARIABLE1>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[0], 2);
                        app.Selection.Find.Execute("<VARIABLE2>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[1], 2);
                        app.Selection.Find.Execute("<VARIABLE3>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[2], 2);
                        app.Selection.Find.Execute("<VARIABLE4>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[3], 2);
                        app.Selection.Find.Execute("<VARIABLE5>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[4], 2);
                        app.Selection.Find.Execute("<VARIABLE6>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[5], 2);
                        app.Selection.Find.Execute("<VARIABLE7>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[6], 2);
                        app.Selection.Find.Execute("<VARIABLE8>", missing, missing, missing, missing, missing, missing, missing, missing, tmp[7], 2);
                        //save new file as report --ME GUARDA UNO POR UNO
                        object SaveAsFile = (object)textBoxRutaCarpetaDestino.Text + "/" + tmp[0] + "_" + i + ".docx";
                        doc.SaveAs2(SaveAsFile, missing, missing, missing);
                    }


                    MessageBox.Show("¡Realizado con exito!");
                    doc.Close(false, missing, missing);
                    app.Quit(false, false, false);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

                }
                else
                {
                    MessageBox.Show("¡Favor de llenar todos los campos!");
                }


    miércoles, 10 de abril de 2019 15:41

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te hago la recomendación de ingresar al siguiente enlace en donde puedes encontrar una posible solución para tu problema.

    https://social.msdn.microsoft.com/Forums/es-ES/9e75bacb-eae2-46a3-8c91-05b3c549859b/macro-excel-word-a-pdf?forum=vstoes

    Gracias por usar los foros de MSDN.

    Carlos Ruiz
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    miércoles, 10 de abril de 2019 16:38