在.NET开发中,将 HTML 转换为纯文本是一项常见任务,无论是需要从网页提取内容、处理 HTML 邮件,还是生成轻量级文本报告。然而,HTML 的丰富格式、标签和结构元素可能会使需要干净、无格式文本的工作流程变得复杂。这就是为什么常常需要通过C# 将 HTML 转换为 TXT 文本。
Spire.Doc for .NET 简化了这一过程:它是一个强大的文档操作库,原生支持加载 HTML 文件/字符串并将其转换为干净的纯文本。本文将探讨如何使用该库在 C# 中将 HTML 转换为纯文本,包括对两个核心场景的详细分析:转换HTML字符串(内存中的内容)和HTML文件(基于磁盘的内容)。
Spire.Doc 是一个强大的文档操作库,特别适合 HTML 到文本的转换:
Spire.Doc可通过NuGet获取,这是管理依赖项的最简单方法:
Install-Package Spire.Doc
本示例将 HTML 字符串渲染到 Document 对象中,然后使用 SaveToFile() 将其保存为纯文本文件。
using Spire.Doc;
using Spire.Doc.Documents;
namespace HtmlToText
{
class Program
{
static void Main(string[] args)
{
// 定义HTML内容
string htmlContent = @"
<html>
<body>
<h1>示例HTML内容</h1>
<p>这是一个包含<strong>粗体</strong>和<em>斜体</em>文本的段落。</p>
<p>另一行带有<a href='https://example.com'>链接</a>。</p>
<ul>
<li>列表项1</li>
<li>列表项2(带有<em>斜体</em>文本)</li>
</ul>
<p>特殊字符:© & ®</p>
</body>
</html>";
// 创建Document对象
Document doc = new Document();
// 添加一个节来容纳内容
Section section = doc.AddSection();
// 添加一个段落
Paragraph paragraph = section.AddParagraph();
// 将HTML渲染到段落中
paragraph.AppendHTML(htmlContent);
// 保存为纯文本
doc.SaveToFile("Html字符串转文本.txt", FileFormat.Txt);
}
}
}
关键步骤:
<strong>、<em>)、链接、列表和特殊字符。Document对象来管理内容,并使用Section和Paragraph构建HTML渲染的结构。AppendHTML()解析HTML字符串并将其转换为文档的内部结构,保留内容层次结构。SaveToFile()将渲染的内容转换为纯文本,剥离HTML标签同时保留可读的结构。输出:

本示例直接加载 HTML 文件并将其转换为文本。适用于批处理或处理现有 HTML 文档(例如,下载的网页、本地模板)。
using Spire.Doc;
using Spire.Doc.Documents;
namespace HtmlToText
{
class Program
{
static void Main()
{
// 创建Document对象
Document doc = new Document();
// 加载HTML文件
doc.LoadFromFile("E:\\sample.html", FileFormat.Html, XHTMLValidationType.None);
// 将HTML转换为纯文本
doc.SaveToFile("HTMLtoText.txt", FileFormat.Txt);
doc.Dispose();
}
}
}
关键步骤:
Document对象来处理文件操作。LoadFromFile()导入HTML文件,FileFormat.Html指定输入类型。XHTMLValidationType.None确保与非严格 HTM L的兼容性。SaveToFile()将加载的HTML内容转换为纯文本。
要保留原始格式和样式,您可以参考 将 HTML 文件转换为 Word 的 C# 教程。
答:可以。Spire.Doc 内置了对格式错误 HTML 的容错能力,但需要禁用严格验证以确保正确解析,即加载 HTML 文件时,使用 XHTMLValidationType.None 跳过严格的 XHTML 检查:
doc.LoadFromFile("malformed.html", FileFormat.Html, XHTMLValidationType.None);
答:可以,将 HTML 加载到 Document 对象后,您可以通过对象模型访问特定元素(如段落、表格等),只提取需要的内容而不是从整个文档中提取文本。
答:可以,Spire.Doc 支持转换为多种格式,包括 Word DOC/DOCX、PDF、图片、RTF等。
A:Spire.Doc 完全支持.NET Core、.NET 5/6/7/8和.NET Framework 4.0+。这些框架在功能上没有差异,可以使用相同的代码(例如Document、AppendHTML()、SaveToFile())。
使用 Spire.Doc 在 C# 中将 HTML 转换为纯文本非常简单高效。无论是处理 HTML 字符串还是文件,Spire.Doc 都能简化整个过程,保留文本结构的同时去除所有 HTML 标签。通过本文中的示例,您可以将 HTML 转 TXT 文本的功能无缝地集成到您的 C# 应用程序中。
如需解锁 Spire.Doc 库的全部功能并移除限制,可以点击申请30天免费试用许可证。
Spire.PDF for Java 11.9.6 现已正式发布。该版本优化了加载文档时的内存消耗。同时,解决了 PDF 转换、文本提取、Grid 单元格格式设置以及图片坐标获取等方面的多个问题。更多详情如下。
优化:
问题修复:
Spire.Presentation for Python 10.9.0 已发布,该版本主要修复了插入SVG图片到多页PPT文档产生的问题。具体更新如下:
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-Python.html

