Word PDF Excel HTML Con C# | Microsoft Word | C (Programming ...

June 8, 2017 | Author: Anonymous | Category: HTML/HTML5, C#
Share Embed


Short Description

Word PDF Excel HTML Con C# - Download as Word Doc (.doc), PDF File (.pdf), Text File (.txt) or read online. ... Código ...

Description

En este artículo paso a paso se describe cómo crear un nuevo documento en Microsoft Word utilizando automatización desde Microsoft Visual C# 2005 o Microsoft Visual C#. NET. Código de ejemplo El código de ejemplo en este artículo muestra cómo hacer lo siguiente: • • • •

Insertar párrafos con texto y el formato. Examinar y modificar distintos intervalos dentro de un documento. Insertar tablas, tablas de formato y llenar las tablas con datos. Agregar un gráfico.

Para crear un nuevo documento de Word utilizando automatización desde Visual C# 2005 o Visual C#. NET, siga estos pasos: 1. Inicie Microsoft Visual Studio 2005 o Microsoft Visual Studio NET.. 2. En el menú archivo , haga clic en nuevo y, a continuación, haga clic en proyecto . En Tipos de proyecto , haga clic en Proyectos de Visual C# y, después, haga clic en Aplicación para Windows en plantillas . Se creará Form1 de manera predeterminada. Nota En Visual Studio 2005, haga clic en C# en lugar de Proyectos de Visual C# . 3. Agregue una referencia a la Biblioteca de objetos de Microsoft Word . Para ello, siga estos pasos: a. En el menú proyecto , haga clic en Agregar referencia . b. En la ficha COM , busque Microsoft Word Object Library y, a

