冰蓝科技
|
028-81705109
|
|
微信扫一扫
|

Spire.Cloud 纯前端文档控件

C#写入数据到Excel

Excel 作为最常用的数据管理与分析工具之一,被广泛应用于各类数据处理场景。在 C# 应用程序开发过程中,无论是生成业务报表、导出数据库查询结果,还是实现自动化办公流程,C# 写入 Excel 的功能都扮演着至关重要的角色。

借助 Spire.XLS for .NET这一强大的第三方库,开发者无需在运行环境中安装 Microsoft Excel,即可高效、灵活地实现 Excel 文件的创建、写入与导出操作。本文将系统讲解如何 使用 C# 写入 Excel 文件 ,包括不同数据类型的插入方法、批量数据写入技巧、文件保存与导出,助力开发者提升数据处理与自动化能力。

文章目录:

Spire.XLS for .NET 简介与安装

什么是 Spire.XLS for .NET

Spire.XLS for .NET 是由 E-iceblue 开发的一款专业 Excel 库。它允许开发人员在 C# 中写入 Excel 文件,并执行包括创建、编辑、读取和导出 Excel 文档在内的多种操作,而无需安装 Microsoft Excel。

主要功能包括:

  • 通过编程写入和更新 Excel 文件
  • 支持 Excel 格式(XLS、XLSX、CSV、ODS)
  • 提供高级功能,如公式、图表、数据透视表和数据验证
  • 将 Excel 导出为 PDF、HTML 和图片格式
  • 在处理大型数据集时保持高性能,适用于桌面、服务器和 Web 应用程序

如何安装 Spire.XLS for .NET

方式一:通过 NuGet 安装(推荐)

  1. 打开 Visual Studio。
  2. 依次选择 工具 > NuGet 包管理器 > 管理解决方案的 NuGet 包...
  3. 搜索 Spire.XLS 并安装。

或直接使用包管理器控制台:

PM> Install-Package Spire.XLS

方式二:手动安装

  1. 从官网下载 Spire.XLS 安装包。
  2. 在项目中添加对 Spire.Xls.dll的引用。

安装完成后,你就可以在 C# 中开始写入 Excel 了。

如何在 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 文件。接下来我们将向其中写入数据。

C# 向 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 = "一般数据";

写入不同数据类型到Excel单元格

你可能会感兴趣:C# 读取 Excel 数据

C# 将批量数据写入 Excel 工作表

处理大型数据集时,逐个单元格写入效率很低。Spire.XLS 提供了直接插入数组和 DataTable 的方法,其他数据结构可以先转换为数组或 DataTable。

写入数组到 Excel

使用 Worksheet.InsertArray方法,可以将一维或二维数组写入指定区域:

string[,] data = {
    { "姓名", "年龄", "国家" },
    { "张三", "30", "中国" },
    { "李四", "28", "中国" },
    { "王五", "35", "加拿大" }
};

sheet.InsertArray(data, 1, 1);

效果图:

将数组写入Excel

写入 DataTable 到 Excel

使用 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);

效果图:

将DataTable写入Excel

此外,你还可以使用 Worksheet.ExportDataTable 方法将 Excel 数据导出为 DataTable

写入 List 到 Excel

虽然 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;
        }
    }
}

效果图:

将List写入Excel

保存和导出 Excel 文件

写入数据后,你需要保存或导出 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
}

常见问题与解决方案

  1. 日期/时间格式错误

    • 问题:日期/时间显示为序列号。
    • 解决办法:设置正确的单元格格式。
  2. 数据覆盖或错位

    • 问题:数组或 DataTable 写入时覆盖现有数据。
    • 解决办法:检查 InsertArray/InsertDataTable 的起始行列参数。
  3. 大数据集写入性能低

    • 问题:数千行写入速度慢。
    • 解决办法:使用批量写入方法,避免逐单元格写入。
  4. 公式未正确计算

    • 问题:写入的公式未返回预期结果。
    • 解决办法:检查公式语法,必要时调用 workbook.CalculateAllValue()。