Excel 作为最常用的数据管理与分析工具之一,被广泛应用于各类数据处理场景。在 C# 应用程序开发过程中,无论是生成业务报表、导出数据库查询结果,还是实现自动化办公流程,C# 写入 Excel 的功能都扮演着至关重要的角色。
借助 Spire.XLS for .NET这一强大的第三方库,开发者无需在运行环境中安装 Microsoft Excel,即可高效、灵活地实现 Excel 文件的创建、写入与导出操作。本文将系统讲解如何 使用 C# 写入 Excel 文件 ,包括不同数据类型的插入方法、批量数据写入技巧、文件保存与导出,助力开发者提升数据处理与自动化能力。
文章目录:
Spire.XLS for .NET 是由 E-iceblue 开发的一款专业 Excel 库。它允许开发人员在 C# 中写入 Excel 文件,并执行包括创建、编辑、读取和导出 Excel 文档在内的多种操作,而无需安装 Microsoft Excel。
主要功能包括:
方式一:通过 NuGet 安装(推荐)
或直接使用包管理器控制台:
PM> Install-Package Spire.XLS
方式二:手动安装
安装完成后,你就可以在 C# 中开始写入 Excel 了。
第一步是创建一个新的工作簿并添加工作表,示例如下:
using Spire.Xls;
namespace CreateNewExcel
{
class Program
{
static void Main(string[] args)
{
// 创建一个新的工作簿
Workbook workbook = new Workbook();
// 移除默认工作表
workbook.Worksheets.Clear();
// 添加一个工作表
Worksheet sheet = workbook.Worksheets.Add("报告");
// 保存空的 Excel 文件
workbook.SaveToFile("新建文档.xlsx", ExcelVersion.Version2016);
workbook.Dispose();
}
}
}
此时,你已经成功创建了一个包含名为“报告”的工作表的空 Excel 文件。接下来我们将向其中写入数据。
Spire.XLS 允许你直接将多种数据类型写入 Excel 单元格。常见示例如下:
写入文本
sheet.Range["A1"].Text = "你好 Excel!";
写入数字
sheet.Range["A2"].NumberValue = 123.45;
写入日期和时间
sheet.Range["A3"].DateTimeValue = DateTime.Now;
sheet.Range["A3"].NumberFormat = "yyyy-mm-dd hh:mm";
写入布尔值
sheet.Range["A4"].BooleanValue = true;
写入 TimeSpan
sheet.Range["A5"].TimeSpanValue = new TimeSpan(2, 30, 0);
sheet.Range["A5"].NumberFormat = "[h]:mm:ss";
插入公式
sheet.Range["A6"].Formula = "=SUM(A2,100)";
插入 HTML 格式字符串
string htmlText = "<span style=\"font-family: Times New Roman; color: blue; font-size: 15pt;\">HTML <strong>格式文本</strong></span>";
sheet.Range["A7"].HtmlString = htmlText;
写入通用值
sheet.Range["A8"].Value = "一般数据";

你可能会感兴趣:C# 读取 Excel 数据
处理大型数据集时,逐个单元格写入效率很低。Spire.XLS 提供了直接插入数组和 DataTable 的方法,其他数据结构可以先转换为数组或 DataTable。
使用 Worksheet.InsertArray方法,可以将一维或二维数组写入指定区域:
string[,] data = {
{ "姓名", "年龄", "国家" },
{ "张三", "30", "中国" },
{ "李四", "28", "中国" },
{ "王五", "35", "加拿大" }
};
sheet.InsertArray(data, 1, 1);
效果图:

使用 InsertDataTable方法将 DataTable 数据导入到工作表:
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("产品", typeof(string));
dt.Columns.Add("价格", typeof(double));
dt.Rows.Add(1, "笔记本电脑", 8999);
dt.Rows.Add(2, "平板电脑", 5999);
dt.Rows.Add(3, "手机", 6999);
sheet.InsertDataTable(dt, true, 1, 1, true);
效果图:

此外,你还可以使用 Worksheet.ExportDataTable 方法将 Excel 数据导出为 DataTable。
虽然 Spire.XLS 没有直接支持写入 List 的方法,但你可以先将 List 转换为 DataTable,再写入 Excel。
using Spire.Xls;
using System.Data;
namespace WriteListToExcel
{
class Program
{
static void Main(string[] args)
{
// 创建一个工作簿实例
Workbook workbook = new Workbook();
// 移除默认工作表
workbook.Worksheets.Clear();
// 添加一个工作表并命名
Worksheet worksheet = workbook.Worksheets.Add("成绩单");
// 创建一个学生数据列表
List<Student> students = new List<Student>
{
new Student("迈克尔", "约翰逊", 20, "计算机科学", 3.8),
new Student("莎拉", "威廉姆斯", 22, "数学", 3.6),
new Student("杰西卡", "布朗", 19, "物理", 3.9),
new Student("大卫", "史密斯", 21, "化学", 3.7),
new Student("艾米莉", "戴维斯", 23, "生物", 3.5)
};
// 将列表转换为数据表
DataTable dataTable = ConvertListToDataTable(students);
// 将数据表写入工作表
worksheet.InsertDataTable(dataTable, true, 1, 1, true);
// 设置列宽
worksheet.AllocatedRange.ColumnWidth = 12;
// 内容左对齐
worksheet.AllocatedRange.HorizontalAlignment = HorizontalAlignType.Left;
// 保存为Excel文件
workbook.SaveToFile("学生成绩单.xlsx", ExcelVersion.Version2016);
// 释放资源
workbook.Dispose();
}
static DataTable ConvertListToDataTable(List<Student> students)
{
DataTable dataTable = new DataTable();
// 添加列
dataTable.Columns.Add("名字", typeof(string));
dataTable.Columns.Add("姓氏", typeof(string));
dataTable.Columns.Add("年龄", typeof(int));
dataTable.Columns.Add("专业", typeof(string));
dataTable.Columns.Add("绩点", typeof(double));
// 添加行
foreach (var student in students)
{
DataRow row = dataTable.NewRow();
row["名字"] = student.FirstName;
row["姓氏"] = student.LastName;
row["年龄"] = student.Age;
row["专业"] = student.Major;
row["绩点"] = student.GPA;
dataTable.Rows.Add(row);
}
return dataTable;
}
}
class Student
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Major { get; set; }
public double GPA { get; set; }
public Student(string firstName, string lastName, int age, string major, double gpa)
{
FirstName = firstName;
LastName = lastName;
Age = age;
Major = major;
GPA = gpa;
}
}
}
效果图:

写入数据后,你需要保存或导出 Excel 文件。Spire.XLS 支持多种格式(XLSX、CSV、PDF 等):
// 保存为 XLSX
workbook.SaveToFile("Output.xlsx", ExcelVersion.Version2016);
// 保存为 CSV
workbook.SaveToFile("Output.csv", ",", Encoding.UTF8);
// 导出为 PDF
workbook.SaveToFile("Output.pdf", FileFormat.PDF);
在 Web 应用中,还可以将文件保存到 MemoryStream:
using (MemoryStream ms = new MemoryStream())
{
workbook.SaveToStream(ms, FileFormat.Version2016);
// 可写入到 ASP.NET Response
}
日期/时间格式错误
数据覆盖或错位
大数据集写入性能低
公式未正确计算
在 C# 中实现 Excel 写入功能既直观又高效。借助 Spire.XLS for .NET,无论是写入单个数值、文本、日期,还是处理大规模结构化数据集,都能轻松胜任。该库不仅支持单元格样式、公式计算、条件格式等高级功能,还能精准控制输出效果,确保最终生成的 Excel 文件数据准确、外观专业。
通过数组或 DataTable 进行批量数据写入,可大幅提升数据输出效率,灵活应对不同体量的数据导出需求。若你正在寻找一种稳定、高效且无需依赖 Microsoft Excel 环境的文件生成方案,Spire.XLS for .NET 无疑是一个理想的技术选择。
可以。使用 workbook.LoadFromFile("file.xlsx") 打开文件,然后修改并保存。
不需要,它是一个独立库。
可以,它针对大数据集做了性能优化。
你可以通过以下方式设置字体、颜色、边框和对齐方式:
sheet.Range["A1"].Style.Font.IsBold = true;
sheet.Range["A1"].Style.Color = Color.Yellow;
sheet.Range["A1"].Style.HorizontalAlignment = HorizontalAlignType.Left;
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
Spire.XLS 15.9.7 现已发布。该版本新增 IXlsEquation 接口用于创建和修改数学公式,并且还支持 ISOMITTED 和 LAMBDA 函数。此外,一些在转换Excel到PDF和复制工作表时出现的问题也已成功被修复。详情如下。
优化:
新功能:
Workbook workbook = new Workbook();
workbook.LoadFromFile("Equation_1.xlsx");
Worksheet sheet = workbook.Worksheets[0];
//添加公式
sheet.Equations.AddEquation(1, 1, 50, 50, "\frac{A}{B}");
// 获取该工作表中的第一个公式对象
IXlsEquation equation = sheet.Equations[0];
// 使用 LaTeX 语法更新该公式的文本内容
equation.UpdateByLatexText("\\text{tan}\\frac{\\alpha}{2}=\\frac{\\text{sin}\\alpha}{1+ \\text{cos}\\alpha}");
// 设置公式在工作表中的位置和大小
equation.Top = 19;
equation.Left = 72;
equation.Width = 100;
equation.Height = 100;
// 获取该工作表中的第二个公式对象
IXlsEquation equation1 = sheet.Equations[1];
// 获取该公式的子项集合
IEquationItemCollection equationItems = equation1.EquationItems;
// 获取第一个子项
IEquationItem item1 = equationItems[0];
item1.Text = "e-iceblue";
// 在公式末尾添加一个新的 LaTeX 公式
equationItems.AddByLatex("\\frac{n!}{r!(n-r)!} ");
// 在索引为 0 的位置插入一个 LaTeX 公式
equationItems.InsertByLatex(0, "\\Delta A B C");
workbook.SaveToFile("out.xlsx");
HTMLOptions.Default.IsSaveFreezedPanes = true; //true为保留冻结效果,false为不保留
sheet.Range["D7"].Formula = "=LAMBDA(val,max,IF(ISOMITTED(max),val,IF(AND(val>0,val<max),\"within range\",\"out of range\")))(A1,A2)";
sheet.Range["D5"].Formula = "=LAMBDA(a,b,IF(ISOMITTED(b),a*a,a*b))(A1,A2)";
问题修复:
Spire.PDF for Python 11.9.2 现已正式发布。该版本针对文本替换和文档处理进行了优化,修复了字体渲染错误以及扁平化文档后内容丢失的问题。更多详情如下:
问题修复:
Spire.Presentation 10.9.1 已正式发布。本版本修复了在多页 PowerPoint 演示文稿中,将 SVG 插入到指定 Shape 时会意外创建新幻灯片的问题。详情如下:
问题修复:
https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html
Spire.Barcode 7.4.1 已发布,该版本修复了创建条形码时应用个别字体不生效的问题,并移除了部分依赖项。具体更新如下:
调整:
修复:
https://www.e-iceblue.com/Download/download-barcode-for-net.html