continuación, haga clic en seleccionar . Nota En Visual Studio 2005, no es necesario haga clic en Seleccionar . Nota Microsoft Office 2003 incluye a ensamblados de interoperabilidad primarios (PIA). Microsoft Office XP no incluye PIA, pero pueden descargar. Para obtener más información acerca de los PIA de Office XP, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base: 328912 (http://support.microsoft.com/kb/328912/ ) INFORMACIÓN: El PIA de Microsoft Office XP están disponibles para descarga c. Haga clic en Aceptar en el cuadro de diálogo Agregar referencias para

aceptar sus selecciones. Si se le pregunta si desea generar contenedores para las bibliotecas que ha seleccionado, haga clic en Sí . 2. En el menú Ver , elija cuadro de herramientas para mostrar el cuadro de herramientas y, a continuación, agregue un botón a Form1. 3. Haga doble clic en Button1 . Aparece la ventana de código del formulario. 4. En la ventana código, reemplace el código siguiente 5. private void button1_Click(object sender, System.EventArgs e) 6. { 7. }

con: private void button1_Click(object sender, System.EventArgs e) { object oMissing = System.Reflection.Missing.Value; object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ //Start Word and create a new document. Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = true; oDoc = oWord.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing); //Insert a paragraph at the beginning of the document. Word.Paragraph oPara1; oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing); oPara1.Range.Text = "Heading 1"; oPara1.Range.Font.Bold = 1; oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph. oPara1.Range.InsertParagraphAfter(); //Insert a paragraph at the end of the document. Word.Paragraph oPara2; object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oPara2 = oDoc.Content.Paragraphs.Add(ref oRng); oPara2.Range.Text = "Heading 2"; oPara2.Format.SpaceAfter = 6; oPara2.Range.InsertParagraphAfter(); //Insert another paragraph. Word.Paragraph oPara3; oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oPara3 = oDoc.Content.Paragraphs.Add(ref oRng); oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:"; oPara3.Range.Font.Bold = 0; oPara3.Format.SpaceAfter = 24; oPara3.Range.InsertParagraphAfter(); //Insert a 3 x 5 table, fill it with data, and make the first row //bold and italic. Word.Table oTable; Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range; oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing); oTable.Range.ParagraphFormat.SpaceAfter = 6; int r, c; string strText; for(r = 1; r Background -> Printed Watermarks The same can also be done programmatically; moreover as we manually define the values like the angle of tilt and actual location of the watermark, we have more flexibility in defining the exact location of the watermark. 9.1 Embedding Pictures in Document Header: //EMBEDDING LOGOS IN THE DOCUMENT //SETTING FOCUES ON THE PAGE HEADER TO EMBED THE WATERMARK oWord.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekCurrentPageHeader; //THE LOGO IS ASSIGNED TO A SHAPE OBJECT SO THAT WE CAN USE ALL THE //SHAPE FORMATTING OPTIONS PRESENT FOR THE SHAPE OBJECT Word.Shape logoCustom = null; //THE PATH OF THE LOGO FILE TO BE EMBEDDED IN THE HEADER String logoPath = "C:\\Document and Settings\\MyLogo.jpg"; logoCustom = oWord.Selection.HeaderFooter.Shapes.AddPicture(logoPath, ref oFalse, ref oTrue, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); logoCustom.Select(ref oMissing); logoCustom.Name = "CustomLogo"; logoCustom.Left = (float)Word.WdShapePosition.wdShapeLeft; //SETTING FOCUES BACK TO DOCUMENT oWord.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument; 9.2 Inserting Text in the Centre of the Document as Water Mark: //THE LOGO IS ASSIGNED TO A SHAPE OBJECT SO THAT WE CAN USE ALL THE //SHAPE FORMATTING OPTIONS PRESENT FOR THE SHAPE OBJECT Word.Shape logoWatermark = null; //INCLUDING THE TEXT WATER MARK TO THE DOCUMENT logoWatermark = oWord.Selection.HeaderFooter.Shapes.AddTextEffect( Microsoft.Office.Core.MsoPresetTextEffect.msoTextEffect1, "Enter The Text Here", "Arial", (float)60, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, 0, 0, ref oMissing); logoWatermark.Select(ref oMissing); logoWatermark.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; logoWatermark.Line.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; logoWatermark.Fill.Solid(); logoWatermark.Fill.ForeColor.RGB = (Int32)Word.WdColor.wdColorGray30;

logoWatermark.RelativeHorizontalPosition = Word.WdRelativeHorizontalPosition.wdRelativeHorizontalPositionMargin; logoWatermark.RelativeVerticalPosition = Word.WdRelativeVerticalPosition.wdRelativeVerticalPositionMargin; logoWatermark.Left = (float)Word.WdShapePosition.wdShapeCenter; logoWatermark.Top = (float)Word.WdShapePosition.wdShapeCenter; logoWatermark.Height = oWord.InchesToPoints(2.4f); logoWatermark.Width = oWord.InchesToPoints(6f); //SETTING FOCUES BACK TO DOCUMENT oWord.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument; 9.3 Inserting Text in the Centre of Page, and rotating it by 90 Degrees: //INSERTING TEXT IN THE CENTRE RIGHT, TILTED AT 90 DEGREES Word.Shape midRightText; midRightText = oWord.Selection.HeaderFooter.Shapes.AddTextEffect( Microsoft.Office.Core.MsoPresetTextEffect.msoTextEffect1, "Text Goes Here", "Arial", (float)10, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, 0, 0, ref oMissing); //FORMATTING THE SECURITY CLASSIFICATION TEXT midRightText.Select(ref oMissing); midRightText.Name = "PowerPlusWaterMarkObject2"; midRightText.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; midRightText.Line.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; midRightText.Fill.Solid(); midRightText.Fill.ForeColor.RGB = (int)Word.WdColor.wdColorGray375; //MAKING THE TEXT VERTICAL & ALIGNING midRightText.Rotation = (float)90; midRightText.RelativeHorizontalPosition = Word.WdRelativeHorizontalPosition.wdRelativeHorizontalPositionMargin; midRightText.RelativeVerticalPosition = Word.WdRelativeVerticalPosition.wdRelativeVerticalPositionMargin; midRightText.Top = (float)Word.WdShapePosition.wdShapeCenter; midRightText.Left = (float)480;

10. Including Page Numbers in Page Footer: Including auto-generated page numbers in the Footer is yet another useful feature which can be simulated in the code. //SETTING THE FOCUES ON THE PAGE FOOTER oWord.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekCurrentPageFooter; //ENTERING A PARAGRAPH BREAK "ENTER" oWord.Selection.TypeParagraph(); String docNumber = "1";

String revisionNumber = "0"; //INSERTING THE PAGE NUMBERS CENTRALLY ALIGNED IN THE PAGE FOOTER oWord.Selection.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft; oWord.ActiveWindow.Selection.Font.Name = "Arial"; oWord.ActiveWindow.Selection.Font.Size = 8; oWord.ActiveWindow.Selection.TypeText("Document #: " + docNumber + " Revision #: " + revisionNumber); //INSERTING TAB CHARACTERS oWord.ActiveWindow.Selection.TypeText("\t"); oWord.ActiveWindow.Selection.TypeText("\t"); oWord.ActiveWindow.Selection.TypeText("Page "); Object CurrentPage = Word.WdFieldType.wdFieldPage; oWord.ActiveWindow.Selection.Fields.Add(oWord.Selection.Range, ref CurrentPage, ref oMissing, ref oMissing); oWord.ActiveWindow.Selection.TypeText(" of "); Object TotalPages = Word.WdFieldType.wdFieldNumPages; oWord.ActiveWindow.Selection.Fields.Add(oWord.Selection.Range, ref TotalPages, ref oMissing, ref oMissing); //SETTING FOCUES BACK TO DOCUMENT oWord.ActiveWindow.ActivePane.View.SeekView = Word.WdSeekView.wdSeekMainDocument;

11. Basic Text Formatting Options: 11.1 Paragraph Break: This is equivalent to hitting the enter button in the document. //ENTERING A PARAGRAPH BREAK "ENTER" oWord.Selection.TypeParagraph(); 11.2 Text Formatting Option: All the text formatting options available in the Word Application can also be replicated through automation. //OTHER COMMONLY USED FORMATTING OPTIONS oWord.Selection.Font.Bold = 1; oWord.Selection.Font.Color = Word.WdColor.wdColorAqua; oWord.Selection.Font.Italic = 1; oWord.Selection.Font.Underline = Word.WdUnderline.wdUnderlineDashHeavy; 11.3 Clear Formatting: When the Formatting is applied to a selection, then the same formatting gets carried on to the next lines, in order to clear the formatting, the next line needs to be selected and ClearFormatting() method needs to be called. //CLEARING THE FORMATTING

oWord.Selection.ClearFormatting();

12. Table of Contents: Table of Contents is very handy when it comes to official documents or some technical papers which span across many pages. Table of contents can be inserted and updated on the fly as the document gets built. For the Table of Contents to get auto generated without any hassles, it is vital that the Headings, Sub-Headings and the Body text have their respective attributes set. When we work on the application, the values get set by themselves, we only need to edit if required. But while programming its mandatory that we set the values in the code in order to prevent any anomalies when the Table of Contents gets updated. Below is an example of a document which was programmatically generated.

Figure 6. It is apparent that the Header 2 and Header 3 and Body are formatted differently and even in the Table of Contents the Header 2 is slightly offset from the Header 1. Open the above document and Outlining Tool bar, View -> Toolbars -> Outlining. And on moving the cursor on the Sample Header 2, we can see that the Format is Heading 2 and Outlining level is Level 2.

Figure 7. And for Body, the Format is Normal + Arial, 10 pt and Outlining Level is Body text.

Figure 8. The same values needs to be set programmatically for the Table of Contents to get generated. 12.1 Section Format: For setting the Format of the Selection, select the entire text (select between bookmarks like mentioned before in Selection section) and set the value //SETTING THE FORMAT TYPE //SELECT THE CONTENST TO BE FORMATTED AND SET THE VALUE Object styleHeading2 = "Heading 2"; Object styleHeading3 = "Heading 3"; oWord.Selection.Range.set_Style(ref styleHeading2); oWord.Selection.Range.set_Style(ref styleHeading3);

12.2 Outline Level: For setting the outline level, select the contents and set it to one of the values mentioned below //SETTING THE OUTLINE LEVEL //SELECT THE CONTENTS WHOSE OUTLINE LEVEL NEEDS TO BE CHANGED AND //SET THE VALUE oWord.Selection.Paragraphs.OutlineLevel =Word.WdOutlineLevel.wdOutlineLevel2; oWord.Selection.Paragraphs.OutlineLevel = Word.WdOutlineLevel.wdOutlineLevel3; oWord.Selection.Paragraphs.OutlineLevel = Word.WdOutlineLevel.wdOutlineLevelBodyText; 12.3 Inserting Table of Contents: Once the Outline Levels & Section Style are set, the Table of Contents can be inserted programmatically and the page numbers gets populated automatically based on the Outline Levels & Section Style set by the user. (Also refer this MSDN Link) // NAME OF THE BOOKMARK IN THE DOCUMENT (.dot Template) WHERE TABLE OF // CONTENTS NEEDS TO BE ADDED Object oBookmarkTOC = "Bookmark_TOC"; // SETTING THE RANGE AT THE BOOKMARK Word.Range rngTOC = oWordDoc.Bookmarks.get_Item(ref oBookmarkTOC).Range; // SELECTING THE SET RANGE rngTOC.Select(); // INCLUDING THE TABLE OF CONTENTS Object oUpperHeadingLevel = "1"; Object oLowerHeadingLevel = "3"; Object oTOCTableID = "TableOfContents"; oWordDoc.TablesOfContents.Add(rngTOC, ref oTrue, ref oUpperHeadingLevel, ref oLowerHeadingLevel,ref oMissing, ref oTOCTableID, ref oTrue, ref oTrue, ref oMissing, ref oTrue, ref oTrue, ref oTrue); 12.4 Updating Table of Contents: Usually the Table of Contents is inserted in the beginning of the document generation and once all the contents are populated, the locations of the Headings and Sub Headings tend to change. If the Table of Contents is not updated, then its contents points to different pages. To overcome this hassle, the Table of Contents needs to be updated at the end of the Automation. //UPDATING THE TABLE OF CONTENTS oWordDoc.TablesOfContents[1].Update(); //UPDATING THE TABLE OF CONTENTS

oWordDoc.TablesOfContents[1].UpdatePageNumbers();

13. Saving/Closing & Re-Opening the File: 13.1 Saving the File: //THE LOCATION WHERE THE FILE NEEDS TO BE SAVED Object oSaveAsFile = (Object)"C:\\SampleDoc.doc"; oWordDoc.SaveAs(ref oSaveAsFile, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 13.2 Closing the File: //CLOSING THE FILE oWordDoc.Close(ref oFalse, ref oMissing, ref oMissing); //QUITTING THE APPLICATION oWord.Quit(ref oMissing, ref oMissing, ref oMissing); 13.3 Re-Opening the File:

The Open () method which we use in Word2003 dll might throw an exception if the client have another version of word installed in their machine. If the client has Word 2002, then he has to open a word file only by Open2002 () method. Open () method which comes for Word 2003 might through an exception in Word 2002 environment. And for Word 2000, there is a method called Open2000 () and Open2002 () for Office 2002 and so on. So it is wise to put the Open () in a trycatch block as mentioned below.

Figure 10.

14. Tips for Word Automation to Create New Document (NonBase Template Approach) (Refer to this MSDN link) When we proceed to create a New Document without using the Base Template, the most useful entity is the inbuilt Bookmark endofdoc. It would be a build-fromscratch approach where the programmer starts of the automation by inserting his first section of contents, then setting the range to point to the endofdoc Bookmark and selecting it and inserting his contents and again selecting the endofdoc which would be pointing to the end of the document which would now be after the two sections.

Exportar a PDF, Excel y Otros formatos en C# (DataGridView & Windows Forms). Hola, en esta ocasión les traigo un ejemplo de como exportar los datos de un dataGridView (en WinForms) a diversos formatos sin la necesidad de interactuar con componentes ActiveX y tampoco de utilizar la interoperabilidad de Office. En el caso de utilizar PDF si utilice una librería llamada iTextSharp y para los demás es solo programación, pero eso lo veremos un poco mas adelante. Este ejemplo muestro un programa que tiene un dataGridView en el que se muestran los datos que se llenan desde una base de datos y esa información es la que se exporta a diferentes formatos. En esta entrada no explico como se llena el dataGridView porque hay muchas formas de hacerlo y me imagino que eso no les interesa. Habiendo quedando claro eso comencemos con el ejemplo. Exportando a PDF Para la exportación de los datos del dataGridView a PDF estoy utilizando una librería muy interesante llamada iTextSharp que es un "Port" de otra librería llamada iText para Java solo que esta es para C#. Al estar utilizando esta librería me sorprendió de una forma muy grata ya que no la conocía. esta puede ser una opción a crystal reports al momento de hacer reportes principalmente si es que no deseas que tu aplicación eleve considerablemente su tamaño y su rendimiento, eso si es mucho mas trabajo porque todo es por código y no puedes diseñar tus reportes de una forma visual aunque con un poco de dedicación puedes sacar PDF’s muy completos en cuanto a diseño ya que esta librería te provee de muchas clases para diseñar el PDF conforme a tus necesidades (Para mas información sobre iTextSharp visiten este pagina http://itextsharp.sourceforge.net/ ), pero bueno no me quiero meter tanto en esto y continuemos con el ejemplo. Primero que nada creamos un Nuevo proyecto del Tipo WidowsApplication en Visual Studio y agregamos una referencia a la DLL de iTextSharp (descargar DLL iTextSharp) en nuestro proyecto.

Agregamos la dll de iTextSharp nuestro proyecto.

Una vez teniendo agregada la DLL diseñamos un WindowsForm como en la siguiente imagen agregamos un botón al que le pondremos “Exportar ” y accedemos a su evento Onclick.

En este ejemplo tendremos estos datos y los exportaremos a PDF usando ItextSharp.

Antes de poner el código es necesario agregar los siguientes espacios de nombres entre otros: using iTextSharp.text; using iTextSharp.text.pdf; //Código para exportar DataGridView a PDF usando iTextSharp //Evento clic del Botón Exportar

private void Exportar_pdf(object sender, EventArgs e) { try { Document doc = new Document(PageSize.A4.Rotate(), 10, 10 ,10, 10); string filename = "DataGridViewTest.pdf"; FileStream file = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); PdfWriter.GetInstance(doc, file); doc.Open(); GenerarDocumento(doc); doc.Close(); Process.Start(filename); } catch (Exception ex) { MessageBox.Show(ex.Message); } } //Función que genera el documento Pdf public void GenerarDocumento(Document document) { //se crea un objeto PdfTable con el numero de columnas del //dataGridView PdfPTable datatable = new PdfPTable(dataGridView1.ColumnCount);

//asignamos algunas propiedades para el diseño del pdf datatable.DefaultCell.Padding = 3; float[] headerwidths = GetTamañoColumnas(dataGridView1); datatable.SetWidths(headerwidths); datatable.WidthPercentage = 100; datatable.DefaultCell.BorderWidth = 2; datatable.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;

//SE GENERA EL ENCABEZADO DE LA TABLA EN EL PDF for (int i = 0; i < dataGridView1.ColumnCount; i++) { datatable.AddCell(dataGridView1.Columns[i].HeaderText); }

datatable.HeaderRows = 1; datatable.DefaultCell.BorderWidth = 1;

//SE GENERA EL CUERPO DEL PDF for (int i = 0; i < dataGridView1.RowCount; i++) { for (int j = 0; j < dataGridView1.ColumnCount; j++) { datatable.AddCell(dataGridView1[j, i].Value.ToString()); } datatable.CompleteRow(); }

//SE AGREGAR LA PDFPTABLE AL DOCUMENTO

document.Add(datatable); }

//Función que obtiene los tamaños de las columnas del grid public float[] GetTamañoColumnas(DataGridView dg) { float[] values = new float[dg.ColumnCount]; for (int i = 0; i < dg.ColumnCount; i++) { values[i] = (float)dg.Columns[i].Width; } return values; }

Imagen del Pdf generado en este ejemplo.

Nota: Este ejemplo esta hecho para Windows Forms para el componente DataGridView pero para ASP.net seria muy similar para el componente DataGrid solo que manejando con mucho cuidado los paths. Exportando a otros formatos

diseño de la forma para exportar a otros formatos en este ejemplo

Exportando A Excel Para la exportación a este formato es una pequeña trampita si es que se puede llamar así porque lo que se esta haciendo es generar un documento con código HTML pero guardarlo con extensión XLS!!!, en donde simplemente los datos que tenemos en el Grid lo pasamos a una tabla HTML y ya con eso tendremos nuestros datos exportados a Excel . El siguiente código es una clase llamada “OtrosFormatos” la cual tiene 2 métodos los cuales son “Export” y “ExportCSV” este ultimo para exportar al formato CSV además de contar con 2 atributos los cuales son el “StreamWriter” (clase del NameSpace System.IO) y la ruta en donde queremos guardar el archivo. clase OtrosFormatos public class OtrosFormatos { StreamWriter w; string ruta; public string xpath { get { return ruta; } set { value = ruta; }}

/// /// Constructor que establece el path del archivo ///

/// public OtrosFormatos(string path) { ruta = @path; }

/// /// Exporta datos a un archivo /// /// /// public void Export(ArrayList titulos, DataTable datos) { try { FileStream fs = new FileStream(ruta, FileMode.Create, FileAccess.ReadWrite); w = new StreamWriter(fs); string comillas = char.ConvertFromUtf32(34); StringBuilder html = new StringBuilder(); html.Append(@""); html.Append(@"");

html.Append(@""); html.Append(@""); html.Append(@"Untitled Document"); html.Append(@""); html.Append(@"");

//Generando encabezados del archivo //(aquí podemos dar el formato como a una tabla de HTML) html.Append(@""); html.Append(@" ");

foreach (object item in titulos) { html.Append(@"" + item.ToString() + ""); } html.Append(@" ");

//Generando datos del archivo for (int i = 0; i < datos.Rows.Count; i++) { html.Append(@""); for (int j = 0; j < datos.Columns.Count; j++) {

html.Append(@"" + datos.Rows[i][j].ToString() + ""); } html.Append(@""); } html.Append(@""); html.Append(@""); w.Write(html.ToString()); w.Close(); } catch (Exception ex) { throw ex; } } //Fin de la Función Export

