Python多种场景下实现CSV转换为Excel文件

 更新时间:2026年04月01日 10:58:57   作者:用户033212666367  
在数据处理和分析工作流程中,将 CSV 文件转换为 Excel 格式是一项常见且实用的需求,本文将深入探讨如何使用 Python 实现多种场景下的 CSV 到 Excel 转换功能,感兴趣的可以了解下

在数据处理和分析工作流程中,将 CSV 文件转换为 Excel 格式是一项常见且实用的需求。CSV 作为一种简单的文本格式,虽然便于数据交换,但缺乏 Excel 提供的强大功能,如公式计算、图表制作等。掌握 CSV 到 Excel 的转换技术,可以让你充分利用 Excel 的数据处理能力,提升数据分析效率。本文将深入探讨如何使用 Python 实现多种场景下的 CSV 到 Excel 转换功能。

为什么需要将 CSV 转换为 Excel

CSV(逗号分隔值)文件被广泛用于数据存储和交换,但在实际应用中存在诸多局限:

  • 功能增强:Excel 支持公式计算、条件格式、数据验证等高级功能
  • 多工作表支持:可以在一个文件中组织多个相关的数据表
  • 可视化呈现:轻松创建图表、图形
  • 格式美化:应用单元格样式、字体格式、边框和背景色
  • 数据分析:使用筛选、排序、分类汇总等分析工具
  • 宏和自动化:支持 VBA 脚本实现自动化操作

通过 Python 自动化这一转换过程,可以实现批量处理、自动格式化、多表合并等功能,显著提升数据处理效率。

环境准备

在开始之前,需要安装支持 Excel 操作的 Python 库。Spire.XLS for Python 提供了全面的 API 来处理 XLSX 格式的工作簿,包括 CSV 导入和格式化功能。

pip install Spire.XLS

安装完成后,在 Python 脚本中导入相关模块即可开始工作:

from spire.xls import *
from spire.xls.common import *

基础转换流程

将 CSV 转换为 Excel 的核心步骤包括:创建工作簿对象、加载 CSV 文件、保存为 Excel 格式。以下是最基础的转换示例:

当你有一个标准的 CSV 文件需要转换为 Excel 格式时,可以使用 LoadFromFile() 方法直接加载 CSV 文件。这个方法会自动解析 CSV 的行列结构,并将数据填充到工作表中。这是最简单的转换方式,适用于快速将 CSV 数据转为可编辑的 Excel 格式:

from spire.xls import *
from spire.xls.common import *

inputFile = "销售数据.csv"
outputFile = "销售数据.xlsx" 

# 创建工作簿对象
workbook = Workbook()

# 加载 CSV 文件
# 参数说明:文件路径、分隔符、起始行、起始列
workbook.LoadFromFile(inputFile, ",", 1, 1)

# 获取第一个工作表
sheet = workbook.Worksheets[0]

# 自动调整列宽以适应内容
sheet.AllocatedRange.AutoFitColumns()

# 保存为 Excel 2013 格式
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()

上述代码展示了最基本的 CSV 到 Excel 转换流程。LoadFromFile() 方法接受四个参数:文件路径、分隔符(通常为逗号)、起始行索引、起始列索引。AutoFitColumns() 方法会自动调整列宽,使内容完整显示,提升可读性。

处理不同的 CSV 分隔符

虽然 CSV 通常使用逗号作为分隔符,但实际应用中可能会遇到使用分号、制表符或其他字符的情况。正确识别分隔符对于准确解析数据至关重要:

在某些地区或特定应用场景中,CSV 文件可能使用分号、制表符或竖线作为字段分隔符。例如,欧洲国家常用分号而非逗号,因为逗号在当地被用作小数点。了解如何指定正确的分隔符可以确保数据被正确解析:

from spire.xls import *
from spire.xls.common import *

# 分号分隔的 CSV 文件(常见于欧洲)
inputFile_semicolon = "欧洲数据.csv"
workbook1 = Workbook()
workbook1.LoadFromFile(inputFile_semicolon, ";", 1, 1)
workbook1.SaveToFile("欧洲数据.xlsx", ExcelVersion.Version2013)
workbook1.Dispose()

# 制表符分隔的文件(TSV 格式)
inputFile_tab = "数据导出.tsv"
workbook2 = Workbook()
workbook2.LoadFromFile(inputFile_tab, "\t", 1, 1)
workbook2.SaveToFile("数据导出.xlsx", ExcelVersion.Version2013)
workbook2.Dispose()

# 竖线分隔的文件
inputFile_pipe = "系统日志.csv"
workbook3 = Workbook()
workbook3.LoadFromFile(inputFile_pipe, "|", 1, 1)
workbook3.SaveToFile("系统日志.xlsx", ExcelVersion.Version2013)
workbook3.Dispose()

通过调整 LoadFromFile() 方法的第二个参数,可以轻松处理各种分隔符格式。常见的分隔符包括:逗号 ,、分号 ;、制表符 \t、竖线 |、空格等。

添加格式化样式

转换后的 Excel 文件默认只有原始数据,你可以通过添加格式使其更加专业和易读:

为了让转换后的 Excel 文件更具可读性和专业性,可以为标题行添加背景色、加粗字体、设置边框等格式。这些视觉上的改进有助于区分标题和数据,使表格结构更清晰,特别适合用于报告和演示:

from spire.xls import *
from spire.xls.common import *

inputFile = "员工信息.csv"
outputFile = "格式化员工信息.xlsx"

workbook = Workbook()
workbook.LoadFromFile(inputFile, ",", 1, 1)
sheet = workbook.Worksheets[0]

# 获取数据范围
dataRange = sheet.AllocatedRange

# 自动调整列宽
dataRange.AutoFitColumns()

# 格式化标题行(第一行)
headerRow = sheet.Rows[0]
headerRow.Style.Font.IsBold = True
headerRow.Style.Font.Color = Color.get_White()
headerRow.Style.KnownColor = Colors.DarkBlue

# 为整个数据区域添加边框
border = sheet.Range["A1"].Style.Borders.GetBorder(BordersLineType.EdgeTop)
border.Color = Color.get_Black()
border.LineStyle = LineStyleType.Thin

border = sheet.Range["A1"].Style.Borders.GetBorder(BordersLineType.EdgeBottom)
border.Color = Color.get_Black()
border.LineStyle = LineStyleType.Thin

border = sheet.Range["A1"].Style.Borders.GetBorder(BordersLineType.EdgeLeft)
border.Color = Color.get_Black()
border.LineStyle = LineStyleType.Thin

border = sheet.Range["A1"].Style.Borders.GetBorder(BordersLineType.EdgeRight)
border.Color = Color.get_Black()
border.LineStyle = LineStyleType.Thin

# 设置交替行颜色(斑马纹效果)
for i in range(1, sheet.LastRow + 1):
    row = sheet.Rows[i]
    if i % 2 == 0:
        row.Style.KnownColor = Colors.LightGray
    else:
        row.Style.KnownColor = Colors.White

# 保存文件
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()

这段代码演示了多种格式化技巧:标题行加粗并设置深色背景、为数据区域添加边框、创建交替行颜色效果。这些格式化操作虽然增加了代码复杂度,但显著提升了最终文档的专业度和可读性。

处理数字和日期格式

CSV 文件中的数字和日期通常以文本形式存储,转换后可以应用适当的格式以便进行计算和排序:

CSV 文件无法区分数据类型,所有值都存储为纯文本。这可能导致数字被识别为文本而无法计算,日期格式混乱等问题。在转换为 Excel 后,你可以为特定列应用数字格式和日期格式,使数据能够正确参与计算和排序:

from spire.xls import *
from spire.xls.common import *

inputFile = "财务数据.csv"
outputFile = "格式化财务数据.xlsx"

workbook = Workbook()
workbook.LoadFromFile(inputFile, ",", 1, 1)
sheet = workbook.Worksheets[0]

# 忽略数字被识别为文本的警告
sheet.Range["B2:D100"].IgnoreErrorOptions = IgnoreErrorType.NumberAsText

# 设置金额列为货币格式(假设 B 列是金额)
sheet.Columns[1].Style.NumberFormat = "¥#,##0.00"

# 设置百分比列(假设 C 列是百分比)
sheet.Columns[2].Style.NumberFormat = "0.00%"

# 设置日期列格式(假设 D 列是日期)
sheet.Columns[3].Style.NumberFormat = "yyyy-mm-dd"

# 自动调整列宽
sheet.AllocatedRange.AutoFitColumns()

# 保存文件
workbook.SaveToFile(outputFile, ExcelVersion.Version2013)
workbook.Dispose()

通过设置 NumberFormat 属性,可以为不同类型的数值应用适当的显示格式。常见的格式包括:货币 ¥#,##0.00、百分比 0.00%、日期 yyyy-mm-dd、科学计数法等。正确的格式设置不仅改善视觉效果,还确保数据能够正确参与计算。

实战:批量 CSV 转 Excel 工具

结合以上技术,可以构建一个批量将多个 CSV 文件转换为 Excel 的实用工具:

import os
from spire.xls import *
from spire.xls.common import *