总结

在 C# 中实现 Excel 写入功能既直观又高效。借助 Spire.XLS for .NET,无论是写入单个数值、文本、日期,还是处理大规模结构化数据集,都能轻松胜任。该库不仅支持单元格样式、公式计算、条件格式等高级功能,还能精准控制输出效果,确保最终生成的 Excel 文件数据准确、外观专业。

通过数组或 DataTable 进行批量数据写入,可大幅提升数据输出效率,灵活应对不同体量的数据导出需求。若你正在寻找一种稳定、高效且无需依赖 Microsoft Excel 环境的文件生成方案,Spire.XLS for .NET 无疑是一个理想的技术选择。

常见问答(FAQs)

Q1. 我能用 Spire.XLS 写入已有的 Excel 文件吗?

可以。使用 workbook.LoadFromFile("file.xlsx") 打开文件,然后修改并保存。

Q2. Spire.XLS 是否需要安装 Microsoft Excel?

不需要,它是一个独立库。

Q3. Spire.XLS 能处理包含成千上万行的大文件吗?

可以,它针对大数据集做了性能优化。

Q4. 写入数据时如何设置单元格样式?

你可以通过以下方式设置字体、颜色、边框和对齐方式:

sheet.Range["A1"].Style.Font.IsBold = true;
sheet.Range["A1"].Style.Color = Color.Yellow;
sheet.Range["A1"].Style.HorizontalAlignment = HorizontalAlignType.Left;

申请临时License

如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。

Spire.XLS 15.9.7 现已发布。该版本新增 IXlsEquation 接口用于创建和修改数学公式,并且还支持 ISOMITTED 和 LAMBDA 函数。此外,一些在转换Excel到PDF和复制工作表时出现的问题也已成功被修复。详情如下。

优化:

新功能:

问题修复:


下载Spire.XLS 15.9.7,请点击:

https://www.e-iceblue.cn/Downloads/Spire-XLS-NET.html

Spire.PDF for Python 11.9.2 现已正式发布。该版本针对文本替换和文档处理进行了优化,修复了字体渲染错误以及扁平化文档后内容丢失的问题。更多详情如下:

问题修复:


获取 Spire.PDF for Python 11.9.2 请点击:

https://www.e-iceblue.cn/Downloads/Spire-PDF-Python.html

Spire.Presentation 10.9.1 已正式发布。本版本修复了在多页 PowerPoint 演示文稿中,将 SVG 插入到指定 Shape 时会意外创建新幻灯片的问题。详情如下:

问题修复:


获取 Spire.Presentation 10.9.1,请点击:

https://www.e-iceblue.cn/Downloads/Spire-Presentation-NET.html

Spire.Barcode 7.4.1 已发布,该版本修复了创建条形码时应用个别字体不生效的问题,并移除了部分依赖项。具体更新如下:

调整:

修复:


获取 Spire.Barcode 7.4.1 请点击:

https://www.e-iceblue.com/Download/download-barcode-for-net.html

CSV 转 JSON Python 教程

CSV(逗号分隔值)是一种常见的表格文本格式,因其结构简单、体积小,常用于报表、日志和数据传输。但在现代开发中,Web 应用、接口(API)和 NoSQL 数据库更倾向于使用 JSON。相比 CSV,JSON 支持嵌套结构,表达能力更强,并且与 JavaScript 天然兼容,能更方便地在前端和服务端之间交换数据。

因此,将 CSV 转换为 JSON 已成为数据处理和系统集成中的常见需求。本文将介绍如何使用 Python 将 CSV 转换为多种 JSON 格式,包括扁平化 JSON、嵌套 JSON、按字段分组的 JSON,以及 JSON Lines(NDJSON)。

目录

为什么要将 CSV 转换为 JSON?