CSV(逗号分隔值)是一种常见的表格文本格式,因其结构简单、体积小,常用于报表、日志和数据传输。但在现代开发中,Web 应用、接口(API)和 NoSQL 数据库更倾向于使用 JSON。相比 CSV,JSON 支持嵌套结构,表达能力更强,并且与 JavaScript 天然兼容,能更方便地在前端和服务端之间交换数据。
因此,将 CSV 转换为 JSON 已成为数据处理和系统集成中的常见需求。本文将介绍如何使用 Python 将 CSV 转换为多种 JSON 格式,包括扁平化 JSON、嵌套 JSON、按字段分组的 JSON,以及 JSON Lines(NDJSON)。
CSV 文件轻量且表格化,但缺乏层次结构。JSON 支持结构化和嵌套数据,非常适合 API 和应用程序使用。将 CSV 转换为 JSON 可以实现:
本教程使用 Spire.XLS for Python 读取 CSV 文件,并使用 Python 内置的 json 模块进行 JSON 转换。
为什么选择 Spire.XLS?
安装 Spire.XLS
在终端中运行以下pip命令安装Spire.XLS库:
pip install spire.xls
安装完成后,即可将 CSV 数据转换为不同 JSON 格式。
将 CSV 文件转换为扁平化 JSON 时,每一行 CSV 会生成一个对应的 JSON 对象,所有行被组合到一个 JSON 数组中,并使用首行数据作为键,这样数据结构清晰、便于后续处理
from spire.xls import *
import json
# 创建 Workbook 实例并加载 CSV 文件(逗号分隔)
workbook = Workbook()
workbook.LoadFromFile("雇员.csv", ",")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 提取首行作为 JSON 的键
headers = [sheet.Range[1, j].Text for j in range(1, sheet.LastColumn + 1)]
# 将 CSV 剩余行映射为 JSON 对象
data = []
for i in range(2, sheet.LastRow + 1):
row = {headers[j - 1]: sheet.Range[i, j].Text for j in range(1, sheet.LastColumn + 1)}
data.append(row)
# 写入 JSON 文件
with open("output_flat.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
# 释放工作簿资源
workbook.Dispose()

当 CSV 中的一行包含相关的列时,可以将这些列组合成嵌套的 JSON 对象。例如,街道和城市两列可以合并为一个地址对象。每一行 CSV 会转换成一个 JSON 对象,并可能包含一个或多个嵌套的子对象。这种方式特别适用于需要将层级数据组织到单条记录中的场景,例如 API 响应或应用配置
from spire.xls import *
import json
# 创建工作簿实例并加载 CSV 文件(使用逗号作为分隔符)
workbook = Workbook()
workbook.LoadFromFile("数据.csv", ",")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 用于存储转换后的 JSON 数据的列表
data = []
# 从第二行开始循环(假设第一行是表头)
for i in range(2, sheet.LastRow + 1):
# 将每行映射为 JSON 对象,并包含嵌套的 "地址" 对象
row = {
"编号": sheet.Range[i, 1].Text, # 第 1 列: 编号
"姓名": sheet.Range[i, 2].Text, # 第 2 列: 姓名
"地址": { # 地址嵌套对象
"街道": sheet.Range[i, 3].Text, # 第 3 列: 街道
"城市": sheet.Range[i, 4].Text # 第 4 列: 城市
}
}
# 将 JSON 对象添加到列表中
data.append(row)
# 将 JSON 数据写入文件,并设置缩进以便阅读
with open("output_nested.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
# 释放工作簿资源
workbook.Dispose()

当 CSV 中的多行数据属于同一个父实体时,可以将这些行合并到一个父对象下。例如,在处理订单时,一个订单可能包含多件商品,可以将同一订单的所有商品放入该订单对象的“商品”数组中。每个订单都有唯一标识(如订单编号),其对应的子行会归属于该订单。这种方法适合处理电子商务订单或任何需要将多行相关数据组合成一个整体的场景。
from collections import defaultdict
from spire.xls import *
import json
# 创建工作簿实例并加载 CSV 文件(逗号分隔)
workbook = Workbook()
workbook.LoadFromFile("订单.csv", ",")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 使用 defaultdict 存储分组数据
# 每个订单编号对应一个字典,包含客户名和商品
data = defaultdict(lambda: {"客户": "", "商品": []})
# 从第二行开始循环(跳过表头)
for i in range(2, sheet.LastRow + 1):
order_id = sheet.Range[i, 1].Text # 第 1 列: 订单编号
customer = sheet.Range[i, 2].Text # 第 2 列: 客户
item = sheet.Range[i, 3].Text # 第 3 列: 商品
# 分配客户名(同一订单编号的所有行相同)
data[order_id]["客户"] = customer
# 将商品添加到订单的商品中
data[order_id]["商品"].append(item)
# 将分组字典转换为对象列表
# 每个对象包含订单编号、客户和商品
result = [{"订单编号": oid, **details} for oid, details in data.items()]
# 将分组数据写入 JSON 文件,并设置缩进便于阅读
with open("output_grouped.json", "w", encoding="utf-8") as f:
json.dump(result, f, indent=4, ensure_ascii=False)
# 释放工作簿资源
workbook.Dispose()

与普通 JSON 数组不同,JSON Lines(也叫 NDJSON,即 Newline Delimited JSON)将每个 JSON 对象单独写在一行,既方便流式处理,又能兼容大数据工具。
from spire.xls import *
import json
# 创建 Workbook 实例并加载 CSV 文件(逗号分隔)
workbook = Workbook()
workbook.LoadFromFile("雇员.csv", ",")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 提取首行作为 JSON 的键
headers = [sheet.Range[1, j].Text for j in range(1, sheet.LastColumn + 1)]
# 打开文件以写入 NDJSON
with open("output.ndjson", "w", encoding="utf-8") as f:
# 从第二行开始遍历每行数据
for i in range(2, sheet.LastRow + 1):
# 将每列数据映射为 JSON 对象
row = {headers[j - 1]: sheet.Range[i, j].Text for j in range(1, sheet.LastColumn + 1)}
# 写入文件,每行一个 JSON 对象
f.write(json.dumps(row, ensure_ascii=False) + "\n")
# 释放工作簿资源
workbook.Dispose()

对于比较大的 CSV 文件,一次性将所有数据加载到内存中可能效率不高,甚至会导致内存不足。使用 Spire.XLS,你仍然可以将 CSV 文件加载为工作表,但不必将所有行一次性添加到列表中,而是可以分批处理并逐步写入 JSON 文件。这种方法可以有效减少内存占用,非常适合在 Python 中进行大型 CSV 到 JSON 的转换。
from spire.xls import *
import json
# 创建 Workbook 实例并加载 CSV 文件(逗号分隔)
workbook = Workbook()
workbook.LoadFromFile("测试.csv", ",")
# 获取第一个工作表
sheet = workbook.Worksheets[0]
# 打开 JSON 文件用于写入
with open("output_large.json", "w", encoding="utf-8") as json_file:
json_file.write("[\n") # 开始 JSON 数组
first = True # 用于处理对象之间的逗号
# 从第二行开始遍历每行数据(跳过表头)
for i in range(2, sheet.LastRow + 1):
# 将每列数据映射到表头,生成字典
row = {sheet.Range[1, j].Text: sheet.Range[i, j].Text
for j in range(1, sheet.LastColumn + 1)}
# 如果不是第一行,在前面添加逗号
if not first:
json_file.write(",\n")
# 写入 JSON 对象
json.dump(row, json_file, ensure_ascii=False)
first = False
json_file.write("\n]") # 结束 JSON 数组
# 释放工作簿资源
workbook.Dispose()
在 Python 中将 CSV 转换为 JSON 时,遵循以下实用建议可以确保数据的完整性和兼容性:
在 Python 中将 CSV 转换为 JSON,可以让数据处理更加高效,并方便用于现代应用程序。借助 Python 及像 Spire.XLS for Python 这样的库,你可以:
通过这些方法,你可以高效地将 CSV 数据转换为多种 JSON 格式,并应用到 API 开发、系统集成、大数据处理等实际场景中。
A1: 如果 CSV 文件有表头,可使用首行作为键,将后续行映射为字典。使用 Spire.XLS 时,可通过 sheet.Range[1, j].Text 获取表头内容。
A2: 找出相关列(例如 街道 和 城市),在构建 JSON 时将它们组合成子对象。参考上文的嵌套 JSON 示例。
A3: 使用流式处理方式,即逐行处理并立即写入 JSON,而不是一次性将所有数据加载到内存中。
A4: 可以。在 LoadFromFile 方法中指定分隔符,例如 "," 或 ";"。
A5: 使用 Python 的 json 模块将 JSON 文件读取为字典列表,然后用 Spire.XLS for Python 写回 CSV。
A6: JSON Lines(NDJSON)格式会将每个 JSON 对象写在单独的一行。可逐行将 CSV 数据写入输出文件,这样内存占用低,并且兼容 Elasticsearch、Logstash 等大数据处理工具。

Excel 是最常用的数据整理、分析和展示工具之一。无论是财务报表还是运营仪表盘,很多场景都需要将数据导出到 Excel,以便阅读和共享。相比手动输入,通过 Python 自动化写入 Excel 文件 能让处理过程更高效、更可靠,也具备更好的扩展性。
在本文中,我们将介绍如何 使用 Python 将数据写入 Excel 文件,内容涵盖结构化数据插入、格式设置以及数据导出。文中示例所用库支持在代码中直接创建并自定义工作簿。
本教程包含内容:
在 Python 中写入 Excel 文件,需要使用支持创建、加载和保存工作簿的库。Spire.XLS for Python 提供完整的 API,可以轻松实现自动化报表生成和数据处理。
使用 pip 安装:
pip install spire.xls
安装完成后,可以通过以下三种核心操作来处理 Excel 文件:
这些操作构成了后续写入数据、设置格式和管理多工作表的基础。
在实际业务中,可能需要新建 Excel 文件、更新现有报表,或者写入不同类型的数据(如文本、数字、日期和公式)。下面展示了在这些常见场景下,如何高效地 用 Python 在 Excel 中写入和管理数据。
如果需要在已有 Excel 报表中追加新信息,例如新增销售记录、库存更新或附加数据行,可以通过以下方式在不覆盖原有内容的情况下插入数据并保存:
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
workbook.LoadFromFile("Sample.xlsx")
sheet = workbook.Worksheets[0]
# 添加新行(中文示例)
sheet.Range["A4"].Value = "笔记本电脑"
sheet.Range["B4"].NumberValue = 5
sheet.Range["C4"].NumberValue = 5800.00
sheet.Range["A5"].Value = "显示器"
sheet.Range["B5"].NumberValue = 10
sheet.Range["C5"].NumberValue = 1200.00
workbook.SaveToFile("output/updated_excel.xlsx", ExcelVersion.Version2016)
关键点:
这种方式能让报表在不丢失原始内容的情况下持续更新。
示例效果:

对于大规模数据,逐行逐列写入效率低,推荐一次性写入整个数据集。这样不仅节省时间,还能保证数据在表格中的一致性:
from spire.xls import Workbook, ExcelVersion
# 创建新工作簿
workbook = Workbook()
sheet = workbook.Worksheets[0]
orders = [
["订单号", "客户", "产品", "数量", "价格", "状态"],
[1001, "张三", "笔记本电脑", 2, 5800.00, "已发货"],
[1002, "李四", "显示器", 1, 1200.00, "待处理"],
[1003, "王五", "键盘", 5, 80.00, "已送达"],
[1004, "赵六", "鼠标", 3, 50.00, "已发货"],
[1005, "钱七", "平板电脑", 1, 2600.00, "待处理"]
]
for row_index, row_data in enumerate(orders, start=1):
for col_index, value in enumerate(row_data, start=1):
if isinstance(value, (int, float)):
sheet.Range[row_index, col_index].NumberValue = value
else:
sheet.Range[row_index, col_index].Value = value
workbook.SaveToFile("output/orders.xlsx", ExcelVersion.Version2016)
要点:
批量写入非常适合导出数据库查询结果或生成运营报表。
效果示例:

Excel 支持多种数据类型,例如文本、数字、日期、公式和布尔值。使用合适的属性和方法可以保证数据准确存储和展示:
from spire.xls import Workbook, ExcelVersion, DateTime, TimeSpan
workbook = Workbook()
sheet = workbook.Worksheets[0]
# 一般值
sheet.Range[2, 2].Text = "常规示例"
sheet.Range[2, 3].Value = "示例123"
# 数字
sheet.Range[3, 2].Text = "数字示例"
sheet.Range[3, 3].NumberValue = 1234.56
sheet.Range[3, 3].NumberFormat = "0.000"
# 日期
sheet.Range[4, 2].Text = "日期示例"
sheet.Range[4, 3].DateTimeValue = DateTime.get_UtcNow()
# 公式
sheet.Range[5, 2].Text = "公式示例"
sheet.Range[5, 5].NumberValue = 1234.56
sheet.Range[5, 6].NumberValue = 6543.21
sheet.Range[5, 3].Formula = "=SUM(E5:F5)"
# 文本
sheet.Range[6, 2].Text = "文本示例"
sheet.Range[6, 3].Text = "示例文本"
# 布尔值
sheet.Range[7, 2].Text = "布尔示例"
sheet.Range[7, 3].BooleanValue = True
sheet.AllocatedRange.Style.Font.FontName = "微软雅黑"
sheet.AllocatedRange.AutoFitColumns()
workbook.SaveToFile("output/value_types.xlsx", ExcelVersion.Version2016)
常用属性:
效果示例:

为了让 Excel 报表更清晰、专业,可以在写入数据的同时应用格式。本节展示如何通过样式、数字格式和行列尺寸调整来提升可读性。
可以为单元格设置字体、边框、背景色等样式:
from spire.xls import Workbook, Color, FontUnderlineType, ExcelVersion, BordersLineType, LineStyleType
workbook = Workbook()
sheet = workbook.Worksheets[0]
# 表头
sheet.Range["A1"].Value = "产品"
sheet.Range["B1"].Value = "类别"
sheet.Range["C1"].Value = "单价"
sheet.Range["D1"].Value = "数量"
sheet.Range["E1"].Value = "合计"
# 数据
sheet.Range["A2"].Value = "华为笔记本"
sheet.Range["B2"].Value = "电脑"
sheet.Range["C2"].NumberValue = 5800.00
sheet.Range["D2"].NumberValue = 1
sheet.Range["E2"].Formula = "=C2*D2"
sheet.Range["A3"].Value = "小米手机"
sheet.Range["B3"].Value = "手机"
sheet.Range["C3"].NumberValue = 3200.00
sheet.Range["D3"].NumberValue = 1
sheet.Range["E3"].Formula = "=C3*D3"
# 设置表头样式
header = sheet.Range["A1:E1"]
header.Style.Font.FontName = "微软雅黑"
header.Style.Font.Size = 12.0
header.Style.Font.IsBold = True
header.Style.Font.Underline = FontUnderlineType.Single
header.Style.Interior.Color = Color.get_LightGray()
header.Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Medium
核心属性:
样式能突出重点区域,增强可读性。
通过 NumberFormat,可以将数字显示为货币、百分比等格式:
# 设置数字格式
sheet.Range["C2:C3"].NumberFormat = "¥#,##0.00" # 货币格式
sheet.Range["D2:D3"].NumberFormat = "0" # 整数格式
sheet.Range["E2:E3"].NumberFormat = "¥#,##0.00"
要点:
适当的数字格式能让财务数据更直观、更专业。更多内容可参考 如何用 Python 设置 Excel 单元格数字格式。
为了保证内容完整显示,可以自动调整或固定行列尺寸:
# 自动调整列宽和行高
for col in range(1, 5):
sheet.AutoFitColumn(col)
for row in range(1, 3):
sheet.AutoFitRow(row)
# 指定区域自动调整
#sheet.Range["A1:E3"].AutoFitColumns()
#sheet.Range["A1:E3"].AutoFitRows()
# 固定列宽和行高
sheet.Columns[1].Width = 150
sheet.Rows[1].Height = 30
workbook.SaveToFile("output/formatted_excel.xlsx", ExcelVersion.Version2016)
关键点:
灵活使用自动调整和固定尺寸,可以保证报表既整齐又美观。
效果示例:

更多高级格式技巧(如条件格式),可参考 Python 设置 Excel 样式指南。
在 Excel 中,将数据分类存放在多个工作表中能让结构更清晰。例如,可以为销售、采购、库存等创建不同工作表。本节演示如何 创建、访问和管理多个工作表:
from spire.xls import Workbook, ExcelVersion
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "销售数据"
sheet1 = workbook.Worksheets["Sheet2"]
sheet1.Name = "采购数据"
sheet2 = workbook.Worksheets.Add("库存数据")
sheet2.Range["A1"].Value = "产品ID"
sheet2.Range["B1"].Value = "库存数量"
sheet2.Range["A2"].Value = "P001"
sheet2.Range["B2"].NumberValue = 100
sheet2.Range["A3"].Value = "P002"
sheet2.Range["B3"].NumberValue = 50
workbook.SaveToFile("output/multi_sheet.xlsx", ExcelVersion.Version2016)
主要方法:
合理管理多个工作表能让数据更有条理。
生成 Excel 文件效果:

在写入 Excel 文件时,建议遵循以下原则:
遵循这些规范,能生成更专业、可复用的报表。
使用 Python 自动化写入 Excel,可以大幅提升报表生成效率。通过创建工作簿、批量写入数据、应用样式、管理多工作表以及支持多种数据类型,开发者可以轻松生成一致、准确且专业的 Excel 文件。更多功能可 申请免费临时许可证 或试用 Free Spire.XLS for Python。
可以。Python 能加载已有文件,在保留原有数据的同时追加或修改内容。
批量写入多行数据,并在插入时尽量减少格式操作,可以保证性能。
可以。支持输入公式(如 =SUM()),并保持动态计算。
Spire.XLS for Python 支持保存为 .xlsx、.xls、CSV,还可以导出为 PDF,满足不同兼容性需求。