
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,满足不同兼容性需求。

当 Excel 表格中包含化学式、统计脚注或科学数据时,往往需要使用下标来表示。这不仅能够让数据更加清晰,也使文档更加专业。但是,Microsoft Excel 自带的下标功能操作比较繁琐,而且也不支持批量应用,手动操作通常需要花费大量的时间。 基于此,本篇指南将介绍如何使用 Java 实现轻松在 Excel 中插入下标,高效完成工作任务。
在 Java 中为 Excel 插入下标需要借助相关的 Java 库。本文将以 Spire.XLS for Java 为例来演示这一过程。Spire.XLS 是一款功能强大的 Java 组件,它无需依赖 Microsoft Office 就能独立运行。除了读取、编辑和转换 Excel 文件外,还支持执行各种高级操作。
在你的设备上安装该库有两种方式:
<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.xls</artifactId>
<version>15.11.3</version>
</dependency>
</dependencies>
完成 Java 库安装后,接下来,我们来看如何在 Excel 单元格中插入带有下标格式的新文本。通过在创建新文档时直接设置下标,你可以一次性生成最终文件,而无需再重新打开进行二次调整。
操作步骤——使用 Java 在 Excel 中插入新文本并设置下标:
下面的代码演示了如何在单元格 B2 中插入文本 "R100-0.07",并为其中的部分字符设置下标:
import com.spire.xls.*;
import java.awt.*;
public class InsertSubscriptNewText {
public static void main(String[] args) {
// 创建一个 Workbook 实例
Workbook workbook = new Workbook();
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 在单元格 B2 中插入文本
sheet.getCellRange("B2").setText("这是一个下标的例子:");
// 在单元格 B3 中插入文本并应用下标效果
CellRange range = sheet.getCellRange("B3");
range.getRichText().setText("R100-0.07");
ExcelFont font = workbook.createFont();
font.isSubscript(true);
font.setColor(Color.red);
range.getRichText().setFont(4, 8, font);
// 自动调整列宽
sheet.getAllocatedRange().autoFitColumns();
// 保存文档
workbook.saveToFile("/新文本下标.xlsx", ExcelVersion.Version2016);
}
}
插入下标的输出结果文件预览:

提示:如果将 ExcelFont.isSuperscript() 设置为 true,就可以在 Excel 文件中为文本应用上标效果。
虽然在创建新 Excel 文件时直接插入下标能简化后续工作,但在大多数情况下,你需要处理的是已经包含内容的现有文件。本节将演示如何使用 Java 快速为 Excel 中的已有文本设置下标格式。
操作步骤——在已有文本的 Excel 文件中插入下标:
下面的代码演示了如何在 A1:A3 区域内的单元格中,为化学式设置下标:
import com.spire.xls.*;
public class InsertSubscriptExistingText {
public static void main(String[] args) {
// 创建一个 Workbook 并加载 Excel 文件
Workbook workbook = new Workbook();
// 加载 Excel 文件
workbook.loadFromFile(("/测试.xlsx"));
// 获取工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 遍历 A1:A3 区域
for (int i = 1; i <= 3; i++) {
CellRange cell = sheet.getCellRange("A" + i);
String text = cell.getText();
// 查找单元格中的 "2"
int index = text.indexOf("2");
if (index != -1) {
// 使用 RichText 保留原有文本
cell.getRichText().setText(text);
// 创建字体并设置为下标
ExcelFont subFont = workbook.createFont();
subFont.isSubscript(true);
// 将 "2" 设置为下标
cell.getRichText().setFont(index, index, subFont);
}
}
// 自动调整列宽
sheet.getAllocatedRange().autoFitColumns();
// 保存 Excel 文件
workbook.saveToFile("/已有文本下标.xlsx", ExcelVersion.Version2016);
}
}
输出文件结果预览:

上面的代码可以帮助我们在已有单元格中找到并将第一个匹配字符设置为下标。但如果同一个字符在单元格中出现多次,又该如何一次性为所有匹配字符应用下标呢?接下来我们来讲解这一部分。
当单元格中只需要为一个字符设置下标时(例如 H₂),使用“查找并应用”方法就足够了。然而,如果单元格包含化学方程式,情况就复杂得多:可能有多个地方需要下标,同时还存在表示系数的普通数字(如 2H₂ + O₂ → 2H₂O)。这种情况下,需要通过指定文本中目标字符的精确位置来精准设置下标。下面是详细步骤。
操作步骤——在 Excel 单元格中插入多个下标:
下面的代码演示了如何在单元格 C2 中,为化学方程式的必要部分设置下标:
import com.spire.xls.*;
public class SubscriptinCell {
public static void main(String[] args) {
// 创建 Workbook 实例并加载 Excel 文件
Workbook workbook = new Workbook();
workbook.loadFromFile(("/测试.xlsx"));
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 获取单元格区域
CellRange cell = sheet.getCellRange("C2");
// 读取 C2 单元格中的文本
String text = cell.getText();
// 将文本设置为 RichText
cell.getRichText().setText(text);
// 创建字体对象并设置为下标
ExcelFont subFont = workbook.createFont();
subFont.isSubscript(true);
// 为单元格中指定字符设置下标
cell.getRichText().setFont(2, 2, subFont);
cell.getRichText().setFont(7, 7, subFont);
cell.getRichText().setFont(13, 13, subFont);
// 自动调整列宽
sheet.getAllocatedRange().autoFitColumns();
// 保存 Excel 文件
workbook.saveToFile("/单元格内设置下标.xlsx", ExcelVersion.Version2016);
}
}
输出文件结果预览:

本指南详细介绍了在 Excel 中设置下标的方法,无论是针对单个单元格还是整个区域,无论是只需处理一个字符还是多个匹配,都能轻松实现。看完本文后,你会发现,在 Excel 中插入下标其实并不复杂。现在就试试 Spire.XLS,开始创建更专业的 Excel 文档吧!
Spire.Presentation for Java 10.9.3 已发布。该版本新增了一个快速获取文档页数的方法,此外还修复了几个在转换幻灯片到图片时出现的问题。详情请查看以下内容。
新功能::
流方式:
InputStream stream=new FileInputStream(inputFile);
int count = Presentation.getSlidesCount(stream);
文件路径方式:
int count = Presentation.getSlidesCount(inputFile);
问题修复::
https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html
Spire.PDF 11.9.8 现已正式发布。该版本在 NETStandard DLL 中新增 SaveAsImage 方法,以支持在转换 PDF 到图片时自定义图片 DPI,并新增 Collate 属性以设置多份打印的顺序。同时,还修复了在 PDF 转换、字体嵌入和注释渲染过程中出现的一些问题。更多详情如下:
新功能::
// true:逐份打印 ; 默认false:逐页打印
doc.PrintSettings.Collate = true;
问题修复::