C#/VB.NET: Converti Word in Excel

2023-07-21 02:16:24

Installato tramite NuGet

PM> Install-Package Spire.Office

Link correlati

Word ed Excel sono due tipi di file completamente diversi. I documenti Word vengono utilizzati per scrivere saggi, lettere o creare report, mentre i documenti Excel vengono utilizzati per salvare i dati in forma tabellare, creare grafici o eseguire calcoli matematici. Non è consigliabile convertire un documento Word complesso in un foglio di calcolo Excel perché Excel difficilmente può eseguire il rendering del contenuto in base al layout originale in Word.

Tuttavia, se il documento Word è composto principalmente da tabelle e si desidera analizzare i dati della tabella in Excel, è possibile utilizzare Spire.Office for .NET per convertire Word in Excel Mentre mantenendo una buona leggibilità.

Installa Spire.Office for .NET

Per cominciare, è necessario aggiungere i file DLL inclusi nel pacchetto Spire.Office for .NET come riferimenti nel progetto .NET. I file DLL possono essere scaricati da questo link o installato tramite NuGet.

PM> Install-Package Spire.Office

Converti Word in Excel in C# e VB.NET

Questo scenario utilizza effettivamente due librerie nel pacchetto Spire.Office. Sono Spire.Doc for .NET e Spire.XLS for .NET. Il primo viene utilizzato per leggere ed estrarre il contenuto da un documento Word e il secondo viene utilizzato per creare un documento Excel e scrivere dati nelle celle specifiche. Per semplificare la comprensione di questo esempio di codice, abbiamo creato i seguenti tre metodi personalizzati che preformano funzioni specifiche.

  • ExportTableInExcel(): esporta i dati da una tabella di Word alle celle di Excel specificate.
  • CopyContentInTable() - Copia il contenuto da una cella di tabella in Word a una cella di Excel.
  • CopyTextAndStyle() - Copia il testo con la formattazione da un paragrafo di Word a una cella di Excel.

I seguenti passaggi mostrano come esportare i dati da un intero documento di Word in un foglio di lavoro utilizzando Spire.Office for .NET.

  • Crea un oggetto Document per caricare un file Word.
  • Crea un oggetto Worbbook e aggiungi un foglio di lavoro denominato "WordToExcel".
  • Attraversa tutte le sezioni nel documento di Word, attraversa tutti gli oggetti documento in una determinata sezione e quindi determina se un oggetto documento è un paragrafo o una tabella.
  • Se l'oggetto documento è un paragrafo, scrivere il paragrafo in una cella specificata in Excel utilizzando il metodo CoypTextAndStyle().
  • Se l'oggetto documento è una tabella, esportare i dati della tabella dalle celle di Word alle celle di Excel utilizzando il metodo ExportTableInExcel().
  • Adatta automaticamente l'altezza della riga e la larghezza della colonna in Excel in modo che i dati all'interno di una cella non superino il limite della cella.
  • Salvare la cartella di lavoro in un file Excel utilizzando il metodo 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

Richiedi una licenza temporanea

Se desideri rimuovere il messaggio di valutazione dai documenti generati o eliminare le limitazioni delle funzioni, per favore richiedere una licenza di prova di 30 giorni per te.

Guarda anche