class CSVToExcelConverter:
    def __init__(self):
        pass
    
    def convert_single(self, csv_file, excel_file, apply_formatting=True):
        """转换单个 CSV 文件为 Excel"""
        
        workbook = Workbook()
        
        # 尝试自动检测分隔符
        delimiter = self._detect_delimiter(csv_file)
        
        # 加载 CSV 文件
        workbook.LoadFromFile(csv_file, delimiter, 1, 1)
        sheet = workbook.Worksheets[0]
        
        # 自动调整列宽
        sheet.AllocatedRange.AutoFitColumns()
        
        # 可选:应用格式化
        if apply_formatting:
            self._apply_basic_formatting(sheet)
        
        # 保存 Excel 文件
        workbook.SaveToFile(excel_file, ExcelVersion.Version2013)
        workbook.Dispose()
        
        print("已转换:{0} -> {1}".format(
            os.path.basename(csv_file), 
            os.path.basename(excel_file)
        ))
    
    def _detect_delimiter(self, file_path):
        """自动检测 CSV 文件的分隔符"""
        with open(file_path, 'r', encoding='utf-8') as f:
            first_line = f.readline()
        
        # 统计常见分隔符的出现次数
        delimiters = [',', ';', '\t', '|']
        counts = {d: first_line.count(d) for d in delimiters}
        
        # 返回出现次数最多的分隔符
        return max(counts, key=counts.get)
    
    def _apply_basic_formatting(self, sheet):
        """应用基本格式化样式"""
        
        # 格式化标题行
        if sheet.LastRow >= 0:
            headerRow = sheet.Rows[0]
            headerRow.Style.Font.IsBold = True
            headerRow.Style.Font.Color = Color.get_White()
            headerRow.Style.KnownColor = Colors.DarkBlue
        
        # 设置交替行颜色
        for i in range(1, sheet.LastRow + 1):
            row = sheet.Rows[i]
            if i % 2 == 0:
                row.Style.KnownColor = Colors.LightGray
            else:
                row.Style.KnownColor = Colors.White
    
    def batch_convert(self, input_folder, output_folder, apply_formatting=True):
        """批量转换文件夹中的所有 CSV 文件"""
        
        if not os.path.exists(output_folder):
            os.makedirs(output_folder)
        
        csv_files = [f for f in os.listdir(input_folder) 
                    if f.lower().endswith('.csv')]
        
        for filename in csv_files:
            csv_path = os.path.join(input_folder, filename)
            excel_name = os.path.splitext(filename)[0] + '.xlsx'
            excel_path = os.path.join(output_folder, excel_name)
            
            self.convert_single(csv_path, excel_path, apply_formatting)
        
        print("批量转换完成!共处理 {0} 个 CSV 文件".format(len(csv_files)))
    
    def merge_multiple_csv(self, csv_files, output_excel):
        """合并多个 CSV 文件到一个 Excel 的不同工作表"""
        
        workbook = Workbook()
        workbook.Worksheets.Clear()
        
        for i, csv_file in enumerate(csv_files):
            if i == 0:
                # 第一个文件加载到默认工作表
                workbook.LoadFromFile(csv_file, ",", 1, 1)
                sheet = workbook.Worksheets[0]
                sheet.Name = os.path.splitext(os.path.basename(csv_file))[0]
            else:
                # 后续文件添加到新工作表
                temp_workbook = Workbook()
                temp_workbook.LoadFromFile(csv_file, ",", 1, 1)
                temp_sheet = temp_workbook.Worksheets[0]
                
                new_sheet = workbook.Worksheets.Add(
                    os.path.splitext(os.path.basename(csv_file))[0]
                )
                
                # 复制数据
                temp_range = temp_sheet.AllocatedRange
                temp_range.Copy(new_sheet.Range["A1"])
                
                temp_workbook.Dispose()
        
        # 统一调整列宽
        for sheet in workbook.Worksheets:
            sheet.AllocatedRange.AutoFitColumns()
        
        workbook.SaveToFile(output_excel, ExcelVersion.Version2013)
        workbook.Dispose()
        
        print("已合并 {0} 个 CSV 文件到:{1}".format(
            len(csv_files), 
            os.path.basename(output_excel)
        ))

# 使用示例
converter = CSVToExcelConverter()

# 单个文件转换
converter.convert_single("销售数据.csv", "销售数据.xlsx")

# 批量转换
converter.batch_convert("csv 数据文件夹", "excel 输出文件夹")

# 合并多个 CSV 到一个 Excel
csv_list = ["一月数据.csv", "二月数据.csv", "三月数据.csv"]
converter.merge_multiple_csv(csv_list, "季度汇总.xlsx")

