Spire.Cloud 10.8.8 已发布。本次更新在 WebAPI 中新增支持转换WORD,EXCEL,PDF, PowerPoint文档到 TXT 和 Markdown 格式。同时,该版本还一些功能调整及问题修复,如 WebAPI 修复了转 Word 到图片报错的问题。详情请阅读以下内容。
新功能:
调整:
问题修复:

在处理电子表格时,数据本身固然重要,但可读性同样关键。一个拥有优秀格式设置的 Excel 文件不仅更易于分析,还能方便展示和分享。与在 Excel 中手动调整样式相比,使用 Python 进行 Excel 格式设置 并自动化操作,能够帮助我们节省宝贵的时间。
本文将演示如何借助 Spire.XLS for Python 通过 Python 设置 Excel 样式。我们会讲解基础样式、进阶格式设置和实际应用场景,同时介绍实现 Python 进行 Excel 格式设置的核心类和属性。
文章内容概览:
手动格式化 Excel 十分耗时,尤其是在处理大数据或动态生成报表时。借助 Python Excel 格式设置,你可以:
利用 Python,你可以快速编写脚本,为 Excel 表格应用专业的样式。接下来我们先来配置环境。
学习本教程前,需要先 安装 Spire.XLS for Python,这是一个专门用于处理 Excel 文件的库,支持创建、读取、修改和格式化 Excel 文档。
通过 pip 安装:
pip install Spire.XLS
在 Python 脚本中导入:
from spire.xls import *
在开始格式化之前,需要准备一个工作簿。
新建工作簿:
workbook = Workbook()
sheet = workbook.Worksheets[0]
或加载已有文件:
workbook = Workbook()
workbook.LoadFromFile("输入文件.xlsx")
sheet = workbook.Worksheets[0]
格式化完成后,保存结果:
workbook.SaveToFile("output/格式设置结果.xlsx", ExcelVersion.Version2016)
有了工作簿,我们就可以进入实际的格式设置示例了。
在学习高级操作前,先掌握 Excel 的基础格式化功能非常重要。这些基本技巧(字体、对齐、边框、背景颜色、列宽和行高调整)是创建清晰、专业电子表格的基石。熟练后可以组合并扩展这些方法,构建更复杂的样式。
修改字体是 Excel 样式中最常见的任务。在 Spire.XLS for Python 中,可以通过 CellRange.Style.Font 对象来控制字体名称、大小、颜色以及加粗、斜体、下划线等效果。
cell = sheet.Range[2, 2]
cell.Text = "Python Excel 格式设置示例"
cell.Style.Font.FontName = "微软雅黑"
cell.Style.Font.Size = 14
cell.Style.Font.Color = Color.get_Blue()
cell.Style.Font.IsBold = True
这样即可直接修改单元格文字的显示效果。
通过 HorizontalAlignment 和 VerticalAlignment 属性可以设置单元格的水平和垂直对齐方式,WrapText 属性则能让长文本自动换行。
cell = sheet.Range[4, 2]
cell.Text = "这是一个居中并自动换行的示例文本"
cell.Style.HorizontalAlignment = HorizontalAlignType.Center
cell.Style.VerticalAlignment = VerticalAlignType.Center
cell.Style.WrapText = True
这样可以保持文本居中且易于阅读。
单元格边框可通过 Borders 集合来设置,可以分别指定边框样式和颜色。
cell = sheet.Range[6, 2]
cell.Text = "边框示例"
cell.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin
cell.Style.Borders[BordersLineType.EdgeBottom].Color = Color.get_Black()
这样会在单元格下方添加一条黑色细线。
通过 Style.Color 可以为单元格添加背景色,常用于突出标题或重点数据。
cell = sheet.Range[8, 2]
cell.Text = "高亮单元格"
cell.Style.Color = Color.get_Yellow()
这样单元格会显示为黄色背景。
调整列宽和行高可以避免文字重叠或留有过多空白。
# 设置指定列宽
sheet.Columns[1].ColumnWidth = 20
# 设置指定行高
sheet.Rows[7].RowHeight = 20
此外,还可以自动调整行列宽度以适应内容:
这样可确保表格数据整齐且易读。
下图展示了字体、对齐、边框、背景色、列宽和行高调整的效果:

此外,还可以自定义数字、日期、货币等数据格式,详情见 Python 设置 Excel 单元格数字格式。
除了逐个单元格设置,还可以通过单元格区域和可复用样式来实现更高效的格式化。主要涉及 CellRange 对象(用于合并、调整区域大小)和 Workbook.Styles 集合(用于创建自定义样式)。
常用于生成报表标题或跨列的分区标题。
range = sheet.Range[2, 2, 2, 4]
range.Merge()
range.Text = "季度销售报表"
range.Style.HorizontalAlignment = HorizontalAlignType.Center
range.RowHeight = 30
这样可以将 B2:D2 合并为一个单元格并设置居中。
Excel 自带一些预设样式,可以快速应用。
range.BuiltInStyle = BuiltInStyles.Heading1
这样会应用 标题 1 样式,无需手动设置字体和边框。
当需要在多个单元格或表格中使用同一格式时,可以创建自定义样式。
# 创建自定义样式
custom_style = workbook.Styles.Add("自定义样式")
custom_style.Font.FontName = "宋体"
custom_style.Font.Size = 12
custom_style.Font.Color = Color.get_DarkGreen()
custom_style.Borders[BordersLineType.EdgeTop].LineStyle = LineStyleType.MediumDashDot
# 应用样式
cell = sheet.Range[4, 2]
cell.Text = "应用了自定义样式"
cell.Style = custom_style
这样能提升格式管理效率,尤其在处理大数据时。
下图展示了合并单元格、内置样式和自定义样式的效果:

还可以通过条件格式突出数据趋势,详情见 Python Excel 条件格式应用。
学习了基础和高级示例后,我们再回顾一下 核心类、属性和方法。理解这些内容有助于写出更灵活、可维护的脚本。
下表总结了 Python 格式化 Excel 时最常用的 API,可作为速查表:
| 类 / 属性 / 方法 | 说明 |
|---|---|
| Workbook / Worksheet | 表示 Excel 文件及其工作表。 |
| Workbook.LoadFromFile() / SaveToFile() | 加载和保存 Excel 文件。 |
| Workbook.Styles.Add() | 创建并定义可复用的自定义样式。 |
| CellRange | 表示一个或多个单元格,用于应用样式或格式化。 |
| CellRange.Style | 包含单元格的字体、对齐、边框、背景、换行等样式信息。 |
| CellRange.Merge() | 合并多个单元格。 |
| CellRange.BuiltInStyle | 应用 Excel 预设的内置样式(如 Heading1)。 |
| CellRange.BorderAround() / BorderInside() | 为区域的外边框或内边框设置样式。 |
| CellRange.ColumnWidth / RowHeight | 调整列宽和行高。 |
| CellRange.NumberFormat | 定义数字、日期或货币的显示格式。 |
掌握这些 API 后,就能以结构化和灵活的方式完成常见格式化任务,确保报表专业美观且易于维护。更多内容请参考 Spire.XLS for Python API 文档。
接下来,我们结合所学来生成一个 年度销售报表,包含结构化数据、地区分类和高级格式,让报表清晰、专业。
from spire.xls import *
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "销售报表"
# 报表标题
title = sheet.Range[1, 1, 1, 7]
title.Merge()
title.Text = "2024 年度销售报表"
title.Style.Font.IsBold = True
title.Style.Font.Size = 16
title.Style.HorizontalAlignment = HorizontalAlignType.Center
title.Style.Color = Color.get_LightGray()
title.RowHeight = 30
# 数据
data = [
["产品", "地区", "第一季度", "第二季度", "第三季度", "第四季度", "合计"],
["笔记本", "北方", 1200, 1500, 1300, 1600, 5600],
["笔记本", "南方", 1000, 1200, 1100, 1300, 4600],
["平板", "北方", 800, 950, 1000, 1200, 3950],
["平板", "南方", 700, 850, 900, 1000, 3450],
["手机", "北方", 2000, 2200, 2100, 2500, 8800],
["手机", "南方", 1800, 1900, 2000, 2200, 7900],
["配件", "全部", 600, 750, 720, 900, 2970],
["", "", "", "", "", "总计", 39370]
]
for r in range(len(data)):
for c in range(len(data[r])):
sheet.Range[r+2, c+1].Text = str(data[r][c])
# 表头格式
header = sheet.Range[2, 1, 2, 7]
header.Style.Font.IsBold = True
header.Style.Color = Color.get_LightBlue()
header.Style.HorizontalAlignment = HorizontalAlignType.Center
header.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin
# 数值列设置为货币
for row in range(3, 11):
for col in range(3, 8):
cell = sheet.Range[row, col]
if cell.Text.isdigit():
cell.NumberValue = float(cell.Text)
cell.NumberFormat = "¥#,##0"
# 高亮总计
grand_total = sheet.Range[10, 7]
grand_total.Style.Color = Color.get_LightYellow()
grand_total.Style.Font.IsBold = True
# 冻结首行和前两列
sheet.FreezePanes(2, 3)
# 设置字体名以便自动对齐
sheet.AllocatedRange.Style.Font.FontName = "微软雅黑"
# 自动调整列宽
sheet.AllocatedRange.AutoFitColumns()
workbook.SaveToFile("output/年度销售报表.xlsx", ExcelVersion.Version2016)
此脚本整合了合并标题、加粗表头、货币格式、总计高亮、冻结窗格等多种技巧,使报表既清晰又美观,特别适合商业和财务数据展示。
最终生成的报表效果如下:

使用 Python 格式化 Excel 是一种高效的报表自动化方式,既能节省时间,又能保证数据展示的专业性。通过结合基础样式和高级技巧(如自定义样式和列宽调整),你可以轻松创建清晰、统一的电子表格。
无论是财务报表、科研数据还是商业分析,Python Excel 格式设置 都能帮助你高效完成任务。合理利用样式和属性,让表格不仅包含数据,还能直观传达信息。
你可以 申请免费临时许可证 以解锁 Spire.XLS for Python 的全部功能,或使用 Free Spire.XLS for Python 快速体验。
可以。Python 提供了库来设置字体、颜色、边框、对齐方式、条件格式等。
可以使用 Spire.XLS for Python 库,通过代码修改字体、对齐、列宽、合并单元格、应用样式等。
可以。Python 不仅能格式化,还能创建、读取、修改和保存 Excel 文件,非常适合动态报表和数据自动化。
可以定义自定义样式或封装函数,将统一的格式应用到多个工作簿和工作表中,从而提高效率并保持一致性。
Spire.Presentation for JavaScript 10.9.0 现已发布,此版本主要将 Skiasharp 依赖项更新至 3.116.1。
调整:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JavaScript.html
在开发中,将 HTML 内容转换为 RTF 格式是常见需求 - HTML 擅长网页展示,而 RTF 则适用于 Word 等工具中的编辑与共享。对于.NET 开发者,借助 Spire.Doc 库可大幅简化这一过程。本文将介绍如何用 C# 实现 HTML 到 RTF 的高效转换、涵盖基础转换示例及进阶转换场景(如处理HTML图像、批量转换)。
Spire.Doc for .NET是一款轻量级、功能丰富的类库,可在.NET应用程序(支持.NET Framework、.NET Core及.NET 5+)中创建、编辑和转换 Word 及 RTF 文档。其核心优势如下:
1. 创建 C# 项目
在 Visual Studio 中创建控制台应用(.NET Framework/.NET Core 均可),代码同样适用于 WinForms、WPF 或ASP.NET项目。
2. 安装 Spire.Doc
通过 NuGet 快速集成:
Install-Package Spire.Doc
Spire.Doc 提供的 Document 类负责 HTML 加载和 RTF 保存,以下为两种典型场景的实现:
适用于动态 HTML 内容(如用户输入、数据库读取):
using Spire.Doc;
using Spire.Doc.Documents;
namespace HtmlToRtfConverter
{
class Program
{
static void Main(string[] args)
{
// 创建 Document 对象
Document doc = new Document();
// 定义 HTML 内容
string htmlString = @"
<html>
<body>
<h1 style='color: #00BFFF; font-family: Arial'>HTML 到 RTF 的转换</h1>
<p>这是一个包含<b>粗体段落</b>和<a href='https://www.e-iceblue.com'>链接</a>的示例。</p>
<ul>
<li>项目1 </li>
<li>项目2</li>
</ul>
<table border='1' cellpadding='5'>
<tr><td>姓名</td><td>性别</td><td>年龄</td></tr>
<tr><td>张某</td><td>男</td><td>30</td></tr>
<tr><td>李某</td><td>女</td><td>26</td></tr>
</table>
</body>
</html>";
// 在 Word 中添加一个段落
Paragraph para = doc.AddSection().AddParagraph();
// 将 HTML 字符串添加到段落中
para.AppendHTML(htmlString);
// 将文档保存为 RTF
doc.SaveToFile("HTML字符串转RTF.rtf", FileFormat.Rtf);
doc.Dispose();
}
}
}
核心说明:
<h1>、<table>、<a>)并插入到段落中;转换效果: 生成的 RTF 文件将完整保留 HTML 中的标题样式、文本格式、链接及表格结构。

SaveToFile 方法接受不同的 FileFormat 参数,通过修改该参数即可实现在 C# 中将 HTML 转换为 Word。
适用于静态 HTML 文件(如本地模板、保存的网页):
using Spire.Doc;
namespace ConvertHtmlToRTF
{
class Program
{
static void Main()
{
// 创建Document对象
Document doc = new Document();
// 加载HTML文件
doc.LoadFromFile("E:\\sample.html", FileFormat.Html);
// 将HTML文件保存为rtf格式
doc.SaveToFile("HTML转RTF.rtf", FileFormat.Rtf);
doc.Dispose();
}
}
}
核心步骤:
转换效果:

扩展链接: Spire.Doc 也支持通过 C# 将 RTF 文件转换回 HTML 格式。
Spire.Doc 支持保留 HTML 中的图像(本地 / 远程):
<img> 标签的 src 路径正确(如 src="images/logo.png");// 包含本地和远程图像的 HTML 内容
string htmlWithImages = @"<html>
<body>
<h3>包含图片的 HTML</h3>
<p>本地图片:<img src='C:\Users\Administrator\Desktop\HelloWorld.png' alt='示例图像' width='200'></p>
<p>网页图片:<img src='https://www.e-iceblue.com/images/art_images/csharp-html-to-rtf.png' alt='在线图像'></p>
</body>
</html>";
// 将 HTML 字符串添加到段落
Paragraph para = doc.AddSection().AddParagraph();
para.AppendHTML(htmlWithImages);
// 将文档保存为 RTF
doc.SaveToFile("HtmlWithImage.rtf", FileFormat.Rtf);
通过循环处理目录中所有 HTML 文件,高效完成批量转换:
string inputDir = @"C:\Input\HtmlFiles";
string outputDir = @"C:\Output\RtfFiles";
// 若输出目录不存在则创建
Directory.CreateDirectory(outputDir);
// 获取输入目录中所有.html文件
foreach (string htmlFile in Directory.EnumerateFiles(inputDir, "*.html"))
{
using (Document doc = new Document())
{
doc.LoadFromFile(htmlFile, FileFormat.Html, XHTMLValidationType.None);
// 使用相同文件名,扩展名改为.rtf
string fileName = Path.GetFileNameWithoutExtension(htmlFile) + ".rtf";
string outputPath = Path.Combine(outputDir, fileName);
doc.SaveToFile(outputPath, FileFormat.Rtf);
借助 Spire.Doc for .NET,C# 开发者可轻松实现 HTML 到 RTF 的转换,且能保证格式一致性,该库省去了手动解析的麻烦。无无论是动态 HTML 字符串还是静态文件,均能通过简洁的 API 快速处理。如需扩展功能,可参考 Spire.Doc 教程合集。
答:可申请30 天免费试用许可证,体验完整功能。此外 Spire.Doc 也提供免费社区版(无水印,有页面和功能限制)。
答:会的。Spire.Doc 能保留大多数 HTML 元素:
<a>标签会转为RTF中的可点击链接;<img src="路径">)和远程(<img src="URL">)图像会嵌入到RTF中;答:可以。将 HTML 内容加载到 Document 对象后,可在保存为 RTF 前,通过 Spire.Doc 提供的各 API 对文档进行修改。
答:除转换为 RTF 外,该库还支持将 HTML 转换为 Word、HTML 转 PDF 以及 HTML 转图片等格式。

Markdown(md)是一种轻量级标记语言,以简洁和易读著称,广受开发者、技术写作者及内容创作者的喜爱。它常用于编写文档、README 文件、博客和技术笔记。虽然 Markdown 本身便于书写和阅读,但在网页显示或集成到 Web 应用时,通常需要将其转换为 HTML。因此,将 Markdown 转换为 HTML 成为内容管理系统、文档处理流程或 Web 应用中必不可少的操作。
本文将详细介绍如何在 C# 中实现 Markdown 到 HTML 的转换,内容包括处理 Markdown 字符串、单个文件,以及高效批量转换多个 Markdown 文档。
Markdown 是一种轻量级标记语言,它允许开发者和写作者使用纯文本创建结构化文档。它通过简单的语法实现标题、列表、链接、图片、代码块等功能。由于 Markdown 在原始形态下就具有良好的可读性,因此特别适合撰写文档、README、技术博客和协作笔记。
Markdown 示例:
# 项目标题
这是一个 **加粗** 的语句。
- 功能 1
- 功能 2
HTML(超文本标记语言)是网页的基础语言。与 Markdown 相比,HTML 能够精确控制文档结构、格式、多媒体嵌入以及网页交互。Markdown 追求简洁,而 HTML 则是网页和应用内容的核心。
HTML 输出示例:
<h1>项目标题</h1>
<p>这是一个 <strong>加粗</strong> 的语句。</p>
<ul>
<li>功能 1</li>
<li>功能 2</li>
</ul>
| 特性 | Markdown | HTML |
|---|---|---|
| 复杂度 | 简单、语法极简 | 更详细、语法繁琐 |
| 可读性 | 原始文本可直接阅读 | 原始代码可读性较差 |
| 使用场景 | 文档、README、博客 | 网站、Web 应用、邮件内容 |
对于 C# 开发者来说,Spire.Doc for .NET 是一个非常实用的文档处理库,它不仅支持将 Markdown 字符串和文件转换为 HTML,还支持将 Markdown 文档导出为 Word和PDF 等格式,开发者可根据项目需求灵活选择输出格式。
核心功能:
安装方式:
NuGet 安装(推荐)
在包管理控制台中运行以下命令:
Install-Package Spire.Doc
此方法会自动下载并集成库及依赖。
手动安装
下载 DLL 文件并手动添加引用。该方法适合离线安装或需要直接控制库文件的情况。
提示: 推荐使用 NuGet,便于快速配置与版本管理。
在某些应用中,Markdown 内容可能以字符串形式动态生成,或存储在数据库中。本节将展示如何使用 C# 将 Markdown 字符串转换为格式化的 HTML 文件。
using Spire.Doc;
using System;
using System.IO;
namespace MarkdownToHtml
{
internal class Program
{
static void Main(string[] args)
{
// 定义 Markdown 字符串
string markdown = @"
# 欢迎使用 C# Markdown 教程
本教程将详细演示 **Markdown 语法** 的使用方法。
这里是一个 [示例链接](https://example.com)。
## 功能介绍
- 标题、加粗和斜体文字
- 链接和图片
- 有序列表与无序列表
- 代码块和行内代码
- 引用块
- 表格
";
// 定义文件路径
string markdownFilePath = "example.md"; // 保存 Markdown 文件的路径
string outputHtmlPath = "output.html"; // 转换后的 HTML 文件路径
// 将 Markdown 字符串保存为文件
File.WriteAllText(markdownFilePath, markdown);
// 加载 Markdown 文件
Document document = new Document();
document.LoadFromFile(markdownFilePath, FileFormat.Markdown);
// 保存为 HTML 文件
document.SaveToFile(outputHtmlPath, FileFormat.Html);
// 关闭文档
document.Close();
Console.WriteLine($"Markdown 字符串已转换为 HTML,文件路径:{outputHtmlPath}");
}
}
}

如果已有 Markdown 文件,可以直接加载并导出为 HTML。转换过程中,Spire.Doc 会完整保留 Markdown 的内容和格式,包括标题、列表、链接和图片等,确保排版与原文件一致。
using Spire.Doc;
using System;
namespace MarkdownToHtml
{
internal class Program
{
static void Main(string[] args)
{
// Markdown 文件路径
string markdownFile = @"C:\Docs\example.md";
// HTML 文件保存路径
string htmlFile = @"C:\Docs\example.html";
// 加载 Markdown 文件
Document document = new Document();
document.LoadFromFile(markdownFile, FileFormat.Markdown);
// 保存为 HTML 文件
document.SaveToFile(htmlFile, FileFormat.Html);
// 关闭文档
document.Close();
Console.WriteLine($"成功将 '{markdownFile}' 转换为 HTML!");
}
}
}

如果你有多个 Markdown 文件需要一次性转换,可以参考下面的 C# 示例,批量将它们转换为 HTML。
using Spire.Doc;
using System;
using System.IO;
namespace MarkdownToHtml
{
internal class Program
{
static void Main(string[] args)
{
// 输入文件夹路径,存放 Markdown 文件
string inputFolder = @"C:\Docs\MarkdownFiles";
// 输出文件夹路径,用于保存 HTML 文件
string outputFolder = @"C:\Docs\HtmlFiles";
// 如果输出文件夹不存在,则创建
Directory.CreateDirectory(outputFolder);
// 遍历输入文件夹中的所有 .md 文件
foreach (string file in Directory.GetFiles(inputFolder, "*.md"))
{
try
{
// 加载 Markdown 文件
Document doc = new Document();
doc.LoadFromFile(file, FileFormat.Markdown);
// 获取文件名(不含扩展名)
string fileName = Path.GetFileNameWithoutExtension(file);
// 构建 HTML 输出路径
string outputPath = Path.Combine(outputFolder, fileName + ".html");
// 保存为 HTML 文件
doc.SaveToFile(outputPath, FileFormat.Html);
// 每个文件转换完成后打印确认信息
Console.WriteLine($"已将 {file} 转换为 HTML。");
}
catch (Exception ex)
{
// 错误处理,避免单个文件出错导致整个批量转换失败
Console.WriteLine($"转换 {file} 失败:{ex.Message}");
}
}
// 批量转换完成提示
Console.WriteLine("批量转换完成。");
}
}
}
将 Markdown 转换为 HTML 的过程相对简单,但如果掌握一些实用方法,可以更好地处理复杂场景、提升性能,并保证生成的 HTML 干净、规范。以下是几个关键技巧,可优化你的转换流程:
实现错误处理
在处理多个文件时,应将转换逻辑放在 try-catch 块中,以应对无效的 Markdown 文件、缺失文件或权限问题。这样即使某个文件出错,也不会导致整个批量转换失败。
try
{
Document doc = new Document();
doc.LoadFromFile(filePath, FileFormat.Markdown);
doc.SaveToFile(outputPath, FileFormat.Html);
}
catch (Exception ex)
{
Console.WriteLine($"转换 {filePath} 失败:{ex.Message}");
}
优化批量转换性能
对于大量 Markdown 文件,可考虑使用异步或并行处理,这样可以缩短转换时间,同时避免占用过多内存:
Parallel.ForEach(Directory.GetFiles(inputFolder, "*.md"), file =>
{
// 转换逻辑
});
对 HTML 输出进行后处理
转换完成后,可以对生成的 HTML 进行进一步优化,例如注入 CSS 样式、添加自定义属性或压缩内容。这在将 HTML 集成到网页或应用时尤其有用:
string htmlContent = File.ReadAllText(outputPath);
htmlContent = "<link rel='stylesheet' href='style.css'>" + htmlContent;
File.WriteAllText(outputPath, htmlContent);
保持 UTF-8 编码
始终以 UTF-8 编码保存 Markdown 和 HTML 文件,以确保特殊字符、符号和多语言内容能够正确显示,并在不同浏览器和设备上保持一致性。
本文介绍了在 C# 中将 Markdown 转换为 HTML 的方法,涵盖了处理 Markdown 字符串、单个文件以及批量转换的场景。这些示例为在 .NET 应用(如文档系统、博客或内容管理平台)中集成 Markdown 转 HTML 提供了参考。通过灵活运用这些方法,可以高效管理 Markdown 内容,并生成结构清晰、格式统一的 HTML 文档。
A1:可以。 库支持转换带有图片、超链接、标题、列表、代码块等内容的 Markdown,确保生成的 HTML 与源文件格式一致。
A2:不需要。 Spire.Doc 是独立库,无需依赖 Office。
A3: 遍历包含 .md 文件的文件夹,使用 LoadFromFile 和 SaveToFile 方法即可实现批量转换。
A4:可以。 无论是数据库中的内容还是用户输入的 Markdown 字符串或文件,都可以动态转换为 HTML,适用于博客、CMS 等场景。
A5:是的。 库兼容 .NET Framework、.NET Core 以及 .NET 5/6+。
A6:可以。 转换完成后可以为 HTML 添加 CSS 样式或修改标签,以满足网站或应用的特定需求。
A7:支持。 它可以处理 Word转PDF、Word转HTML 等多种文档格式转换,便于在不同格式间灵活处理文档内容。
A8: 请确保源 Markdown 文件以 UTF-8 编码保存,这样转换为 HTML 时可以完整保留特殊字符、多语言内容和符号。

在 C# 开发中,DataSet 常用于管理内存中的数据,通常来源于数据库查询或系统集成过程。在很多情况下,你可能需要将 DataSet 导出为 Excel 文件——例如生成报表、与非开发人员共享结构化数据,或将记录归档以便后续参考。
本文将介绍如何使用 Spire.XLS for .NET 在 C# 中导出 DataSet 到 Excel,包括创建 Excel 文件、将多个 DataTable 分别写入不同工作表、应用格式化,以及处理大数据量导出等场景。
本文将涵盖以下内容:
什么是 DataSet?
C# 中的 DataSet 是内存中对结构化数据的表示,可以包含多个 DataTable,并保存其行、列和关系。这使得开发者在无需直接连接数据库的情况下,也能方便地处理关系型数据。
为什么要将 DataSet 导出到 Excel?
相比纯文本或 CSV,Excel 具备丰富的格式化功能、多工作表支持以及更佳的可读性。
本文使用 Spire.XLS for .NET 来导出 DataSet 到 Excel。通过 NuGet 安装:
Install-Package Spire.XLS
引用命名空间:
using Spire.Xls;
using System.Data;
using System.Drawing; // 用于颜色
将 DataSet 导出为 Excel 包含两个关键步骤:准备数据和写入工作簿。实际应用中,DataSet 通常来自数据库或 API 查询。为了演示清晰,这里我们先构建一个内存中的 DataSet,再将其导出为 Excel 文件,每个 DataTable 对应一个工作表。
下面的代码示例构建了一个包含多个业务表的 DataSet,表中包含多种常见数据类型(int、string、DateTime、decimal)。
using System;
using System.Data;
class Program
{
static DataSet CreateSampleDataSet()
{
DataSet ds = new DataSet("公司数据");
// 员工表
DataTable employees = new DataTable("员工");
employees.Columns.Add("编号", typeof(int));
employees.Columns.Add("姓名", typeof(string));
employees.Columns.Add("部门编号", typeof(int));
employees.Columns.Add("入职日期", typeof(DateTime));
employees.Columns.Add("薪资", typeof(decimal));
employees.Rows.Add(1, "张伟", 101, new DateTime(2020, 5, 12), 5500.00m);
employees.Rows.Add(2, "李娜", 102, new DateTime(2019, 3, 8), 7200.50m);
employees.Rows.Add(3, "王强", 103, new DateTime(2021, 11, 2), 4800.75m);
// 部门表
DataTable departments = new DataTable("部门");
departments.Columns.Add("部门编号", typeof(int));
departments.Columns.Add("部门名称", typeof(string));
departments.Rows.Add(101, "人事部");
departments.Rows.Add(102, "信息技术部");
departments.Rows.Add(103, "财务部");
// 项目表
DataTable projects = new DataTable("项目");
projects.Columns.Add("项目编号", typeof(int));
projects.Columns.Add("项目名称", typeof(string));
projects.Columns.Add("负责人编号", typeof(int));
projects.Columns.Add("开始日期", typeof(DateTime));
projects.Rows.Add(1001, "招聘系统", 1, new DateTime(2023, 1, 15));
projects.Rows.Add(1002, "ERP升级", 2, new DateTime(2023, 4, 10));
projects.Rows.Add(1003, "预算规划", 3, new DateTime(2023, 7, 5));
ds.Tables.Add(employees);
ds.Tables.Add(departments);
ds.Tables.Add(projects);
return ds;
}
}
有了 DataSet 后,接下来创建 Excel 文件:实例化 Workbook,遍历 DataTable,将其插入到工作表中,最后保存文件。
using Spire.Xls;
using System.Data;
class Program
{
static void Main()
{
DataSet ds = CreateSampleDataSet();
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
// 每个 DataTable 导出为一个单独的工作表
for (int i = 0; i < ds.Tables.Count; i++)
{
Worksheet sheet = workbook.Worksheets.Add(ds.Tables[i].TableName);
sheet.InsertDataTable(ds.Tables[i], true, 1, 1);
sheet.Name = ds.Tables[i].TableName;
}
workbook.SaveToFile("DatasetToExcel.xlsx", ExcelVersion.Version2016);
}
}
导出要点说明
除了将 DataTable 导出到不同工作表,你也可以通过调整 InsertDataTable 方法的起始行列参数,将多个表写入同一个工作表。
效果预览
下图展示了从 DataSet 导出的 Excel 文件,其中包含 Employees、Departments、Projects 三个工作表。

如果你希望直接从数据库导出数据到 Excel,可以参考我们的教程:C# 导出数据库到 Excel。
原始数据往往不够直观,格式化可以提升可读性,使报表更专业。通过 Spire.XLS,可以设置字体、背景色、边框,并对数字和日期应用格式。
using System.Drawing;
using Spire.Xls;
// 获取第一个工作表
Worksheet sheet1 = workbook.Worksheets["员工"];
// 1) 表头样式 (A1:E1)
CellRange header = sheet1.AllocatedRange.Rows[0];
header.Style.Font.IsBold = true;
header.Style.Font.Size = 12;
header.Style.Font.Color = Color.White;
header.Style.Color = Color.SteelBlue;
header.BorderAround(LineStyleType.Thin);
// 2) 设置列的数字格式 (D: HireDate, E: Salary)
sheet1.AllocatedRange.Columns[3].Style.NumberFormat = "yyyy-mm-dd";
sheet1.AllocatedRange.Columns[4].Style.NumberFormat = "$#,##0.00";
// 3) 数据区域设置浅色背景 (A2:E4 示例)
CellRange data = sheet1.Range["A2:E4"];
data.Style.Color = Color.FromArgb(245, 247, 250);
data.BorderAround(LineStyleType.Thin);
// 设置字体名
sheet1.AllocatedRange.Style.Font.FontName = "微软雅黑";
// 自动调整行高列宽
sheet1.AllocatedRange.AutoFitColumns();
sheet1.AllocatedRange.AutoFitRows();
格式化功能说明
更多格式化选项请参考 CellRange 和 CellStyle 的 API 文档。
格式化效果预览
下图展示了蓝色背景的加粗表头、带边框的区域,以及日期和货币列的正确格式。

当 DataSet 数据量较大时,性能与内存消耗尤为关键。常见优化方式包括:
除了导出,很多场景下还需要将 Excel 文件读取到 DataSet 中,用于数据处理或迁移。这在导入外部报表、系统集成或数据库预处理时非常实用。
using System.Data;
using Spire.Xls;
class Program
{
static DataSet ReadExcelIntoDataSet(string filePath)
{
DataSet ds = new DataSet();
Workbook workbook = new Workbook();
workbook.LoadFromFile(filePath);
foreach (Worksheet sheet in workbook.Worksheets)
{
DataTable dt = sheet.ExportDataTable();
dt.TableName = sheet.Name;
ds.Tables.Add(dt);
}
return ds;
}
}
ExportDataTable 方法可以将每个工作表转换为 DataTable,保留其结构和单元格数据。通过设置 TableName 并添加到 DataSet,即可将多个工作表整合为一个内存数据容器,便于进一步处理。
若要将 Excel 数据持久化到数据库,可参考:在 C# 中导入 Excel 到数据库。
在 C# 中将 DataSet 导出到 Excel,可以方便地生成报表、共享数据,并提升数据的可分析性与展示效果。通过 Spire.XLS for .NET,你不仅能直接从 DataSet 创建 Excel 文件,还能进行格式化、管理多工作表,并高效处理大数据量。同时也支持将 Excel 数据导入 DataSet,便于与应用或数据库集成。
如需探索更多功能,可申请免费临时许可证,或在小型项目中使用 Free Spire.XLS for .NET。
遍历 ds.Tables,为每个 DataTable 调用 InsertDataTable,并新建工作表即可。
可以。使用 Workbook.LoadFromFile() 打开文件,再选择目标工作表并调用 InsertDataTable。
数据类型会被保留。你还可以在导出后对列应用日期、货币、对齐等格式。
可拆分到多个工作表,分批写入,并减少复杂格式,以提升性能。
Spire.PDF for C++ 11.9.1 现已正式发布。该版本成功修复了几个在转换 PDF 到 PDFA3A 、提取文本和压缩PDF文档时出现的问题。详情请查阅以下内容。
问题修复:
Spire.XLS for Java 15.9.1 现已正式发布。该版本增强了从 Excel 到 HTML 的转换功能,并对出现的多个问题进行了修复。更多详情如下:
问题修复:

在 ASP.NET 应用程序中生成 PDF 是一个常见需求——无论是生成发票、报告、表单,还是导出动态内容。与其依赖复杂的 PDF API 或第三方打印驱动程序,不如使用 Spire.PDF for .NET,这是一款专业且轻量级的库,能够让开发人员以编程方式创建和操作 PDF 文档。
在本教程中,我们将演示如何在 ASP.NET Core Web 应用程序中使用 Spire.PDF for .NET 生成 PDF 文档,包括从零创建 PDF 以及将 HTML 转换为 PDF 的示例。
文章目录:
Spire.PDF 是一款专为开发人员设计的 .NET PDF 库,能够快速、可靠地处理 PDF 功能。其主要优势包括:
第一步:创建新的 ASP.NET Core Web 应用
第二步:通过 NuGet 安装 Spire.PDF
或者使用 程序包管理器控制台 (Package Manager Console) 安装:
Install-Package Spire.PDF
第三步:添加 PDF 生成控制器
using Microsoft.AspNetCore.Mvc;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace PdfDemoApp.Controllers
{
public class PdfController : Controller
{
public IActionResult CreatePdf()
{
// 创建一个新的 PDF 文档
PdfDocument doc = new PdfDocument();
PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(40));
// 在页面上绘制文本
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 25f, FontStyle.Regular), true);
PdfSolidBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("通过 ASP.NET Core 创建 PDF", font, brush, 10, 50);
// 保存到内存流
using (MemoryStream ms = new MemoryStream())
{
doc.SaveToStream(ms);
doc.Close();
ms.Position = 0;
// 返回 PDF 文件
return File(ms.ToArray(), "application/pdf", "Generated.pdf");
}
}
}
}
第四步(可选):在视图中添加按钮或链接
打开 Views/Home/Index.cshtml (或你的首页视图文件)。添加如下按钮或链接:
<div>
<a asp-controller="Pdf" asp-action="CreatePdf" class="btn btn-primary">
从零创建 PDF
</a>
</div>
这里使用了 ASP.NET Core 的标签帮助器 (Tag Helpers) 来生成正确的路由(/Pdf/CreatePdf)。
效果图:

除了文本之外,Spire.PDF还支持向 PDF 添加多种元素,例如图片、图形、表格、列表、超链接、注释以及水印。更多详细信息和高级用法,请参阅 Spire.PDF 编程指南。
Spire.PDF允许将 HTML 内容直接转换为 PDF 文件。此功能特别适用于生成发票、报告、收据,或将带有样式的网页以一致的格式导出为 PDF。
要将 HTML 渲染为 PDF,Spire.PDF 依赖外部渲染引擎。目前可以选择 Qt WebEngine 或 Google Chrome 。在本指南中,我们将使用 Qt WebEngine。
配置 Qt 插件:
解压缩安装包,找到 plugins 目录,例如: C:\plugins-windows-x64\plugins
在代码中注册插件路径:
HtmlConverter.PluginPath = @"C:\plugins-windows-x64\plugins";
插件准备好后,你就可以参考前面步骤,在控制器中添加以下代码片段,从 HTML 内容生成 PDF 输出。
using Microsoft.AspNetCore.Mvc;
using Spire.Additions.Qt;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace PdfDemoApp.Controllers
{
public class HtmlToPdfController : Controller
{
[HttpGet]
public IActionResult HtmlToPdf()
{
// 示例 HTML 字符串
string html = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
h1 { color: #2563eb; }
</style>
</head>
<body>
<h1>ASP.NET Core:从 HTML 创建 PDF</h1>
<p>此 PDF 使用基于 Qt 的转换器生成。</p>
</body>
</html>";
// Qt 插件文件夹路径
// ⚠️ 确保该文件夹在服务器或部署环境中存在
string pluginPath = @"C:\plugins-windows-x64\plugins";
HtmlConverter.PluginPath = pluginPath;
// 创建临时文件路径(在服务器端)
string tempFile = Path.GetTempFileName();
// 使用 Qt 将 HTML 字符串转换为 PDF
HtmlConverter.Convert(
html,
tempFile,
enableJavaScript: true,
timeout: 100000, // 超时时间,毫秒
pageSize: new SizeF(595, 842), // A4 页面大小(点)
margins: new PdfMargins(40), // 40pt 边距
LoadHtmlType.SourceCode // 从 HTML 字符串加载
);
// 将生成的 PDF 读取到内存
byte[] fileBytes = System.IO.File.ReadAllBytes(tempFile);
// 清理临时文件
System.IO.File.Delete(tempFile);
// 将 PDF 返回到浏览器进行下载
return File(fileBytes, "application/pdf", "HtmlToPdf.pdf");
}
}
}
效果图:

此示例将行内 HTML 转换为格式准确的 PDF。你也可以加载外部 HTML 文件或 URL —— 更多信息请参阅详细指南:在 C# 中将 HTML 转换为 PDF。
借助 Spire.PDF for .NET,你可以轻松在 ASP.NET Core 应用程序中生成 PDF 。无论是从零开始创建 PDF,还是在 C# 中进行 HTML 转 PDF 转换,Spire.PDF 都能提供可靠、对开发者友好的解决方案 —— 无需任何外部依赖。
如果你还需要通过 Word 文档生成 PDF,可以使用 Spire.Doc for .NET ,这是 Spire 系列的另一款产品。两者结合使用,可以覆盖 PDF 文档生成的完整场景 。
通过集成这些工具,开发者能够简化工作流程,减少对 Adobe 或其他第三方组件的依赖,并确保输出文档的一致性与专业质量。这将使你的 ASP.NET PDF 解决方案更具 可扩展性、可维护性 ,并适用于企业级应用。
不需要。Spire.PDF 是独立的库,可以完全脱离 Adobe Acrobat 使用。
不可以。Word 转 PDF 功能由 Spire.Doc for .NET 提供,而不是 Spire.PDF。如果项目需要,你可以将两者结合使用。
Spire.PDF 支持为 PDF 设置密码、权限和数字签名,以保障文档安全。
支持。它既能在 ASP.NET Core中使用,也兼容 ASP.NET Framework 。
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.Doc 13.9.3 现已正式发布。该版本新增用于在保存 PDF 文档时添加数字签名和时间戳的公共类;同时增强了书签列属性、文本替换时对 OfficeMath 的处理选项,以及转换为 PDF 时的页面布局设置。此外,本次修复了若干与 Word 转 PDF、文档加载和页面计数相关的问题。更多详情如下。
新功能:
Document sDoc = new Document();
sDoc.LoadFromFile(inputFile);
ToPdfParameterList toPdfParameter = new ToPdfParameterList();
toPdfParameter.DigitalSignatureInfo = new PdfDigitalSignatureInfo(pfxInputFile, pfxPassword, "Test signing", "Spire Doc"); // 数字签名
toPdfParameter.DigitalSignatureInfo.HashAlgorithm = PdfDigitalSignatureHashAlgorithm.RipeMD160;
toPdfParameter.DigitalSignatureInfo.SignatureDate = nowDateTime;
toPdfParameter.DigitalSignatureInfo.TimestampConfiguration = new PdfDigitalSignatureTimestampConfiguration("https://freetsa.org/tsr", "bill", "Password"); // 时间戳
sDoc.SaveToFile(outputFile3, toPdfParameter);
int firstColumn = doc.Bookmarks["t_insert"].FirstColumn;
int lastColumn = doc.Bookmarks["t_insert"].LastColumn;
SearchOptions op = new SearchOptions();
op.IgnoreOfficeMath = false;
doc.Replace("ab","new", op);
Document doc = new Document("xx.docx");
ToPdfParameterList toPdf = new ToPdfParameterList(){ PageLayout = PdfPageLayout.TwoColumnLeft };
doc.SaveToFile("xx.pdf", toPdf);
问题修复: