Оглавление
Установлено через 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;
}
}
}
}

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