CSV 文件轻量且表格化,但缺乏层次结构。JSON 支持结构化和嵌套数据,非常适合 API 和应用程序使用。将 CSV 转换为 JSON 可以实现:

  • API 集成: 大多数 API 更偏好 JSON 格式。
  • 灵活的数据结构: JSON 支持嵌套对象。
  • Web 开发: JSON 与 JavaScript 原生兼容。
  • 数据库迁移: NoSQL 和云数据库通常要求 JSON。
  • 自动化处理: Python 脚本可高效处理 JSON。

Python CSV 转 JSON 转换库安装

本教程使用 Spire.XLS for Python 读取 CSV 文件,并使用 Python 内置的 json 模块进行 JSON 转换。

为什么选择 Spire.XLS?

  • 可将 CSV 文件加载到工作簿结构中,方便逐行或逐列访问。
  • 高效提取和操作数据。
  • 支持 CSV 转多种JSON格式,例如扁平化或嵌套JSON,以及 NDJSON。
  • 可导出 CSV 到 ExcelPDF 等其他格式。

安装 Spire.XLS

在终端中运行以下pip命令安装Spire.XLS库:

pip install spire.xls

安装完成后,即可将 CSV 数据转换为不同 JSON 格式。

Python 将 CSV 转换为扁平化 JSON

将 CSV 文件转换为扁平化 JSON 时,每一行 CSV 会生成一个对应的 JSON 对象,所有行被组合到一个 JSON 数组中,并使用首行数据作为键,这样数据结构清晰、便于后续处理

将 CSV 转换为扁平化 JSON 的步骤

  • 使用 Workbook.LoadFromFile 将 CSV 文件加载到工作簿中。
  • 选择要操作的工作表。
  • 从首行提取列名作为 JSON 的键。
  • 遍历后续每一行,将每列的值映射到对应的键。
  • 将每行生成的字典添加到列表中。
  • 使用 json.dump 将列表写入 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()

输出 JSON

Python CSV 转扁平化 JSON 示例

Python 将 CSV 转换为嵌套 JSON

当 CSV 中的一行包含相关的列时,可以将这些列组合成嵌套的 JSON 对象。例如,街道和城市两列可以合并为一个地址对象。每一行 CSV 会转换成一个 JSON 对象,并可能包含一个或多个嵌套的子对象。这种方式特别适用于需要将层级数据组织到单条记录中的场景,例如 API 响应或应用配置

将 CSV 转换为嵌套 JSON 的步骤

  • 加载 CSV 文件并选择工作表。
  • 确定哪些列需要组成嵌套对象(如 街道 和 城市)。
  • 遍历每一行,构建包含嵌套字段的 JSON 对象。
  • 将每个嵌套对象添加到列表中。
  • 使用 json.dump 将列表写入 JSON 文件。

代码示例

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()

输出嵌套 JSON

Python CSV 转嵌套 JSON 示例

Python 将 CSV 转换为按字段分组的 JSON

当 CSV 中的多行数据属于同一个父实体时,可以将这些行合并到一个父对象下。例如,在处理订单时,一个订单可能包含多件商品,可以将同一订单的所有商品放入该订单对象的“商品”数组中。每个订单都有唯一标识(如订单编号),其对应的子行会归属于该订单。这种方法适合处理电子商务订单或任何需要将多行相关数据组合成一个整体的场景。

将 CSV 转换为按字段分组 JSON 的步骤

  • 加载 CSV 文件并选择工作表。
  • 使用 defaultdict 按父键(如 订单编号)对行进行分组。
  • 遍历每行,将子项添加到对应父对象的 “商品” 数组中。
  • 将分组字典转换为对象列表。
  • 写入 JSON 文件。

代码示例

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

Python CSV 转按字段分组 JSON 示例

Python 将 CSV 转换为 JSON Lines(NDJSON)

与普通 JSON 数组不同,JSON Lines(也叫 NDJSON,即 Newline Delimited JSON)将每个 JSON 对象单独写在一行,既方便流式处理,又能兼容大数据工具。