/// /// Genera un archivo CSV /// /// /// public void ExportCSV(ArrayList titulos, DataTable datos) { try { FileStream fs = new FileStream(ruta, FileMode.Create, FileAccess.ReadWrite);

w = new StreamWriter(fs); string comillas = char.ConvertFromUtf32(34); StringBuilder CSV = new StringBuilder();

//Encabezados for (int i = 0; i < titulos.Count; i++) { if (i != (titulos.Count - 1)) CSV.Append(comillas + titulos[i].ToString() + comillas + ","); else CSV.Append(comillas + titulos[i].ToString() + comillas + Environment.NewLine); }

// se generan datos for (int i = 0; i < datos.Rows.Count; i++) { for (int j = 0; j < datos.Columns.Count; j++) { if (j != (titulos.Count - 1)) CSV.Append(comillas + datos.Rows[i][j].ToString() + comillas + ","); else CSV.Append(comillas + datos.Rows[i][j].ToString() + comillas + Environment.NewLine); } }

w.Write(CSV.ToString()); //se escribe la cadena en el archivo w.Close(); } catch (Exception ex) { throw ex; } } //Fin de ExportCSV } // Fin de Clase OtrosFormatos

Código del uso de esta clase en la Aplicación para Exportar a Excel. //Código para exportar a Excel //Evento Onclick del Botón private void BotExcel_Click(object sender, EventArgs e) { try { ArrayList titulos = new ArrayList(); DataTable datosTabla = new DataTable(); //Especificar ruta del archivo con extensión de EXCEL. OtrosFormatos OF = new OtrosFormatos(Application.StartupPath + @\\test.xls); //obtenemos los titulos del grid y creamos las columnas de la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) { titulos.Add(item.HeaderText); datosTabla.Columns.Add(); }