这个工具类提供了:

  • 单个文件转换功能
  • 自动检测 CSV 分隔符
  • 批量转换整个文件夹的 CSV 文件
  • 合并多个 CSV 到单一 Excel 文件的不同工作表
  • 可选的格式化选项
  • 进度反馈和结果统计

常见问题与解决方案

问题 1:中文乱码

确保使用正确的编码读取 CSV 文件:

# 如果默认加载出现乱码,可以尝试指定编码
workbook.LoadFromFile(inputFile, ",", 1, 1)
# 或者先读取文件内容再处理

问题 2:数据被错误识别为文本

设置忽略错误选项或手动指定数据类型:

sheet.Range["A1:D100"].IgnoreErrorOptions = IgnoreErrorType.NumberAsText

问题 3:列宽不合适

使用自动调整或手动设置列宽:

sheet.AllocatedRange.AutoFitColumns()
# 或手动设置
sheet.Columns[0].ColumnWidth = 15

问题 4:大文件转换缓慢

考虑分批处理或优化内存使用:

# 处理大型 CSV 时,可以逐行读取并写入
# 而不是一次性加载整个文件

总结

将 CSV 转换为 Excel 是数据处理工作中的基础技能。通过本文的介绍,我们学习了:

  1. 使用 LoadFromFile() 方法进行基础 CSV 到 Excel 转换
  2. 处理不同分隔符的 CSV 文件(逗号、分号、制表符等)
  3. 为转换后的 Excel 添加格式化样式
  4. 设置数字格式和日期格式
  5. 构建批量转换和合并工具的实战应用

这些技术可以直接应用于数据导入导出、报表生成、数据迁移等实际场景。掌握了基础的转换方法后,还可以进一步探索数据验证、条件格式、图表生成等高级功能,构建更加完善的数据处理工作流。

以上就是Python多种场景下实现CSV转换为Excel文件的详细内容,更多关于Python CSV转Excel的资料请关注脚本之家其它相关文章!

相关文章

  • python实现跨域代理服务器的方法

    python实现跨域代理服务器的方法

    这篇文章主要介绍了python实现跨域代理服务器的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 分享10个有趣的Python程序

    分享10个有趣的Python程序

    这篇文章主要给大家分享的是10个有趣的Python程序,Python程序有许多模块和第三方包,这非常有助于高效编程,所以了解这些模块的正确使用方法是很重要的,下面详细内容,需要的小伙伴可以参考一下
    2022-02-02
  • python浅析守护线程与非守护线程的区别与使用

    python浅析守护线程与非守护线程的区别与使用

    守护线程,又称后台线程,它是在后台运行的,如果所有前台线程都死亡,那么后台线程就会自动死亡,本章我们来了解守护线程与非守护线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-08-08
  • Python Kivy基础教程的使用

    Python Kivy基础教程的使用

    本文主要介绍了Python Kivy基础教程的使用,包括 Label、Button、TextInput、Image、Spinner、Checkbox 和 ToggleButton 的用法,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Python导出依赖的五种方法

    Python导出依赖的五种方法

    本文主要介绍了Python导出依赖的五种方法,包括使用pip freeze、pipreqs、poetry、pip-tools和conda,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • pytorch dataset实战案例之读取数据集的代码

    pytorch dataset实战案例之读取数据集的代码

    这篇文章主要介绍了pytorch dataset实战案例读取数据集的相关知识,这段代码可以作为读取数据集的一个DataSet类的基础类,可以扩充进行修改,以后有类似需要可以拿过来修改,本文结合实例代码给大家详细讲解,需要的朋友可以参考下
    2022-10-10
  • python通过socket搭建极简web服务器的实现代码

    python通过socket搭建极简web服务器的实现代码

    python的web框架众多,常见的如django、flask、tornado等,其底层是什么还是有些许的疑问,所以查找相关资料,实现浏览器访问,并返回相关信息,本文将给大家介绍python通过socket搭建极简web服务器,需要的朋友可以参考下
    2023-10-10
  • pycharm导入第三方库的两种方法(永不报错)

    pycharm导入第三方库的两种方法(永不报错)

    这篇文章主要介绍了pycharm导入第三方库的两种方法(永不报错),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • 深入理解Python 多线程

    深入理解Python 多线程

    这篇文章主要介绍了Python 多线程的相关知识,文中讲解的非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • matplotlib之轻松解决中文乱码的问题

    matplotlib之轻松解决中文乱码的问题

    这篇文章主要介绍了matplotlib之轻松解决中文乱码的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09

最新评论