Tabla de contenido
Instalado a través de NuGet
PM> Install-Package Spire.Office
enlaces relacionados
Word y Excel son dos tipos de archivos completamente diferentes. Los documentos de Word se usan para escribir ensayos, cartas o crear informes, mientras que los documentos de Excel se usan para guardar datos en forma tabular, hacer gráficos o realizar cálculos matemáticos. No se recomienda convertir un documento de Word complejo en una hoja de cálculo de Excel porque difícilmente Excel puede representar el contenido de acuerdo con su diseño original en Word.
Sin embargo, si su documento de Word se compone principalmente de tablas y desea analizar los datos de la tabla en Excel, puede usar Spire.Office for .NET para convertir Word a Excel mientras manteniendo una buena legibilidad.
Instalar Spire.Office for .NET
Para empezar, debe agregar los archivos DLL incluidos en el paquete Spire.Office for .NET como referencias en su proyecto .NET. Los archivos DLL se pueden descargar desde este enlace o instalado a través de NuGet.
PM> Install-Package Spire.Office
Convierta Word a Excel en C# y VB.NET
Este escenario en realidad usa dos bibliotecas en el paquete Spire.Office. Son Spire.Doc for .NET y Spire.XLS for .NET. El primero se usa para leer y extraer contenido de un documento de Word, y el segundo se usa para crear un documento de Excel y escribir datos en las celdas específicas. Para que este ejemplo de código sea fácil de entender, creamos los siguientes tres métodos personalizados que realizan funciones específicas.
- ExportTableInExcel() : exporta datos de una tabla de Word a celdas de Excel específicas.
- CopyContentInTable() : copia el contenido de una celda de tabla en Word a una celda de Excel.
- CopyTextAndStyle() : copia texto con formato de un párrafo de Word a una celda de Excel.
Los siguientes pasos demuestran cómo exportar datos de un documento de Word completo a una hoja de trabajo utilizando Spire.Office for .NET.
- Cree un objeto Documento para cargar un archivo de Word.
- Cree un objeto Worbbook y agréguele una hoja de trabajo llamada "WordToExcel".
- Recorra todas las secciones del documento de Word, recorra todos los objetos del documento en una determinada sección y luego determine si un objeto del documento es un párrafo o una tabla.
- Si el objeto del documento es un párrafo, escriba el párrafo en una celda específica en Excel usando el método CoypTextAndStyle().
- Si el objeto del documento es una tabla, exporte los datos de la tabla de celdas de Word a Excel usando el método ExportTableInExcel().
- Ajuste automáticamente el alto de la fila y el ancho de la columna en Excel para que los datos dentro de una celda no excedan el límite de la celda.
- Guarde el libro de trabajo en un archivo de Excel usando el método Workbook.SaveToFile().
- C#
- VB.NET
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using Spire.Xls; using System; using System.Drawing; namespace ConvertWordToExcel { class Program { static void Main(string[] args) { //Create a Document object Document doc = new Document(); //Load a Word file doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Invoice.docx"); //Create a Workbook object Workbook wb = new Workbook(); //Remove the default worksheets wb.Worksheets.Clear(); //Create a worksheet named "WordToExcel" Worksheet worksheet = wb.CreateEmptySheet("WordToExcel"); int row = 1; int column = 1; //Loop through the sections in the Word document foreach (Section section in doc.Sections) { //Loop through the document object under a certain section foreach (DocumentObject documentObject in section.Body.ChildObjects) { //Determine if the object is a paragraph if (documentObject is Paragraph) { CellRange cell = worksheet.Range[row, column]; Paragraph paragraph = documentObject as Paragraph; //Copy paragraph from Word to a specific cell CopyTextAndStyle(cell, paragraph); row++; } //Determine if the object is a table if (documentObject is Table) { Table table = documentObject as Table; //Export table data from Word to Excel int currentRow = ExportTableInExcel(worksheet, row, table); row = currentRow; } } } //Auto fit row height and column width worksheet.AllocatedRange.AutoFitRows(); worksheet.AllocatedRange.AutoFitColumns(); //Wrap text in cells worksheet.AllocatedRange.IsWrapText = true; //Save the workbook to an Excel file wb.SaveToFile("WordToExcel.xlsx", ExcelVersion.Version2013); } //Export data from Word table to Excel cells private static int ExportTableInExcel(Worksheet worksheet, int row, Table table) { CellRange cell; int column; foreach (TableRow tbRow in table.Rows) { column = 1; foreach (TableCell tbCell in tbRow.Cells) { cell = worksheet.Range[row, column]; cell.BorderAround(LineStyleType.Thin, Color.Black); CopyContentInTable(tbCell, cell); column++; } row++; } return row; } //Copy content from a Word table cell to an Excel cell private static void CopyContentInTable(TableCell tbCell, CellRange cell) { Paragraph newPara = new Paragraph(tbCell.Document); for (int i = 0; i < tbCell.ChildObjects.Count; i++) { DocumentObject documentObject = tbCell.ChildObjects[i]; if (documentObject is Paragraph) { Paragraph paragraph = documentObject as Paragraph; foreach (DocumentObject cObj in paragraph.ChildObjects) { newPara.ChildObjects.Add(cObj.Clone()); } if (i < tbCell.ChildObjects.Count - 1) { newPara.AppendText("\n"); } } } CopyTextAndStyle(cell, newPara); } //Copy text and style of a paragraph to a cell private static void CopyTextAndStyle(CellRange cell, Paragraph paragraph) { RichText richText = cell.RichText; richText.Text = paragraph.Text; int startIndex = 0; foreach (DocumentObject documentObject in paragraph.ChildObjects) { if (documentObject is TextRange) { TextRange textRange = documentObject as TextRange; string fontName = textRange.CharacterFormat.FontName; bool isBold = textRange.CharacterFormat.Bold; Color textColor = textRange.CharacterFormat.TextColor; float fontSize = textRange.CharacterFormat.FontSize; string textRangeText = textRange.Text; int strLength = textRangeText.Length; ExcelFont font = cell.Worksheet.Workbook.CreateFont(); font.Color = textColor; font.IsBold = isBold; font.Size = fontSize; font.FontName = fontName; int endIndex = startIndex + strLength; richText.SetFont(startIndex, endIndex, font); startIndex += strLength; } if (documentObject is DocPicture) { DocPicture picture = documentObject as DocPicture; cell.Worksheet.Pictures.Add(cell.Row, cell.Column, picture.Image); cell.Worksheet.SetRowHeightInPixels(cell.Row, 1, picture.Image.Height); } } switch (paragraph.Format.HorizontalAlignment) { case HorizontalAlignment.Left: cell.Style.HorizontalAlignment = HorizontalAlignType.Left; break; case HorizontalAlignment.Center: cell.Style.HorizontalAlignment = HorizontalAlignType.Center; break; case HorizontalAlignment.Right: cell.Style.HorizontalAlignment = HorizontalAlignType.Right; break; } } } }
Solicitar una Licencia Temporal
Si desea eliminar el mensaje de evaluación de los documentos generados o deshacerse de las limitaciones de la función, por favor solicitar una licencia de prueba de 30 días para ti.