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