//se crean los renglones de la tabla foreach (DataGridViewRow item in dataGridView1.Rows) { DataRow rowx = datosTabla.NewRow(); datosTabla.Rows.Add(rowx); } //se pasan los datos del dataGridView a la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) { foreach (DataGridViewRow itemx in dataGridView1.Rows) { datosTabla.Rows[itemx.Index][item.Index] = dataGridView1[item.Index, itemx.Index].Value; } } OF.Export(titulos, datosTabla); Process.Start(OF.xpath); MessageBox.Show("Proceso Completo"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } //Fin del Evento Clic del Botón

Archivo de Excel Resultante.

Exportación a WORD Para la exportación de los datos a Word se sigue el mismo procedimiento que para exportar los datos a Excel, solo que en vez de guardar el archivo con extensión .xls lo guardamos con extensión .doc. //Código para exportar a Word //Evento Onclick del Botón private void BotWord_Click(object sender, EventArgs e) { try { ArrayList titulos = new ArrayList(); DataTable datosTabla = new DataTable(); //Especificar ruta del archivo con extensión de WORD. OtrosFormatos OF = new OtrosFormatos(Application.StartupPath + @\\test.doc); //obtenemos los titulos del grid y creamos las columnas de la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) {

titulos.Add(item.HeaderText); datosTabla.Columns.Add(); } //se crean los renglones de la tabla foreach (DataGridViewRow item in dataGridView1.Rows) { DataRow rowx = datosTabla.NewRow(); datosTabla.Rows.Add(rowx); } //se pasan los datos del dataGridView a la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) { foreach (DataGridViewRow itemx in dataGridView1.Rows) { datosTabla.Rows[itemx.Index][item.Index] = dataGridView1[item.Index, itemx.Index].Value; } } OF.Export(titulos, datosTabla); Process.Start(OF.xpath); MessageBox.Show("Proceso Completo"); } catch(Exception ex) { MessageBox.Show(ex.Message); } } //Fin del Evento Clic del Botón