为什么使用 NDJSON?

  • **支持流式处理:**可逐条处理数据记录,无需一次性将整个文件加载到内存中,适合大数据场景。
  • **大数据工具兼容:**Elasticsearch、Logstash、Hadoop 等系统都能原生处理 NDJSON。
  • **增强容错性:**即使某行数据损坏,其余行仍可正常使用,不影响整体文件。

将 CSV 转换为 NDJSON 的步骤

  • 加载 CSV 文件并选择工作表。
  • 提取首行作为 JSON 的键。
  • 遍历每行,将其映射为 JSON 对象,并逐行写入NDJSON文件,每行一个 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()

输出 NDJSON

Python CSV 转 NDJSON 示例

大型 CSV 文件转 JSON 处理方法

对于比较大的 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()

CSV 转 JSON 的实用建议

在 Python 中将 CSV 转换为 JSON 时,遵循以下实用建议可以确保数据的完整性和兼容性:

  • 始终使用 CSV 表头作为 JSON 键:确保每列数据都有明确的键名,便于后续访问和处理。
  • 处理缺失值:对空值使用 null 或预设的默认值,避免数据不完整。
  • 统一数据类型:将数字字符串转换为整数或浮点数,以保持数据类型一致。
  • 使用 UTF-8 编码保存 JSON 文件:保证中文和特殊字符正确显示。
  • 大文件逐行处理:针对大 CSV 文件,采用逐行或分批写入 JSON 的方式,减少内存占用。
  • 写入后验证 JSON 结构:尤其是嵌套 JSON,要确保格式正确,避免解析错误。

总结

在 Python 中将 CSV 转换为 JSON,可以让数据处理更加高效,并方便用于现代应用程序。借助 Python 及像 Spire.XLS for Python 这样的库,你可以:

  • 将扁平的 CSV 文件转换为结构化的 JSON 对象;
  • 将相关的 CSV 数据组织成嵌套的 JSON 结构;
  • 将多行 CSV 数据按逻辑分组,生成便于分析或 API 使用的 JSON 对象;
  • 为大数据集或流式处理场景创建 JSON Lines(NDJSON)格式;
  • 高效处理大型 CSV文件,而无需一次性加载所有数据到内存中。

通过这些方法,你可以高效地将 CSV 数据转换为多种 JSON 格式,并应用到 API 开发、系统集成、大数据处理等实际场景中。

常见问题解答(FAQs)

Q1:如何在 Python 中将带表头的 CSV 转换为 JSON?

A1: 如果 CSV 文件有表头,可使用首行作为键,将后续行映射为字典。使用 Spire.XLS 时,可通过 sheet.Range[1, j].Text 获取表头内容。

Q2:如何在 Python 中将 CSV 转换为嵌套 JSON?

A2: 找出相关列(例如 街道 和 城市),在构建 JSON 时将它们组合成子对象。参考上文的嵌套 JSON 示例。

Q3:处理大文件 CSV 转 JSON 的最佳方法是什么?

A3: 使用流式处理方式,即逐行处理并立即写入 JSON,而不是一次性将所有数据加载到内存中。

Q4:Spire.XLS 能处理自定义分隔符的 CSV 文件吗?

A4: 可以。在 LoadFromFile 方法中指定分隔符,例如 "," 或 ";"。

Q5:如何将 JSON 再转换回 CSV?

A5: 使用 Python 的 json 模块将 JSON 文件读取为字典列表,然后用 Spire.XLS for Python 写回 CSV。

Q6:如何在 Python 中将 CSV 转为 JSON Lines(NDJSON)?

A6: JSON Lines(NDJSON)格式会将每个 JSON 对象写在单独的一行。可逐行将 CSV 数据写入输出文件,这样内存占用低,并且兼容 Elasticsearch、Logstash 等大数据处理工具。

如何使用 Python 代码将数据写入 Excel 工作表

Excel 是最常用的数据整理、分析和展示工具之一。无论是财务报表还是运营仪表盘,很多场景都需要将数据导出到 Excel,以便阅读和共享。相比手动输入,通过 Python 自动化写入 Excel 文件 能让处理过程更高效、更可靠,也具备更好的扩展性。

