C#/VB.NET: Word in Excel konvertieren

2023-07-21 02:20:41

Über NuGet installiert

PM> Install-Package Spire.Office

verwandte Links

Word und Excel sind zwei völlig unterschiedliche Dateitypen. Word-Dokumente werden zum Schreiben von Aufsätzen, Briefen oder zum Erstellen von Berichten verwendet, während Excel-Dokumente zum Speichern von Daten in tabellarischer Form, zum Erstellen von Diagrammen oder zum Durchführen mathematischer Berechnungen verwendet werden. Es wird nicht empfohlen, ein komplexes Word-Dokument in eine Excel-Tabelle zu konvertieren, da Excel den Inhalt kaum entsprechend seinem ursprünglichen Layout in Word darstellen kann.

Wenn Ihr Word-Dokument jedoch hauptsächlich aus Tabellen besteht und Sie die Tabellendaten in Excel analysieren möchten, können Sie dazu Spire.Office for .NET verwendenKonvertieren Sie Word in Excelwährend Aufrechterhaltung einer guten Lesbarkeit.

Installieren Sie Spire.Office for .NET

Zunächst müssen Sie die im Spire.Office for .NET-Paket enthaltenen DLL-Dateien als Referenzen in Ihrem .NET-Projekt hinzufügen. Die DLL-Dateien können entweder über diesen Link heruntergeladen oder über NuGet installiert werden.

PM> Install-Package Spire.Office

Konvertieren Sie Word in Excel in C# und VB.NET

In diesem Szenario werden tatsächlich zwei Bibliotheken im Spire.Office-Paket verwendet. Es handelt sich um Spire.Doc for .NET und Spire.XLS for .NET. Ersteres wird zum Lesen und Extrahieren von Inhalten aus einem Word-Dokument verwendet, und letzteres wird zum Erstellen eines Excel-Dokuments und zum Schreiben von Daten in die spezifischen Zellen verwendet. Um dieses Codebeispiel leichter verständlich zu machen, haben wir die folgenden drei benutzerdefinierten Methoden erstellt, die bestimmte Funktionen ausführen.

  • ExportTableInExcel() - Daten aus einer Word-Tabelle in bestimmte Excel-Zellen exportieren.
  • CopyContentInTable() - Kopieren Sie Inhalte aus einer Tabellenzelle in Word in eine Excel-Zelle.
  • CopyTextAndStyle() - Text mit Formatierung aus einem Word-Absatz in eine Excel-Zelle kopieren.

Die folgenden Schritte veranschaulichen, wie Sie mit Spire.Office for .NET Daten aus einem gesamten Word-Dokument in ein Arbeitsblatt exportieren.

  • Erstellen Sie ein Document-Objekt, um eine Word-Datei zu laden.
  • Erstellen Sie ein Worbbook-Objekt und fügen Sie ihm ein Arbeitsblatt mit dem Namen „WordToExcel“ hinzu.
  • Durchlaufen Sie alle Abschnitte im Word-Dokument, durchlaufen Sie alle Dokumentobjekte unter einem bestimmten Abschnitt und bestimmen Sie dann, ob es sich bei einem Dokumentobjekt um einen Absatz oder eine Tabelle handelt.
  • Wenn das Dokumentobjekt ein Absatz ist, schreiben Sie den Absatz mithilfe der CoypTextAndStyle()-Methode in eine bestimmte Zelle in Excel.
  • Wenn das Dokumentobjekt eine Tabelle ist, exportieren Sie die Tabellendaten mit der Methode ExportTableInExcel() aus Word- in Excel-Zellen.
  • Passen Sie die Zeilenhöhe und Spaltenbreite in Excel automatisch an, sodass die Daten in einer Zelle die Zellgrenze nicht überschreiten.
  • Speichern Sie die Arbeitsmappe mit der Methode Workbook.SaveToFile() in einer Excel-Datei.
  • 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

Beantragen Sie eine temporäre Lizenz

Wenn Sie die Bewertungsmeldung aus den generierten Dokumenten entfernen oder die Funktionseinschränkungen beseitigen möchten, wenden Sie sich bitte an uns Fordern Sie eine 30-Tage-Testlizenz an für sich selbst.

Siehe auch