Категория

C#/VB.NET: преобразование Word в Excel

2023-07-21 02:21:51 zaki zou

Установлено через NuGet

PM> Install-Package Spire.Office

Ссылки по теме

Word и Excel — это два совершенно разных типа файлов. Документы Word используются для написания эссе, писем или создания отчетов, а документы Excel используются для сохранения данных в табличной форме, построения диаграмм или выполнения математических расчетов. Не рекомендуется преобразовывать сложный документ Word в электронную таблицу Excel, поскольку Excel едва ли может отображать содержимое в соответствии с его исходным макетом в Word.

Однако если ваш документ Word в основном состоит из таблиц и вы хотите проанализировать табличные данные в Excel, вы можете использовать Spire.Office for .NET для конвертировать ворд в эксель пока сохранение хорошей читабельности.

Установите Spire.Office for .NET

Для начала вам необходимо добавить файлы DLL, включенные в пакет Spire.Office for .NET, в качестве ссылок в ваш проект .NET. Файлы DLL можно загрузить с эта ссылка или установлен через NuGet.

PM> Install-Package Spire.Office

Преобразование Word в Excel в C# и VB.NET

Этот сценарий фактически использует две библиотеки в пакете Spire.Office. Это Spire.Doc for .NET и Spire.XLS for .NET. Первый используется для чтения и извлечения содержимого из документа Word, а второй используется для создания документа Excel и записи данных в определенные ячейки. Чтобы упростить понимание этого примера кода, мы создали следующие три пользовательских метода, которые выполняют определенные функции.

  • ExportTableInExcel() - Экспорт данных из таблицы Word в указанные ячейки Excel.
  • CopyContentInTable() - копирование содержимого из ячейки таблицы Word в ячейку Excel.
  • CopyTextAndStyle() - копирование текста с форматированием из абзаца Word в ячейку Excel.

Следующие шаги демонстрируют, как экспортировать данные из всего документа Word на лист с помощью Spire.Office for .NET.

  • Создайте объект Document для загрузки файла Word.
  • Создайте объект Worbbook и добавьте в него рабочий лист с именем «WordToExcel».
  • Просмотрите все разделы в документе Word, просмотрите все объекты документа в определенном разделе, а затем определите, является ли объект документа абзацем или таблицей.
  • Если объект документа представляет собой абзац, напишите абзац в указанной ячейке Excel с помощью метода CoypTextAndStyle().
  • Если объект документа представляет собой таблицу, экспортируйте данные таблицы из Word в ячейки Excel с помощью метода ExportTableInExcel().
  • Автоматически подбирайте высоту строки и ширину столбца в Excel, чтобы данные в ячейке не превышали границу ячейки.
  • Сохраните книгу в файл Excel, используя метод 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

Подать заявку на временную лицензию

Если вы хотите удалить оценочное сообщение из сгенерированных документов или избавиться от функциональных ограничений, пожалуйста запросить 30-дневную пробную лицензию для себя.

Смотрите также