在本文中,我们将介绍如何 使用 Python 将数据写入 Excel 文件,内容涵盖结构化数据插入、格式设置以及数据导出。文中示例所用库支持在代码中直接创建并自定义工作簿。

本教程包含内容:

  1. 环境准备
  2. 写入数据到 Excel 文件
  3. 写入时的格式设置
  4. 处理多个工作表
  5. 最佳实践
  6. 总结
  7. 常见问题

环境准备

在 Python 中写入 Excel 文件,需要使用支持创建、加载和保存工作簿的库。Spire.XLS for Python 提供完整的 API,可以轻松实现自动化报表生成和数据处理。

使用 pip 安装:

pip install spire.xls

安装完成后,可以通过以下三种核心操作来处理 Excel 文件:

  • 创建新工作簿 – 使用 Workbook() 初始化 Excel 文档。
  • 加载现有工作簿 – 使用 LoadFromFile() 打开已有 Excel 文件。
  • 保存工作簿 – 使用 SaveToFile() 将工作簿导出为 .xlsx、.xls、CSV 等格式。

这些操作构成了后续写入数据、设置格式和管理多工作表的基础。

使用 Python 将数据写入 Excel 文件

在实际业务中,可能需要新建 Excel 文件、更新现有报表,或者写入不同类型的数据(如文本、数字、日期和公式)。下面展示了在这些常见场景下,如何高效地 用 Python 在 Excel 中写入和管理数据

向现有 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)

关键点:

  • LoadFromFile() – 加载现有 Excel 文件。
  • Range["单元格"] – 通过名称引用单元格。
  • Value / NumberValue – 向单元格写入文本或数值。
  • SaveToFile() – 保存文件到指定格式。

这种方式能让报表在不丢失原始内容的情况下持续更新。

示例效果:

用 Python 在现有 Excel 文件中追加行

批量写入多行多列数据

对于大规模数据,逐行逐列写入效率低,推荐一次性写入整个数据集。这样不仅节省时间,还能保证数据在表格中的一致性:

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)

要点:

  • enumerate() – 获取行列索引。
  • Range[row, col] – 通过行列索引引用单元格。

批量写入非常适合导出数据库查询结果或生成运营报表。

效果示例:

用 Python 批量写入 Excel 数据

写入不同类型的数据

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)

常用属性:

  • Value – 一般值,适合文本或混合内容。
  • NumberValue – 数字值,保证格式和计算正确。
  • DateTimeValue – 日期时间值。
  • Formula – 设置公式,实现动态计算。
  • BooleanValue – 布尔值 True/False。
  • Text – 单元格显示文本。

效果示例:

用 Python 写入文本、数字、日期和公式到 Excel 文件

在写入 Excel 时应用格式设置

为了让 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

核心属性:

  • Style.Font – 控制字体样式(加粗、下划线等)。
  • Interior.Color – 单元格背景色。
  • Borders.LineStyle – 单元格边框样式。

样式能突出重点区域,增强可读性。

设置数字格式

通过 NumberFormat,可以将数字显示为货币、百分比等格式:

# 设置数字格式
sheet.Range["C2:C3"].NumberFormat = "¥#,##0.00"   # 货币格式
sheet.Range["D2:D3"].NumberFormat = "0"           # 整数格式
sheet.Range["E2:E3"].NumberFormat = "¥#,##0.00"

要点:

  • NumberFormat – 控制数字显示方式,数据本身不变。
  • 可定义符号、小数位、百分比等展示规则。

适当的数字格式能让财务数据更直观、更专业。更多内容可参考 如何用 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)

关键点:

  • AutoFitColumn / AutoFitRow – 自动调整单列/单行。
  • AutoFitColumns / AutoFitRows – 调整指定区域。
  • Width / Height – 手动设置固定宽高。

灵活使用自动调整和固定尺寸,可以保证报表既整齐又美观。

效果示例:

用 Python 应用 Excel 样式及自动调整列宽

更多高级格式技巧(如条件格式),可参考 Python 设置 Excel 样式指南

