
在 C# 中将 DataTable 导出为 Excel 文件,是 .NET 开发中常见的任务,广泛应用于报表生成、日志导出、系统间数据共享等场景。通过使用独立的组件库,开发者可以轻松将 DataTable 数据写入 Excel 文件,并应用格式设置,生成专业、可直接使用的文档,无需复杂配置或依赖第三方办公软件。
本文将介绍如何使用 Spire.XLS for .NET 将 DataTable 导出为 Excel(.xlsx/.xls)文件,包含数据创建、导出保存、格式设置等实用步骤。
文章目录:
开始之前,请确保你的项目中已添加 Spire.XLS for .NET。
通过 NuGet 安装 Spire.XLS:
Install-Package Spire.XLS
Spire.XLS 支持 .NET Framework、.NET Core、.NET 6/7+ 以及 ASP.NET 项目,且无需安装 Microsoft Office。
下面的步骤将演示如何使用 Spire.XLS 将 DataTable 导出为 Excel 文件,包含数据准备、文件保存、网页流导出以及格式设置等内容。
先创建一个包含多列的 DataTable:
// 创建数据表
DataTable dt = new DataTable("员工信息");
// 添加列
dt.Columns.Add("员工编号", typeof(int));
dt.Columns.Add("姓名", typeof(string));
dt.Columns.Add("部门", typeof(string));
dt.Columns.Add("入职日期", typeof(DateTime));
dt.Columns.Add("工资", typeof(double));
dt.Columns.Add("是否全职", typeof(bool));
dt.Columns.Add("奖金系数", typeof(decimal));
// 添加数据行
dt.Rows.Add(1001, "张伟", "人事部", new DateTime(2021, 5, 10), 55000.5, true, 0.05m);
dt.Rows.Add(1002, "李娜", "技术部", new DateTime(2020, 11, 23), 72000.0, false, 0.03m);
dt.Rows.Add(1003, "王强", "财务部", new DateTime(2019, 8, 15), 63000.75, true, 0.07m);
dt.Rows.Add(1004, "赵敏", "市场部", new DateTime(2022, 3, 8), 48800.0, true, 0.06m);
此处为演示用示例数据,实际使用中可绑定任意业务生成的 DataTable。
将 DataTable 导入到工作表中,并保存为 Excel 文件:
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
Worksheet sheet = workbook.Worksheets.Add(dt.TableName);
// 从 A1 单元格开始插入数据表
sheet.InsertDataTable(dt, true, 1, 1);
// 保存为 .xlsx 文件(推荐)
workbook.SaveToFile("员工信息.xlsx", FileFormat.Version2016);
// 保存为 .xls 文件(旧格式)
workbook.SaveToFile("员工信息.xls", FileFormat.Version97to2003);
说明:
导出效果示意图:

在 Web 项目中,通常需要将 Excel 文件直接以下载流的方式返回:
MemoryStream stream = new MemoryStream();
workbook.SaveToStream(stream, FileFormat.Version2013);
stream.Position = 0;
将此 MemoryStream 返回到 ASP.NET 控制器中,即可触发浏览器下载。
更多 Excel 文件操作技巧可参考:如何在 C# 中创建与操作 Excel 文件
若希望导出的 Excel 文件更具可读性和专业感,可以对内容进行格式化:
// 设置表头样式
CellRange header = sheet.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.FontName = "微软雅黑";
header.Style.Font.Size = 13;
header.Style.Color = Color.LightGray;
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thick;
// 设置数据行样式
for (int i = 1; i < sheet.Rows.Length; i++)
{
CellRange dataRow = sheet.Rows[i];
dataRow.Style.Font.FontName = "黑体";
dataRow.Style.Font.Size = 11;
dataRow.BorderInside();
}
// 设置日期列的显示格式
CellRange dateColumn = sheet.Range[2, 4, sheet.Rows.Length + 1, 4];
dateColumn.Style.NumberFormat = "yyyy-mm-dd";
// 自动调整列宽
sheet.AllocatedRange.AutoFitColumns();
关键方法说明:
格式化效果示意图:

更多数字格式设置技巧请参阅:在 C# 中设置 Excel 单元格数字格式
| 问题描述 | 解决方法 |
|---|---|
| 文件无法打开或提示损坏 | 检查是否正确关闭流,且文件后缀与格式匹配 |
| 特殊字符或中文乱码 | 确保字符串为 UTF-8 编码,字体设置支持目标语言 |
| 列宽过窄导致显示不全 | 使用 AutoFitColumns() 自动调整,或手动设置 ColumnWidth |
借助 Spire.XLS,开发者可轻松地将 C# 中的 DataTable 导出为 Excel 文件,支持 .xls 和 .xlsx 两种格式,且无需依赖 Office 环境。无论是桌面应用还是 Web 系统,该方法都能快速生成格式良好的 Excel 报表。
如需评估完整版功能,可申请免费临时授权。
使用 sheet.InsertDataTable() 将 DataTable 写入工作表,然后调用 workbook.SaveToFile() 保存文件。
有,Free Spire.XLS for .NET 是一个独立库,可在无需安装 Office 的前提下创建与导出 Excel 文件。
可以,在 ASP.NET 控制器中生成工作簿,并以流的方式返回,实现下载功能。
.xlsx 是较新的格式,兼容 Excel 2007 及更高版本;.xls 为旧版格式(Excel 97-2003),行数限制为 65536 行。
光学字符识别(OCR)已成为现代软件开发中不可或缺的关键技术,它能让计算机将图像、扫描文档等各类文件转换为可编辑、可搜索的文本形式。在 Java 开发领域,集成 OCR 功能可实现强大的文档处理、高效的数据提取及便捷的辅助功能。本文章将详细介绍如何借助 Spire.OCR for Java 库在 Java 环境中实现 OCR 功能,充分利用其高级特性从图像中提取文本,包括带位置坐标和不带位置坐标两种示例。
目录:
OCR 技术的核心是将图像文本转化为机器可识别的格式。对 Java 开发者而言,其价值体现在:
而 Spire.OCR for Java 凭借以下优势成为优选:
步骤 1:将 Spire.OCR 添加到项目中
在 pom.xml 中添加以下内容:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.ocr</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
或者,您可以下载 Spire.OCR for Java 库,然后将其添加到 Java 项目中。
2. 下载 OCR 模型
Spire.OCR for Java 依赖预训练模型来提取图像文本。根据操作系统下载对应的 OCR 模型文件:
下载后,将文件解压缩到指定目录(例如,F:\win-x64)
以下是一个基本的文本提取示例,即从图像中读取文本并将其保存到 .txt 文件。
适用场景:
读取图片中文本的 Java 代码:
import com.spire.ocr.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class ocrJava {
public static void main(String[] args) throws Exception {
// 创建 OcrScanner 类的实例
OcrScanner scanner = new OcrScanner();
// 创建 ConfigureOptions 类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置 OCR 模型的路径
configureOptions.setModelPath("F:\\win-x64");
// 设置文本识别的语言
configureOptions.setLanguage("Chinese");
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 从图像中提取文本
scanner.scan("示例.png");
String text = scanner.getText().toString();
// 将提取的文本保存到文本文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("OCR结果.txt"))) {
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
}
核心流程解析:
初始化组件:创建 OcrScanner 实例处理 OCR 操作,ConfigureOptions 管理配置
配置参数:
setModelPath():指定 OCR 模型文件的位置
setLanguage():设置识别语言(支持英文、法语等)
处理图像:scan() 方法对目标图像执行 OCR 识别
导出文本:getText() 方法获取提取到的文本
输出:

在处理发票、表单等结构化文档时,文本的位置信息至关重要。Spire.OCR for Java 支持提取文本块的边界框坐标,满足精准定位需求。
适用场景:
提取带坐标文本的 Java 代码:
import com.spire.ocr.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class ExtractWithCoordinates {
public static void main(String[] args) throws Exception {
// 创建 OcrScanner 类的实例
OcrScanner scanner = new OcrScanner();
// 创建 ConfigureOptions 类的实例
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置 OCR 模型的路径
configureOptions.setModelPath("F:\\win-x64");
// 设置文本识别的语言
configureOptions.setLanguage("Chinses");
// 将配置选项应用于扫描器
scanner.ConfigureDependencies(configureOptions);
// 从图像中提取文本
scanner.scan("报价单.png");
IOCRText text = scanner.getText();
// 创建一个列表来存储信息
List<String> results = new ArrayList<>();
// 遍历检测到的每个文本块
for (IOCRTextBlock block : text.getBlocks()) {
// 将提取的文本和坐标添加到列表中
results.add("文本: " + block.getText());
results.add("坐标: " + block.getBox());
results.add("---------");
}
// 保存到文本文件
try {
Files.write(Paths.get("提取文本与坐标.txt"), results);
} catch (IOException e) {
e.printStackTrace();
}
}
}
功能亮点:
文本和坐标提取:
高效文件写入:
输出结果:

处理倾斜或旋转的图片时,启用 SetAutoRotate() 方法可自动将图像旋转到正确的位置:
ConfigureOptions configureOptions = new ConfigureOptions();
configureOptions.SetAutoRotate(true); // 自动校正图像角度
如果需要保留图片中的原始视觉布局(例如表格、多列排版等),初始化 VisualTextAligner 类来保持文本格式:
// 对齐识别文本,还原原始布局
VisualTextAligner visualTextAligner = new VisualTextAligner(scanner.getText());
String scannedText = visualTextAligner.toString();
答:Spire.OCR for Java 支持所有常见格式:
答:支持多种语言:
答:要提高准确性:
答:此任务需要结合 Spire.PDF for Java 实现,先将 PDF 转换为图片或从扫描的 PDF 中提取图片,然后使用上述 Java 示例从图片中获取文本。
Spire.OCR for Java 为开发者提供了便捷的图片文本提取方案,从基础的文本识别到带坐标的精准提取,再到自动旋转、布局保留等高级功能,能满足多样化的 OCR 需求。通过本文的指导,你可快速将 OCR 功能集成到项目中,实现文档自动化处理、数据提取等实用功能,提升应用的竞争力。无论是处理日常办公文档,还是开发专业的文字识别系统,Spire.OCR for Java 都能助你高效实现图片到文本的转化。
点击申请 30 天的试用许可证,即可无限制地使用 Java 进行 OCR 处理。
Spire.Office 10.7.0 更新已发布。在该版本中,Spire.Doc 新增支持多项新功能,如加载 EPUB 文件进行处理和创建组合图表;Spire.PDF 支持提取 PDF 自定义数据,同时增强了 PDF 到 Excel 的转换效果;Spire.XLS 和 Spire.Presentation 支持加载 Markdown 格式文档。此外,大量已知问题在该版本中成功修复。详情请阅读以下内容。
该版本涵盖了最新版的Spire.Doc、Spire.PDF、Spire.XLS、Spire.Presentation、Spire.DataExport、Spire.Barcode、Spire.DocViewer、Spire.PDFViewer、Spire.OfficeViewer、Spire.Email。
https://www.e-iceblue.cn/Downloads/Spire-Office-NET.html
新功能:
Document doc = new Document();
doc.LoadFromFile("in.epub", Spire.Doc.FileFormat.EPub);
doc.SaveToFile(@"out.docx", Spire.Doc.FileFormat.Docx);
doc.SaveToFile(@"out.pdf", Spire.Doc.FileFormat.PDF);
Document doc = new Document();
doc.LoadFromFile("https://cdn.e-iceblue.cn/in.docx");
ToPdfParameterList list = new ToPdfParameterList();
list.PdfConformanceLevel = PdfConformanceLevel.Pdf_UA1;
doc.SaveToFile(@"out.pdf", list);
Document doc = new Document();
Paragraph paragraph = doc.AddSection().AddParagraph();
Chart chart = paragraph.AppendChart(ChartType.Column, 450, 300).Chart;
//Modify 'Series 3' to a line chart and display it on the secondary axis
chart.ChangeSeriesType("Series 3", ChartSeriesType.Line, true);
Console.WriteLine(chart.Series[2].ChartType);
doc.SaveToFile("ComboChart.docx");
Document document = new Document();
//Set default replacement font
doc.DefaultSubstitutionFontName = "Arial";
Section sec = doc.AddSection();
Paragraph para = sec.AddParagraph();
TextRange tr = para.AppendText("test");
//The system does not have this font
tr.CharacterFormat.FontName = "Helvetica";
doc.SaveToFile(outputFile, FileFormat.PDF);
// Process inline structure tags
List tagInlines = structureTags.getM_tagInlines();
for (int i = 0; i < tagInlines.Count; i++)
{
tagInlines[i].RemoveSelfOnly();
}
// Process other structure tags
List tags = structureTags.getM_tags();
for (int i = 0; i < tags.Count; i++)
{
tags[i].RemoveSelfOnly();
}
// Process StructureDocumentTagRow
List rowtags = structureTags.getM_rowtags();
for (int i = 0; i < rowtags.Count; i++)
{
rowtags[i].RemoveSelfOnly();
}
// Process StructureDocumentTagCell
List celltags = structureTags.getM_celltags();
for (int i = 0; i < celltags.Count; i++)
{
celltags[i].RemoveSelfOnly();
Document document = new Document();
document.LoadFromFile(@"Sample.docx");
ToPdfParameterList para = new ToPdfParameterList();
para.PdfImageCompression = Spire.Doc.Export.PdfImageCompression.Jpeg;
document.SaveToFile(outputFile,para);
Document document = new Document();
Section section = doc.AddSection();
foreach (string ommlCode in OmmlCodes)
{
OfficeMath officeMath = new OfficeMath(doc);
officeMath.CharacterFormat.FontSize = 14f;
officeMath.FromOMMLCode(ommlCode);
section.AddParagraph().ChildObjects.Add(officeMath);
}
doc.SaveToFile(outputFile, FileFormat.Docx2013);
doc.Dispose();
Document document = new Document();
doc.LoadFromFile(inputFile);
StringBuilder stringBuilder = new StringBuilder();
// Iterate through sections in the document
foreach (Section section in doc.Sections)
{
// Iterate through paragraphs in each section
foreach (Paragraph par in section.Body.Paragraphs)
{
// Iterate through child objects in each paragraph
foreach (DocumentObject obj in par.ChildObjects)
{
// Check if the object is an OfficeMath equation
OfficeMath omath = obj as OfficeMath;
if (omath == null) continue;
// Convert OfficeMath equation to LaTex code
string mathml = omath.ToLaTexMathCode();
// Append MathML code to the StringBuilder
stringBuilder.Append("LaTeX code" + mathml);
stringBuilder.Append("\r\n");
}
}
}
// Write the LaTex code to a text file
File.WriteAllText(outputFile, stringBuilder.ToString())
问题修复:
新功能:
PdfDocument doc = new PdfDocument(inputFile);
PdfApplicationData appplicationDataObject = doc.GetCustomApplicationData();
Dictionary
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("https://cdn.e-iceblue.cn/in.pdf");
XlsxLineLayoutOptions options = new XlsxLineLayoutOptions(false, false, false, true);
options.TextRecognizer = new TextRecognizer();
doc.ConvertOptions.SetPdfToXlsxOptions(options);
doc.SaveToFile("out.xlsx", Spire.Pdf.FileFormat.XLSX);
// niget install PaddleOCRSharp lib
using PaddleOCRSharp;
using Spire.Pdf.Conversion;
public class TextRecognizer : ITextRecognizer
{
private static readonly PaddleOCREngine _engine;
static TextRecognizer()
{ _engine = new PaddleOCREngine(null, “”); }
public string RecognizeGlyph(Stream glyphImageStream)
{
var image = new System.Drawing.Bitmap(glyphImageStream);
// paint glyph in image center
var fixImage = new System.Drawing.Bitmap(160, 240);
using (Graphics g = Graphics.FromImage(fixImage))
{ g.DrawImage(image, new RectangleF(20, 20, fixImage.Width - 40, fixImage.Height - 40), new RectangleF(0, 0, image.Width, image.Height), GraphicsUnit.Pixel); }
var unicodeResult = _engine.DetectText(fixImage).Text;
return unicodeResult;
}
}
问题修复:
新功能:
Workbook wb = new Workbook();
wb.LoadFromMarkdown("test.md");
wb.SaveToFile("out.pdf", FileFormat.PDF);
wb.SaveToFile("out.xlsx", ExcelVersion.Version2010);
问题修复:
新功能:
Presentation pt = new Presentation();
pt.LoadFromFile(inputFilePath, FileFormat.Markdown);
pt.SaveToFile(outputFile, FileFormat.Pptx2013);
问题修复:

Markdown 是一种设计简洁、易于书写和阅读的轻量级标记语言,使用纯文本语法即可实现内容格式化。凭借其良好的可读性和跨平台兼容性,Markdown 被广泛应用于技术文档撰写、博客发布、协作文稿等多个场景,深受开发者和内容创作者的喜爱。
然而,Markdown 文件(.md)在正式发布或用于数据分析、报表制作时,常常需要转换为更具通用性和易读性的格式,如 PDF 和 Excel。这不仅有助于更好地展示内容,还方便内容的归档、打印和二次编辑。
本教程将系统讲解如何利用 C# 语言结合 Spire.XLS for .NET 库,实现 Markdown 文件向 PDF 和 Excel 格式的高效转换。
将 Markdown 文件转换为 PDF 和 Excel 格式,能够有效提升文档的展示效果和应用价值,具体原因包括:
综上所述,Markdown 转换为 PDF 和 Excel 不仅满足了格式美观与数据处理的双重需求,还大幅提升了文档的实用性和传播效果,适应了不同场景下的多样化应用。
在开始将 Markdown 文件转换为 PDF 或 Excel 之前,请确保您的开发环境已完成以下配置:
在项目中打开 NuGet 包管理器控制台,执行以下命令通过 NuGet 安装 Spire.XLS:
Install-Package Spire.XLS
安装完成后,即可使用组件提供的 API 实现 Markdown 的读取与格式转换功能。
要在 C# 中将 Markdown 文件转换为 PDF,请按照以下步骤操作:
创建 Workbook 实例并加载 .md 文件:
Workbook workbook = new Workbook();
workbook.LoadFromMarkdown("测试.md");
该方法会自动将 Markdown 文件中的文本、标题、表格等元素解析为 Spire.XLS 支持的工作簿结构,便于后续操作。
为获得更理想的输出效果,可配置转换参数。例如,启用整页适配功能,使内容在 PDF 中自动适应页面宽度:
workbook.ConverterSetting.SheetFitToPage = true;
这有助于避免内容换页不当或显示不完整的问题,提升排版效果。
调用 SaveToFile 方法,将工作簿保存为 PDF 格式:
workbook.SaveToFile("输出.pdf", FileFormat.PDF);
生成的 PDF 文件将保留 Markdown 的基本格式和内容结构,适合用于阅读、打印或分发。

在将 Markdown 内容加载到工作簿后,可将其导出为 Excel 文件。例如:
workbook.SaveToFile("输出.xls", ExcelVersion.Version97to2003);
workbook.SaveToFile("输出.xlsx", ExcelVersion.Version2016);
您可根据目标平台的兼容性需求,选择合适的 Excel 版本进行导出。生成的 Excel 文件将保留 Markdown 中的表格和结构化数据,便于后续的数据处理与分析。

以下是一个完整的示例代码,展示如何使用 C# 和 Spire.XLS 在一个项目中同时将 Markdown 文件转换为 PDF 和 Excel 格式:
using Spire.Xls;
namespace MarkdownToPdfAndExcel
{
internal class Program
{
static void Main(string[] args)
{
// 初始化工作簿
Workbook workbook = new Workbook();
// 加载 Markdown 文件内容
workbook.LoadFromMarkdown("测试.md");
// 设置整页适配(可选)
workbook.ConverterSetting.SheetFitToPage = true;
// 导出为 PDF
workbook.SaveToFile("输出.pdf", FileFormat.PDF);
// 导出为 xls(Excel 97-2003 格式)
workbook.SaveToFile("输出.xls", ExcelVersion.Version97to2003);
// 导出为 xlsx(Excel 2016 格式)
workbook.SaveToFile("输出.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
}
}
}
在使用 C# 和 Spire.XLS 将 Markdown 文件转换为 PDF 和 Excel 格式时,掌握以下技巧可以显著提升转换效果与效率:
通过 C# 结合 Spire.XLS 库将 Markdown 转换为 PDF 和 Excel,不仅简化了文档格式统一与内容分发的流程,还显著提升了数据处理和信息展示的灵活性。PDF 格式适用于正式发布与归档,Excel 格式则便于进一步分析与计算,两者兼顾实用性与可扩展性。
该方案无需依赖 Office 环境,代码实现简洁,适用于技术写作、报表生成、内容管理系统集成等多种应用场景,是构建自动化文档处理流程的理想选择。
Q1:可以批量转换多个 Markdown 文件吗?
A1:可以。您可以通过遍历文件夹中的多个 Markdown 文件,依次加载并将其导出为 PDF 或 Excel,实现批量转换处理。
Q2:使用 Spire.XLS 是否需要安装 Microsoft Office?
A2:不需要。Spire.XLS 是一个独立的 .NET 类库,完全无需依赖 Microsoft Office 或 Excel,即可实现文档加载、编辑和导出功能。
Q3:Spire.XLS 是免费的吗?
A3:Spire.XLS 提供免费版本,适用于轻量级开发与功能测试。但如需使用完整功能(如更多文档页数、商业用途支持等),建议使用商业版本。
如需完整体验 Spire.XLS for .NET 的全部功能而不受评估限制,可该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。 30 天免费试用许可证。

在现代办公场景中,Word文档已成为信息存储与交流的重要载体,承载着关键的业务数据、结构化表格、可视化图表以及协作批注等重要内容。面对日益增长的文档处理需求,传统的人工操作方式已难以满足效率与准确性的双重标准。采用Python实现Word文档内容的自动化解析,不仅能显著提升处理效率、降低人为错误率,还能实现数据集成、内容迁移及智能分析等多种应用。
本文将详细介绍如何使用 Spire.Doc for Python 库在 Python 中读取 Word 文档(包括 .doc 和 .docx 格式),并演示如何提取文本、图片、表格、批注、列表以及文档的元数据等信息。无论您是进行文档内容抓取、自动化报告生成,还是开发文档解析工具,本教程都将提供清晰的代码示例和实用指导。
Python 作为一门灵活且功能强大的编程语言,广泛应用于自动化、数据处理及内容分析等领域。使用 Python 读取 Word 文档,可以实现以下重要应用:
要在 Python 中读取 Word 文档,首先需要安装支持 .doc 和 .docx 格式的解析库。Spire.Doc for Python 是一款功能完善且独立于 Microsoft Office 的第三方库,支持提取文本、图片、表格、批注、列表及元数据等多种内容。
通过以下命令即可安装 Spire.Doc:
pip install Spire.Doc
安装完成后,即可在 Python 代码中导入并使用 Spire.Doc 进行 Word 文档的读取和处理。
提取文本是解析 Word 文档的基础需求。根据不同场景,你可能需要获取整篇文档的全部文本,或仅针对特定节、段落进行读取。
在文档管理系统中,提取全文文本有助于建立搜索索引,使用户能够通过关键词快速定位文档内容,从而提升查询效率和使用体验。
Spire.Doc 提供了 Document.GetText() 方法,可一次性提取 Word 文档中的所有文字信息,涵盖正文、表格及列表等内容。
以下示例展示了如何加载 Word 文档,获取全文文本,并将其保存为独立的文本文件,便于后续处理与分析:
from spire.doc import *
# 创建Document对象
doc = Document()
# 加载Word文档
doc.LoadFromFile("示例.docx")
# 获取文档所有文本
text = doc.GetText()
# 保存获取的文本为TXT文件
with open("output/提取文本.txt", "w", encoding="utf-8") as file:
file.write(text)
document.Close()

在许多结构化文档(如报告、合同或说明书)中,内容通常被划分为多个节或段落。若只需提取文档中某一部分的文本信息,可以直接访问指定节,并逐段读取内容,实现更具针对性的处理。
以下示例展示了如何访问 Word 文档中的指定节,并提取其中所有段落的文本内容:
from spire.doc import *
# 加载 .docx 或 .doc 文件
document = Document()
document.LoadFromFile("示例.docx")
# 访问指定节
section = document.Sections[0]
# 获取该节段落文本
with open("output/节文本.txt", "w", encoding="utf-8") as file:
for paragraph in section.Paragraphs:
file.write(paragraph.Text + "\n")
document.Close()
除了纯文本,Word 文档中还可能包含图片、表格、批注、列表及元数据等多种元素。Spire.Doc 提供丰富且便捷的接口,帮助开发者高效地提取这些内容,实现对文档结构和数据的全面访问。
Word 文档中常包含图片元素,例如公司 Logo、插图、图表等。若需提取这些图片以便进行分析、存档或再利用,可通过遍历文档结构并识别图片对象(DocPicture)来实现。
以下是提取 Word 文档中所有图片并将其保存为本地文件的完整示例:
import queue
from spire.doc import *
# 创建Document对象
doc = Document()
# 加载Word文件
doc.LoadFromFile("示例.docx")
# 创建队列对象
nodes = queue.Queue()
nodes.put(doc)
# 创建列表
images = []
while nodes.qsize() > 0:
node = nodes.get()
# 遍历文档中的子对象
for i in range(node.ChildObjects.Count):
child = node.ChildObjects.get_Item(i)
# 判断子对象是否为图片
if child.DocumentObjectType == DocumentObjectType.Picture:
picture = child if isinstance(child, DocPicture) else None
dataBytes = picture.ImageBytes
# 将图片数据添加到列表中
images.append(dataBytes)
elif isinstance(child, ICompositeObject):
nodes.put(child if isinstance(child, ICompositeObject) else None)
# 遍历列表中的图片
for i, item in enumerate(images):
fileName = "图片-{}.png".format(i)
with open("output/Images/"+fileName,'wb') as imageFile:
# 将图片写入指定路径
imageFile.write(item)
doc.Close()

在 Word 文档中,表格常用于组织结构化数据,如报表或物品清单。使用 Spire.Doc,开发者可以遍历文档中的所有表格,访问表格中的每个单元格,并提取单元格的内容。
以下代码展示了如何提取Word文档中所有表格的数据,并将结果保存为文本文件:
from spire.doc import *
import os
# 加载 Word 文档
document = Document()
document.LoadFromFile("示例.docx")
# 指定输出文件夹存在
output_dir = "output/Tables"
os.makedirs(output_dir, exist_ok=True)
# 遍历所有节并提取表格数据
for s in range(document.Sections.Count):
section = document.Sections[s]
tables = section.Tables
for i in range(tables.Count):
table = tables[i]
table_data = ""
for j in range(table.Rows.Count):
row = table.Rows[j]
for k in range(row.Cells.Count):
cell = row.Cells[k]
cell_text = ""
for p in range(cell.Paragraphs.Count):
para_text = cell.Paragraphs[p].Text
cell_text += para_text + " "
table_data += cell_text.strip()
if k < row.Cells.Count - 1:
table_data += "\t"
table_data += "\n"
# 将提取的表格数据写入文本文件
output_path = os.path.join(output_dir, f"Word表格_{s+1}_{i+1}.txt")
with open(output_path, "w", encoding="utf-8") as output_file:
output_file.write(table_data)
document.Close()
Word 文档中的项目列表(如编号列表和项目符号列表)常用于展示条款、步骤或要点等结构化内容。借助 Spire.Doc,开发者可以轻松识别并提取文档中的列表。
以下代码示例展示了如何加载 Word 文件,查找所有列表项,并将项目编号(如数字或符号)和其对应的文本内容写入本地文本文件:
from spire.doc import *
# 加载 Word 文档
document = Document()
document.LoadFromFile("示例.docx")
# 创建文本文件,用于存放列表内容
with open("output/列表内容.txt", "w", encoding="utf-8") as output_file:
# 遍历文档中的节
for s in range(document.Sections.Count):
section = document.Sections[s]
# 遍历节中的段落
for p in range(section.Paragraphs.Count):
paragraph = section.Paragraphs[p]
# 找到列表,提取其内容并保存至文本文件
if paragraph.ListFormat.ListType != ListType.NoList:
output_file.write(paragraph.ListText + paragraph.Text + "\n")
document.Close()
Word 支持添加批注,用于提供修改建议或评论。通过访问 Comments 集合,可以获取文档中所有批注的信息,包括批注作者和具体内容,便于实现审阅流程的自动化管理。
以下代码展示了如何提取所有批注,包括批注作者与内容,并保存到文本文件中:
from spire.doc import *
# 加载 Word 文档
document = Document()
document.LoadFromFile("示例.docx")
# 创建文本文件,用于存放批注内容
with open("output/批注内容.txt", "w", encoding="utf-8") as output_file:
# 遍历文档中的所有批注,获取每个批注的作者和内容
for i in range(document.Comments.Count):
comment = document.Comments[i]
output_file.write(f"批注 {i + 1}:\n")
output_file.write(f"作者:{comment.Format.Author}\n")
comment_text = ""
for j in range(comment.Body.Paragraphs.Count):
paragraph = comment.Body.Paragraphs[j]
comment_text += paragraph.Text + "\n"
output_file.write(f"内容: {comment_text.strip()}\n\n")
document.Close()
Word 文档通常包含作者、标题、主题、关键字等元数据信息,这些数据保存在文档的 BuiltinDocumentProperties 属性中。提取这些属性有助于文档的归档管理、分类整理以及搜索优化。
以下示例代码展示了如何读取 Word 文档的标题、作者、主题等属性,并将其保存到本地文本文件:
from spire.doc import *
# 加载 Word 文档
document = Document()
document.LoadFromFile("示例.docx")
# 获取文档属性
props = document.BuiltinDocumentProperties
# 将文档属性信息写入到本地文本文件
with open("output/元数据.txt", "w", encoding="utf-8") as output_file:
output_file.write(f"标题: {props.Title}\n")
output_file.write(f"作者: {props.Author}\n")
output_file.write(f"主题: {props.Subject}\n")
document.Close()
使用 Python 读取 Word 文档,不仅能够显著提升文档处理效率,还能实现数据提取与自动化工作的深度集成。通过 Spire.Doc for Python,开发者可以轻松完成 .doc 和 .docx 文件中的文本提取、表格读取、图片导出、批注解析、列表识别以及元数据获取等多种常见操作。
除了读取内容,Spire.Doc 还支持创建和编辑 Word 文档、设置样式格式、插入图片、执行文档合并,以及将 Word 转换为 PDF和图片等格式,满足从读取到输出的全流程需求,适用于报告生成、合同解析、批量文档处理等多种业务场景。
Q1:Python 如何读取 Word(.doc/.docx)文档内容?
A1:可以使用 Spire.Doc for Python 来读取 Word 文件。该库支持加载 .doc 和 .docx 格式,并提取文档中的文本、图片、表格、批注等内容。
Q2:使用 Spire.Doc for Python 是否需要安装 Microsoft Office?
A2:不需要。Spire.Doc 是一款独立运行的 Word 处理库,无需安装 Microsoft Word 或 Office ,即可在 Python 项目中实现 Word 文件的读取与编辑功能。
Q3:除了读取 Word 内容,Spire.Doc 是否支持写入和生成 Word 文件?
A3:支持。Spire.Doc for Python 不仅可以读取 Word 文档内容,还支持以编程方式创建、编辑和保存 Word 文件。用户可以添加段落、设置样式、插入图片和表格,甚至将 Word 转换为 PDF 或图片格式,满足多样化的文档生成需求。
若要完整体验 Spire.Doc for Python 的全部功能而不受评估限制,可该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。 30 天免费试用许可证。
Spire.Office for Java 10.7.0 已正式发布。在该版本中,Spire.Doc for Java 支持双行合一功能;Spire.XLS for Java 支持 MarkerDesigner 使用 Array 数据;Spire.PDF for Java支持将 PDF 转换为 Markdown;Spire.OCR for Java 支持自动旋转图片。除此之外,一些在转换和操作Word、Excel、PDF和PPT文档时出现的问题也已成功被修复。更多新功能及问题修复详情如下。
新功能:
问题修复:
新功能:
Workbook workbook = new Workbook();
// Get the first worksheet from the workbook
Worksheet sheet = workbook.getWorksheets().get(0);
// Set the value of cell range A1 to "&=Array"
sheet.getCellRange("A1").setValue("&=Array");
// Add a parameter named "Array" with an array of strings as its value
workbook.getMarkerDesigner().addArray("Array", new String[] { "Spire.Xls", "Spire.Doc", "Spire.PDF", "Spire.Presentation", "Spire.Email" });
// Apply the marker design to the workbook
workbook.getMarkerDesigner().apply();
// Calculate all the values in the workbook
workbook.calculateAllValue();
// Auto-fit the rows and columns in the allocated range of the worksheet
sheet.getAllocatedRange().autoFitRows();
sheet.getAllocatedRange().autoFitColumns();
// Save the workbook to the specified file path using Excel 2013 format
workbook.saveToFile(outputFile, ExcelVersion.Version2013);
// Clean up and release resources used by the workbook
workbook.dispose();
问题修复:
新功能:
PdfDocument doc = new PdfDocument("input.pdf");
doc.saveToFile("output.md", FileFormat.Markdown);
调整:
问题修复:
问题修复:
新功能:
ConfigureOptions configureOptions = new ConfigureOptions();
configureOptions.SetAutoRotate(true);
VisualTextAligner visualTextAligner = new VisualTextAligner(scanner.getText());
String scannedText = visualTextAligner.toString();
问题修复:
Spire.PDF for Android via Java 10.6.8 现已发布。该版本支持从 PDF 中提取文本、查找和高亮文本,以及查找和替换文本。此外,还修复了与 PDF 加密相关的问题。更多详细信息见下文。
调整:
新功能:
for (PdfPageBase page : (Iterable) doc.getPages()) {
PdfTextExtractor textExtractor = new PdfTextExtractor(page);
PdfTextExtractOptions option = new PdfTextExtractOptions();
buffer.append(textExtractor.extract(option));
}
for (PdfPageBase pageObj :(Iterable) pdf.getPages()) {
PdfTextFinder finds = new PdfTextFinder(pageObj);
PdfTextFindOptions Options = new PdfTextFindOptions();
Options.setTextFindParameter(EnumSet.of(TextFindParameter.None));
List result = finds.find("science",Options);
for (PdfTextFragment find : result)
{
find.highLight();
}
}
PdfTextFinder finds = new PdfTextFinder(page);
PdfTextFindOptions Options = new PdfTextFindOptions();
Options.setTextFindParameter(EnumSet.of(TextFindParameter.None));
List result = finds.find("Spire.PDF for Java",Options);
for (PdfTextFragment find : result)
{
RectF rec = new RectF();
rec.set(find.getPositions()[0].x, find.getPositions()[0].y, find.getSizes()[0].getWidth()+find.getPositions()[0].x, find.getSizes()[0].getHeight()+find.getPositions()[0].y);
page.getCanvas().drawRectangle(PdfBrushes.getWhite(), rec);
// Draws new text as defined font and color
page.getCanvas().drawString(newText, font, brush, rec);
}
问题修复:
Spire.Doc for Java 13.7.6 现已正式发布。最新版本支持双行合一功能,强化了 Word 转 PDF 的效果。此外,该版本还修复了一些已知问题,例如接受修订,内容控件内容不起作用的问题。更多详情请查阅下方内容。
新功能:
问题修复:

在自动化办公场景中,使用 Python 编程生成 PowerPoint 文档能显著提升工作效率,特别适用于定期报告、产品演示等需要快速产出标准化幻灯片的场景。通过脚本自动化处理,用户可以将精力集中在内容创作和视觉设计上,而无需反复进行繁琐的手动排版操作。
本教程将详细介绍如何使用 Spire.Presentation for Python 在 Python 中实现 PPT/PPTX 文件的自动化生成与编辑。该库为开发者提供了一套完整的 API 接口,支持对演示文稿进行全功能编程控制。
目录:
Spire.Presentation 是一个功能强大的 Python 库,无需安装 Microsoft Office 即可实现 PPT 文件的创建、读取和修改。该库主要支持以下功能:
接下来的章节中,我们将逐步讲解如何安装该库、创建演示文稿,以及为幻灯片添加各种元素。
开始前,您需要先安装 Spire.Presentation 库。可以通过 pip 命令进行安装:
pip install spire.presentation
安装完成后,您就可以在 Python 脚本中使用该库的功能来创建 PowerPoint 文档了。
让我们从创建一个基础 PowerPoint 演示文稿开始。以下代码示例展示了如何生成并保存一个空白的演示文稿:
from spire.presentation.common import *
from spire.presentation import *
# 创建一个Presentation对象
presentation = Presentation()
# 设置幻灯片大小类型
presentation.SlideSize.Type = SlideSizeType.Screen16x9
# 添加一张幻灯片(默认文档中有一张幻灯片)
presentation.Slides.Append()
# 将文档保存为 PPT 或 PPTX 文件
presentation.SaveToFile("BlankPowerPoint.pptx", FileFormat.Pptx2019)
presentation.Dispose()
在本段代码中:
现在我们已经创建了空白演示文稿,接下来将学习如何添加文本、图片、列表和表格等基础元素。
添加格式化文本
文本是幻灯片最常见的元素之一,在幻灯片中添加带格式的文本可以增强信息传达的清晰度和视觉吸引力。您可以使用以下代码来实现文本的插入和格式设置:
# 获取第一张幻灯片
first_slide = presentation.Slides[0]
# 向幻灯片添加一个形状
rect = RectangleF.FromLTRB(30, 60, 900, 150)
shape = first_slide.Shapes.AppendShape(ShapeType.Rectangle, rect)
shape.ShapeStyle.LineColor.Color = Color.get_Transparent()
shape.Fill.FillType = FillFormatType.none
# 向形状中添加文本
shape.AppendTextFrame("本指南演示如何使用 Python 创建 PowerPoint 文档")
# 获取形状的文本作为文本范围
textRange = shape.TextFrame.TextRange
# 设置字体名称、样式(粗体和斜体)、大小和颜色
textRange.LatinFont = TextFont("宋体")
textRange.IsBold = TriState.TTrue
textRange.FontHeight = 32
textRange.Fill.FillType = FillFormatType.Solid
textRange.Fill.SolidColor.Color = Color.get_Black()
# 设置对齐方式
textRange.Paragraph.Alignment = TextAlignmentType.Left
在本段代码中:
添加图片
在幻灯片中添加公司 Logo 等图片可以提升专业性和品牌识别。您可以使用以下代码将图片插入到演示文稿中:
# 获取第一张幻灯片
first_slide = presentation.Slides[0]
# 加载图像文件
imageFile = "C:\\Users\\Administrator\\Desktop\\logo.png"
stream = Stream(imageFile)
imageData = presentation.Images.AppendStream(stream)
# 重置大小
width = imageData.Width * 0.6
height = imageData.Height * 0.6
# 将其添加到幻灯片
rect = RectangleF.FromLTRB(750, 50, 750 + width, 50 + height)
image = first_slide.Shapes.AppendEmbedImageByImageData(ShapeType.Rectangle, imageData, rect)
image.Line.FillType = FillFormatType.none
在本段代码中:
您可能感兴趣: 使用 Python 在 PowerPoint 文档中添加形状
添加列表
项目符号列表有助于清晰地展示信息结构。您可以使用以下代码来实现这一功能:
# 获取第一张幻灯片
first_slide = presentation.Slides[0]
# 指定列表边界和内容
listBounds = RectangleF.FromLTRB(30, 150, 500, 350)
listContent = [
"第 1 步:安装 Spire.Presentation for Python。",
"第 2 步:创建一个演示文稿对象。",
"第 3 步:向幻灯片添加文本、图像等。",
"第 4 步:设置背景图像或颜色。",
"第 5 步:将演示文稿保存为 PPT(X) 文件。"
]
# 添加一个形状
autoShape = first_slide.Shapes.AppendShape(ShapeType.Rectangle, listBounds)
autoShape.TextFrame.Paragraphs.Clear()
autoShape.Fill.FillType = FillFormatType.none
autoShape.Line.FillType = FillFormatType.none
for content in listContent:
# 根据列表内容创建段落并将其添加到形状中
paragraph = TextParagraph()
autoShape.TextFrame.Paragraphs.Append(paragraph)
paragraph.Text = content
paragraph.TextRanges[0].Fill.FillType = FillFormatType.Solid
paragraph.TextRanges[0].Fill.SolidColor.Color = Color.get_Black()
paragraph.TextRanges[0].FontHeight = 20
paragraph.TextRanges[0].LatinFont = TextFont("宋体")
# 为这些段落设置项目符号类型
paragraph.BulletType = TextBulletType.Symbol
# 设置行间距
paragraph.LineSpacing = 150
在这段代码中:
添加表格
表格在幻灯片中可以有效地组织和展示数据。您可以使用以下代码来实现这一操作:
# 获取第一张幻灯片
first_slide = presentation.Slides[0]
# 定义表格的尺寸和数据
widths = [200, 200, 200]
heights = [18, 18, 18, 18]
dataStr = [
["幻灯片编号", "标题", "内容类型"],
["1", "介绍", "文本/图像"],
["2", "项目概述", "图表/图形"],
["3", "关键发现", "文本/列表"]
]
# 将表格添加到幻灯片
table = first_slide.Shapes.AppendTable(30, 360, widths, heights)
# 用数据填充表格并应用格式
for rowNum, rowData in enumerate(dataStr):
for colNum, cellData in enumerate(rowData):
cell = table[colNum, rowNum]
cell.TextFrame.Text = cellData
textRange = cell.TextFrame.Paragraphs[0].TextRanges[0]
textRange.LatinFont = TextFont("宋体")
textRange.FontHeight = 19
cell.TextFrame.Paragraphs[0].Alignment = TextAlignmentType.Center
# 应用内置的表格样式
table.StylePreset = TableStylePreset.MediumStyle2Accent1
在这段代码中:
为幻灯片设置自定义背景可以提升视觉效果和整体设计。您可以使用以下代码设置背景图片:
# 获取第一张幻灯片
first_slide = presentation.Slides[0]
# 获取第一张幻灯片的背景
background = first_slide.SlideBackground
# 从指定的图像文件创建一个流
stream = Stream("C:\\Users\\Administrator\\Desktop\\background.jpg")
imageData = presentation.Images.AppendStream(stream)
# 将图像设置为背景
background.Type = BackgroundType.Custom
background.Fill.FillType = FillFormatType.Picture
background.Fill.PictureFill.FillType = PictureFillType.Stretch
background.Fill.PictureFill.Picture.EmbedImage = imageData
在这段代码中:
有关更多背景选项,请参考本教程:Python 为 PowerPoint 幻灯片设置背景颜色或图片
效果图:
以下是由上述代码片段生成的 PowerPoint 文档的截图。

使用模板可以快速生成标准化的演示文稿,只需替换预置的占位符即可完成个性化定制。这种方法特别适合需要批量生成或定期更新的场景,例如项目报告、销售提案等。以下是基于模板动态生成 PowerPoint 文档的完整示例:
from spire.presentation.common import *
from spire.presentation import *
# Create a Presentation object
presentation = Presentation()
# Load a PowerPoint document from a specified file path
presentation.LoadFromFile("C:\\Users\\Administrator\\Desktop\\template.pptx")
# Get a specific slide from the presentation
slide = presentation.Slides[0]
# Define a list of replacements where each tuple consists of the placeholder and its corresponding replacement text
replacements = [
("{project_name}", "寰宇太阳能计划"),
("{budget}", "250万元"),
("{status}", "进行中(65% 完成)"),
("{start_date}", "2023年3月15日"),
("{end_date}", "2024年11月30日"),
("{manager}", "张三"),
("{client}", "寰宇科技有限公司")
]
# Iterate through each replacement pair
for old_string, new_string in replacements:
# Replace the first occurrence of the old string in the slide with the new string
slide.ReplaceFirstText(old_string, new_string, False)
# Save the modified presentation to a new file
presentation.SaveToFile("Template-Based.pptx", FileFormat.Pptx2019)
presentation.Dispose()
在这段代码中:
效果图:

在使用 Python 创建 PowerPoint 演示文稿时,请考虑以下最佳实践:
在本教程中,我们探讨了如何使用Spire.Presentation for Python库 在 Python 中创建 PowerPoint 文档 。从类库安装、基础文档创建,到文本样式控制、图片插入、表格制作等元素编排,再到模板应用等高级功能,本教程通过具体代码示例帮助开发者快速掌握各项操作技巧。这些方法能显著提升PPT制作效率,特别适用于需要定期生成标准化文档的工作场景。
Spire.Presentation 是一个强大的库,用于在多种编程语言中创建、读取和修改 PowerPoint 文件,包括 Python。
不,Spire.Presentation 可独立运行,无需安装 Microsoft Office。
是的,您可以通过以下方式完全自定义每张幻灯片的版式:
是的,Spire.Presentation 支持 PPT 和 PPTX 格式。 您可以在保存时通过 FileFormat 参数自由选择输出格式,例如:
# 保存为PPTX格式(推荐)
presentation.SaveToFile("output.pptx", FileFormat.Pptx2019)
# 保存为PPT格式(兼容旧版)
presentation.SaveToFile("output.ppt", FileFormat.PPT)
可以,Spire.Presentation 支持在幻灯片中添加图表,使您能够有效地可视化数据。有关详细说明,请参考:使用 Python 在 PowerPoint 中创建柱形图
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.OCR 2.1.6 现已发布!该版本新增对 Linux-ARM 平台的支持,可设置图像是否旋转及文本是否按图像位置输出,支持提取文本坐标,并升级了 SkiaSharp 依赖项。此外还修复了文本识别不准确及语言模型命名不规范的问题。详情如下:
新功能:
// 初始化OCR扫描器对象
OcrScanner scanner = new OcrScanner();
// 创建配置选项对象
ConfigureOptions configureOptions = new ConfigureOptions();
// 设置模型路径为win-x64平台
configureOptions.ModelPath = "win-x64";
// 设置识别语言为中文
configureOptions.Language = "Chinese";
// 启用自动旋转功能
configureOptions.AutoRotate = true;
// 应用配置选项
scanner.ConfigureDependencies(configureOptions);
// 执行扫描操作,input是输入图像
scanner.Scan(input);
// 创建文本对齐器,处理扫描结果
VisualTextAligner visualText = new VisualTextAligner(scanner.Text);
// 获取对齐后的文本字符串
string scannnedText = visualText.ToString();
// 使用StringBuilder构建最终文本
StringBuilder builder = new StringBuilder();
builder.Append(scannnedText);
// 将识别结果写入输出文件
File.WriteAllText(outputfile, builder.ToString());
IOCRTextBlock[] blocks = scanner.Text.Blocks;
string scannnedText = PrintTextBlocks(blocks);
private static string PrintTextBlocks(IOCRTextBlock[] blocks, StringBuilder sb = null)
{
if (sb == null || sb.Length == 0) sb = new StringBuilder();
if (blocks != null && blocks.Count() > 0)
{
foreach (var block in blocks)
{
Rectangle rectangle = block.Box;
string t1 = string.Format("Rectangle : [{0}, {1}, {2}, {3}] , ",
rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
string t2 = string.Format("Level ({0}): {1}", block.Level.ToString(), block.Text);
string text = t1 + t2;
text = text + "\n";
sb.Append(text);
PrintTextBlocks(block.TextBlock, sb);
if (block.Level == TextBlockType.Line) sb.Append("\n");
}
}
return sb.ToString();
}
问题修复: