C#/VB.NET: Convertir Word a Excel

2023-07-21 02:19:15

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;
                }
            }
        }
    }

C#/VB.NET: Convert Word to Excel

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.

Ver también