Archivo .doc Resultante

Exportación a HTML Para la exportación a HTML es la mas sencilla ya que en este ejemplo lo que se crea es un archivo HTML solo se guarda con extensión HTML y ya esta. //Código para Exportar a HTML //Evento Click del Botón private void BotHTML_Click(object sender, EventArgs e) { try { ArrayList titulos = new ArrayList(); DataTable datosTabla = new DataTable(); //Especificar ruta del archivo con extensión de HTML. OtrosFormatos OF = new OtrosFormatos(Application.StartupPath + @\\test.html); //obtenemos los titulos del grid y creamos las columnas de la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) {

titulos.Add(item.HeaderText); datosTabla.Columns.Add(); } //se crean los renglones de la tabla foreach (DataGridViewRow item in dataGridView1.Rows) { DataRow rowx = datosTabla.NewRow(); datosTabla.Rows.Add(rowx); } //se pasan los datos del dataGridView a la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) { foreach (DataGridViewRow itemx in dataGridView1.Rows) { datosTabla.Rows[itemx.Index][item.Index] = dataGridView1[item.Index, itemx.Index].Value; } } OF.Export(titulos, datosTabla); Process.Start(OF.xpath); MessageBox.Show("Proceso Completo"); } catch(Exception ex) { MessageBox.Show(ex.Message); } } // Fin del Evento Click del botón