使用 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)

主要方法:

  • Worksheets[Index] – 按索引访问工作表。
  • Worksheets["单元格名称"] – 按单元格名称(如 A1)访问,更直观。
  • Worksheets.Add("名称") – 新增工作表,适合分类存储不同数据。

合理管理多个工作表能让数据更有条理。

生成 Excel 文件效果:

用 Python 创建和管理多个 Excel 工作表

使用 Python 写入 Excel 的最佳实践

在写入 Excel 文件时,建议遵循以下原则:

  • 使用描述性表名,如 “Sales_2024” 而非 “Sheet1”。
  • 批量写入大数据集,避免逐单元格操作,提高性能。
  • 保持格式一致,特别是表头、合计列。
  • 利用公式,保持动态计算。
  • 验证数据类型,避免在图表或公式中出错。
  • 选择合适文件格式:现代场景用 .xlsx,兼容性需求用 .xls。
  • 逻辑组织工作表,便于导航和管理。

遵循这些规范,能生成更专业、可复用的报表。

总结

使用 Python 自动化写入 Excel,可以大幅提升报表生成效率。通过创建工作簿、批量写入数据、应用样式、管理多工作表以及支持多种数据类型,开发者可以轻松生成一致、准确且专业的 Excel 文件。更多功能可 申请免费临时许可证 或试用 Free Spire.XLS for Python

Python 写入 Excel 常见问题

Q1: Python 可以写入已有 Excel 文件吗?

可以。Python 能加载已有文件,在保留原有数据的同时追加或修改内容。

Q2: 如何高效处理大数据集?

批量写入多行数据,并在插入时尽量减少格式操作,可以保证性能。

Q3: 可以在 Excel 文件中添加公式吗?

可以。支持输入公式(如 =SUM()),并保持动态计算。

Q4: Spire.XLS for Python 支持操作哪些 Excel 格式?

Spire.XLS for Python 支持保存为 .xlsx、.xls、CSV,还可以导出为 PDF,满足不同兼容性需求。

Java 在 Excel 文件中给新文本设置下标

当 Excel 表格中包含化学式、统计脚注或科学数据时,往往需要使用下标来表示。这不仅能够让数据更加清晰,也使文档更加专业。但是,Microsoft Excel 自带的下标功能操作比较繁琐,而且也不支持批量应用,手动操作通常需要花费大量的时间。 基于此,本篇指南将介绍如何使用 Java 实现轻松在 Excel 中插入下标,高效完成工作任务。

安装专业的 Java 库

在 Java 中为 Excel 插入下标需要借助相关的 Java 库。本文将以 Spire.XLS for Java 为例来演示这一过程。Spire.XLS 是一款功能强大的 Java 组件,它无需依赖 Microsoft Office 就能独立运行。除了读取、编辑和转换 Excel 文件外,还支持执行各种高级操作。

在你的设备上安装该库有两种方式:

  1. 如果你使用 Maven,只需在 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.xls</artifactId>
        <version>15.11.3</version>
    </dependency>
</dependencies>
  1. 如果你更倾向于手动安装,可以先下载 Spire.XLS 的安装包,然后将其中的 .jar 文件添加到你的 Java 开发环境中。

在 Excel 中插入下标:如何为新文本添加下标

完成 Java 库安装后,接下来,我们来看如何在 Excel 单元格中插入带有下标格式的新文本。通过在创建新文档时直接设置下标,你可以一次性生成最终文件,而无需再重新打开进行二次调整。

操作步骤——使用 Java 在 Excel 中插入新文本并设置下标:

  • 创建一个 Workbook 并获取工作表。
  • 使用 Worksheet.getCellRange() 方法获取单元格区域。
  • 通过 CellRange.getRichText().setText() 方法设置文本内容。
  • 使用 Workbook.createFont() 方法创建字体。
  • ExcelFont.isSubscript() 属性设置为 true。
  • 使用 RichText.setFont(startIndex, endIndex, font) 方法,将字体应用到单元格中指定范围的文本。
  • 调用 Worksheet.getAllocatedRange().autoFitColumns() 方法,设置修改后的文本自动调整列宽。你还可以根据需要自己设置行高列宽

