C#/VB.NET: Converter Word para Excel

2023-07-21 02:23:17

Instalado via NuGet

PM> Install-Package Spire.Office

Links Relacionados

Word e Excel são dois tipos de arquivo completamente diferentes. Os documentos do Word são usados para redigir ensaios, cartas ou criar relatórios, enquanto os documentos do Excel são usados para salvar dados em formato tabular, fazer gráficos ou realizar cálculos matemáticos. Não é recomendado converter um documento complexo do Word em uma planilha do Excel porque o Excel dificilmente pode renderizar o conteúdo de acordo com seu layout original no Word.

No entanto, se o seu documento do Word for composto principalmente de tabelas e você quiser analisar os dados da tabela no Excel, poderá usar o Spire.Office for .NET para converter Word para Excel enquanto mantendo uma boa legibilidade.

Instalar o Spire.Office for .NET

Para começar, você precisa adicionar os arquivos DLL incluídos no pacote Spire.Office for .NET como referências em seu projeto .NET. Os arquivos DLL podem ser baixados deste link ou instalado via NuGet.

PM> Install-Package Spire.Office

Converter Word para Excel em C# e VB.NET

Na verdade, esse cenário usa duas bibliotecas no pacote Spire.Office. Eles são Spire.Doc for .NET e Spire.XLS for .NET. O primeiro é usado para ler e extrair conteúdo de um documento do Word, e o segundo é usado para criar um documento do Excel e gravar dados nas células específicas. Para tornar este exemplo de código fácil de entender, criamos os três métodos personalizados a seguir que executam funções específicas.

  • ExportTableInExcel() - Exporta dados de uma tabela do Word para células especificadas do Excel.
  • CopyContentInTable() - CopyContentInTable() - Copia o conteúdo de uma célula de tabela no Word para uma célula do Excel.
  • CopyTextAndStyle() - CopyTextAndStyle() - Copia texto com formatação de um parágrafo do Word para uma célula do Excel.

As etapas a seguir demonstram como exportar dados de um documento inteiro do Word para uma planilha usando o Spire.Office for .NET.

  • Crie um objeto Documento para carregar um arquivo do Word.
  • Crie um objeto Worbbook e adicione uma planilha chamada "WordToExcel" a ele.
  • Percorra todas as seções no documento do Word, percorra todos os objetos de documento em uma determinada seção e determine se um objeto de documento é um parágrafo ou uma tabela.
  • Se o objeto do documento for um parágrafo, escreva o parágrafo em uma célula especificada no Excel usando o método CoypTextAndStyle().
  • Se o objeto do documento for uma tabela, exporte os dados da tabela de células do Word para Excel usando o método ExportTableInExcel().
  • Ajuste automaticamente a altura da linha e a largura da coluna no Excel para que os dados dentro de uma célula não excedam o limite da célula.
  • Salve a pasta de trabalho em um arquivo do Excel usando o 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 uma licença temporária

Se você deseja remover a mensagem de avaliação dos documentos gerados ou se livrar das limitações de função, por favor solicite uma licença de teste de 30 dias para você mesmo.

Veja também