Archivo html resultante

Exportación a CSV (comma-separated values) La exportación a este formato es bastante sencilla y se usa el mismo principio que en los demás solo que usando el método ExportCSV de este ejemplo ya que el vaciado de los datos es diferente porque no se crea un documento HTML sino que se escribe directamente sobre un archivo csv. Nota: Cabe señalar que este tipo de formatos se puede abrir también en Excel en cual se mostrara los datos en forma de tabla. //Código para Exportar a CSV //Evento Click del Botón private void BotCSV_Click(object sender, EventArgs e) { try { ArrayList titulos = new ArrayList(); DataTable datosTabla = new DataTable(); //Especificar ruta del archivo con extensión de CSV. OtrosFormatos OF = new OtrosFormatos(Application.StartupPath

+ @\\test.csv); //obtenemos los titulos del grid y creamos las columnas de la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) { titulos.Add(item.HeaderText); datosTabla.Columns.Add(); } //se crean los renglones de la tabla foreach (DataGridViewRow item in dataGridView1.Rows) { DataRow rowx = datosTabla.NewRow(); datosTabla.Rows.Add(rowx); } //se pasan los datos del dataGridView a la tabla foreach (DataGridViewColumn item in dataGridView1.Columns) { foreach (DataGridViewRow itemx in dataGridView1.Rows) { datosTabla.Rows[itemx.Index][item.Index] = dataGridView1[item.Index, itemx.Index].Value; } } OF.ExportCSV(titulos, datosTabla); Process.Start(OF.xpath); MessageBox.Show("Proceso Completo"); } catch (Exception ex) { MessageBox.Show(ex.Message);

} } //Fin del Evento Click del Botón

Archivo CSV resultante

Este ejemplo en conjunto con todo su código lo pueden descargar desde mi SkyDrive aquí. Nota: La conexión a la base de datos de este ejemplo la realice con SQLite, en el ejemplo pongo lo necesario para que funcione el ejecutable incluyendo la base de datos, la DLL iTextSharp y el DataProvider de SQLite, pero si quieren modificar el código y que funcione tendrán que instalar el Proveedor de datos SQLite, esto lo hice por portabilidad ya que con SQlite la base de datos esta en un pequeño archivo. Pueden preguntar con toda confianza por si tiene alguna duda con SQLite y si esta dentro de mis posibilidades intentare ayudarlos. Saludos!!!

View more...

Comments

Copyright © 2017 DATENPDF Inc.