网站建设专业课程,帮开设赌场的网站做美工,响应式网站建设信息,高端定制app开发在企业办公和文档自动化场景中#xff0c;Word 和 Excel 是最常用的两种文档格式。Word 更适合撰写说明性文本和排版复杂的内容#xff0c;而 Excel 则擅长结构化数据处理、统计与分析。在实际开发中#xff0c;我们经常会遇到这样的需求#xff1a; 将 Word 文档中的内容Word 和 Excel 是最常用的两种文档格式。Word 更适合撰写说明性文本和排版复杂的内容而 Excel 则擅长结构化数据处理、统计与分析。在实际开发中我们经常会遇到这样的需求将 Word 文档中的内容包括段落、表格、样式甚至图片转换为 Excel 文件以便后续分析或存档。本文将介绍如何使用Spire.Doc for .NET和Spire.XLS for .NET通过 C# 实现一个较为完整的 Word 转 Excel 方案并尽可能保留原有的文本样式、表格结构和图片内容。实现思路概述Word 文档的内容结构相对复杂主要由以下几类对象组成段落Paragraph表格Table文本范围TextRange图片DocPicture而 Excel 的核心结构则是工作簿Workbook工作表Worksheet单元格CellRange富文本RichText因此转换的基本思路是读取 Word 文档遍历文档中的 Section按顺序处理段落和表格将段落内容写入 Excel 单元格将 Word 表格逐行、逐列映射到 Excel复制文本样式、对齐方式和图片。加载 Word 并创建 Excel 工作簿程序首先创建 Document 对象并加载 Word 文件然后创建一个 Workbook并清除默认工作表确保输出结果更加干净、可控。Document doc new Document(); doc.LoadFromFile(C:\Users\Administrator\Desktop\Invoice.docx); Workbook wb new Workbook(); wb.Worksheets.Clear(); Worksheet worksheet wb.CreateEmptySheet(WordToExcel);通过这种方式我们可以确保 Word 的内容被统一写入到一个指定的工作表中。遍历 Word 文档内容Word 文档可能包含多个 Section每个 Section 中又包含段落和表格。代码通过双层循环依次读取这些对象如果是段落Paragraph直接写入 Excel 的单个单元格如果是表格Table则调用专门的方法导出为多行多列。foreach (Section section in doc.Sections) { foreach (DocumentObject documentObject in section.Body.ChildObjects) { if (documentObject is Paragraph) { // 写入段落 } if (documentObject is Table) { // 导出表格 } } }这样可以最大程度保持 Word 中原有内容的顺序。导出 Word 表格到 Excel对于 Word 表格程序逐行遍历 TableRow再逐列遍历 TableCell并将内容写入 Excel 对应的单元格中。同时为了让 Excel 看起来更清晰还为每个单元格添加了边框cell.BorderAround(LineStyleType.Thin, Color.Black);表格中的文本、换行符以及样式都会被完整复制确保数据的可读性。复制文本样式与图片这是整个转换过程中的核心部分。程序通过 RichText 对象将 Word 中不同 TextRange 的字体名称、字号、颜色、加粗状态逐一映射到 Excel字体名称FontName字号FontSize是否加粗Bold字体颜色TextColor同时如果在段落中检测到图片DocPicture会直接将图片插入到 Excel 对应的单元格位置并根据图片高度自动调整行高从而避免图片被遮挡。对齐方式与格式优化为了进一步提升转换质量代码还处理了段落的对齐方式将 Word 中的左对齐、居中、右对齐映射到 Excel 单元格样式中。此外在所有内容写入完成后还统一执行了以下操作自动调整行高和列宽启用单元格自动换行这一步能显著提升生成 Excel 文件的整体可读性。保存为 Excel 文件最后将生成的工作簿保存为 Excel 2013 格式文件wb.SaveToFile(WordToExcel.xlsx, ExcelVersion.Version2013);至此一个包含段落、表格、样式和图片的 Excel 文件就成功生成了。完整示例代码C# 将 Word 转换为 Excelusing 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) { // 创建 Document 对象 Document doc new Document(); // 加载 Word 文档 doc.LoadFromFile(C:\Users\Administrator\Desktop\Invoice.docx); // 创建 Workbook 对象 Workbook wb new Workbook(); // 移除默认工作表 wb.Worksheets.Clear(); // 创建一个名为“WordToExcel”的工作表 Worksheet worksheet wb.CreateEmptySheet(WordToExcel); int row 1; int column 1; // 遍历 Word 文档中的所有 Section foreach (Section section in doc.Sections) { // 遍历 Section 中的所有文档对象 foreach (DocumentObject documentObject in section.Body.ChildObjects) { // 如果对象是段落 if (documentObject is Paragraph) { CellRange cell worksheet.Range[row, column]; Paragraph paragraph documentObject as Paragraph; // 将段落内容及样式复制到 Excel 单元格 CopyTextAndStyle(cell, paragraph); row; } // 如果对象是表格 if (documentObject is Table) { Table table documentObject as Table; // 将 Word 表格导出到 Excel int currentRow ExportTableInExcel(worksheet, row, table); row currentRow; } } } // 自动调整行高和列宽 worksheet.AllocatedRange.AutoFitRows(); worksheet.AllocatedRange.AutoFitColumns(); // 设置单元格自动换行 worksheet.AllocatedRange.IsWrapText true; // 保存为 Excel 文件 wb.SaveToFile(WordToExcel.xlsx, ExcelVersion.Version2013); } /// summary /// 将 Word 表格数据导出到 Excel /// /summary 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]; // 为 Excel 单元格添加边框 cell.BorderAround(LineStyleType.Thin, Color.Black); // 复制 Word 表格单元格内容到 Excel CopyContentInTable(tbCell, cell); column; } row; } return row; } /// summary /// 将 Word 表格单元格中的内容复制到 Excel 单元格 /// /summary private static void CopyContentInTable(TableCell tbCell, CellRange cell) { // 创建一个新的段落对象 Paragraph newPara new Paragraph(tbCell.Document); // 遍历 Word 表格单元格中的所有子对象 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); } } } // 将合并后的段落内容复制到 Excel CopyTextAndStyle(cell, newPara); } /// summary /// 复制段落的文本内容和样式到 Excel 单元格 /// /summary 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; // 获取 Word 文本样式 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; // 创建 Excel 字体 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; // 将图片插入到 Excel 单元格 cell.Worksheet.Pictures.Add(cell.Row, cell.Column, picture.Image); // 根据图片高度调整行高 cell.Worksheet.SetRowHeightInPixels(cell.Row, 1, picture.Image.Height); } } // 设置 Excel 单元格的水平对齐方式 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; } } } }总结通过本文示例可以看出借助Spire.Doc for .NET与Spire.XLS for .NET我们可以使用 C# 高效地实现 Word 到 Excel 的转换并且在转换过程中保留文本内容与顺序还原字体样式和对齐方式完整导出表格结构支持图片复制这种方案非常适合用于发票转换、报表整理、文档数据结构化处理等场景。如果你正在开发文档自动化或企业级办公系统这种 Word 转 Excel 的实现方式将具有很高的实用价值。