下面的代码演示了如何在单元格 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);  
    }  
}

插入下标的输出结果文件预览: Java 在 Excel 文件中给新文本设置下标

提示如果将 ExcelFont.isSuperscript() 设置为 true,就可以在 Excel 文件中为文本应用上标效果。

在 Excel 中插入下标:为已有文本应用下标

虽然在创建新 Excel 文件时直接插入下标能简化后续工作,但在大多数情况下,你需要处理的是已经包含内容的现有文件。本节将演示如何使用 Java 快速为 Excel 中的已有文本设置下标格式。

操作步骤——在已有文本的 Excel 文件中插入下标:

  • 创建一个 Workbook 实例并加载 Excel 文件。
  • 获取工作表和单元格区域。
  • 遍历单元格,查找需要设置下标的文本。
  • 使用 RichText.setText() 方法将单元格文本设置为富文本,以保留原有内容。
  • 通过 Workbook.createFont() 方法创建字体,并将 ExcelFont.isSubscript() 设置为 true
  • 使用 RichText.setFont(index, index, subFont) 方法为目标文本应用下标。

下面的代码演示了如何在 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);
    }
}

输出文件结果预览:

Java 在 Excel 文件中给已有文本设置下标

上面的代码可以帮助我们在已有单元格中找到并将第一个匹配字符设置为下标。但如果同一个字符在单元格中出现多次,又该如何一次性为所有匹配字符应用下标呢?接下来我们来讲解这一部分。

在 Excel 中插入下标:处理单元格中的多个匹配

当单元格中只需要为一个字符设置下标时(例如 H₂),使用“查找并应用”方法就足够了。然而,如果单元格包含化学方程式,情况就复杂得多:可能有多个地方需要下标,同时还存在表示系数的普通数字(如 2H₂ + O₂ → 2H₂O)。这种情况下,需要通过指定文本中目标字符的精确位置来精准设置下标。下面是详细步骤。

操作步骤——在 Excel 单元格中插入多个下标:

  • 创建 Workbook 对象并读取 Excel 文件。
  • 获取工作表和单元格区域。
  • 读取单元格文本,并使用 CellRange.getRichText().setText() 方法将其设置为富文本。
  • 调用 Workbook.createFont() 方法创建字体,并通过 ExcelFont.isSubscript() 设置为下标。
  • 使用 CellRange.getRichText().setFont(index, index, subFont) 方法,将下标应用到文本中指定的字符位置。

下面的代码演示了如何在单元格 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);
    }
}

输出文件结果预览:

通过 Java 在单元格内给文本插入下标

总结

本指南详细介绍了在 Excel 中设置下标的方法,无论是针对单个单元格还是整个区域,无论是只需处理一个字符还是多个匹配,都能轻松实现。看完本文后,你会发现,在 Excel 中插入下标其实并不复杂。现在就试试 Spire.XLS,开始创建更专业的 Excel 文档吧!

Spire.Presentation for Java 10.9.3 已发布。该版本新增了一个快速获取文档页数的方法,此外还修复了几个在转换幻灯片到图片时出现的问题。详情请查看以下内容。

新功能::

问题修复::


获取Spire.Presentation for Java 10.9.3请点击:

https://www.e-iceblue.cn/Downloads/Spire-Presentation-JAVA.html

Spire.PDF 11.9.8 现已正式发布。该版本在 NETStandard DLL 中新增 SaveAsImage 方法,以支持在转换 PDF 到图片时自定义图片 DPI,并新增 Collate 属性以设置多份打印的顺序。同时,还修复了在 PDF 转换、字体嵌入和注释渲染过程中出现的一些问题。更多详情如下:

新功能::

问题修复::


获取 Spire.PDF 11.9.8 请点击:

https://www.e-iceblue.cn/Downloads/Spire-PDF-NET.html