怎样用脚本批量转换CSV为Excel?

wen 实用脚本 3

本文目录导读:

怎样用脚本批量转换CSV为Excel?

  1. 方法1:Python脚本(推荐)
  2. 方法2:批处理脚本(Windows)
  3. 方法3:VBA脚本(Excel宏)
  4. 方法4:使用Excel命令行工具
  5. 安装依赖
  6. 使用建议

我来介绍几种批量转换CSV为Excel的方法:

方法1:Python脚本(推荐)

使用pandas库

import pandas as pd
import os
from pathlib import Path
def csv_to_excel(input_folder, output_folder=None):
    """
    批量转换CSV文件为Excel文件
    """
    # 设置输出文件夹
    if output_folder is None:
        output_folder = os.path.join(input_folder, "excel_output")
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)
    # 获取所有CSV文件
    csv_files = list(Path(input_folder).glob("*.csv"))
    for csv_file in csv_files:
        try:
            # 读取CSV文件
            df = pd.read_csv(csv_file, encoding='utf-8-sig')
            # 生成输出文件名
            excel_name = csv_file.stem + ".xlsx"
            excel_path = os.path.join(output_folder, excel_name)
            # 保存为Excel文件
            df.to_excel(excel_path, index=False, engine='openpyxl')
            print(f"转换成功: {csv_file.name} -> {excel_name}")
        except Exception as e:
            print(f"转换失败 {csv_file.name}: {str(e)}")
# 使用示例
csv_to_excel("你的CSV文件夹路径")

带更多选项的版本

import pandas as pd
import os
import glob
def csv_to_excel_advanced(input_pattern, **kwargs):
    """
    高级转换,支持更多选项
    """
    # 参数设置
    output_folder = kwargs.get('output_folder', 'excel_output')
    encoding = kwargs.get('encoding', 'utf-8-sig')
    delimiter = kwargs.get('delimiter', ',')
    os.makedirs(output_folder, exist_ok=True)
    # 获取文件列表
    csv_files = glob.glob(input_pattern)
    for csv_file in csv_files:
        try:
            # 读取CSV
            df = pd.read_csv(
                csv_file, 
                encoding=encoding,
                delimiter=delimiter
            )
            # 生成输出文件名
            base_name = os.path.splitext(os.path.basename(csv_file))[0]
            output_path = os.path.join(output_folder, f"{base_name}.xlsx")
            # 保存Excel
            with pd.ExcelWriter(output_path, engine='openpyxl') as writer:
                df.to_excel(writer, sheet_name='Sheet1', index=False)
                # 自动调整列宽
                worksheet = writer.sheets['Sheet1']
                for column in df:
                    column_length = max(df[column].astype(str).map(len).max(), len(column))
                    col_idx = df.columns.get_loc(column)
                    worksheet.column_dimensions[chr(65 + col_idx)].width = min(column_length + 2, 50)
            print(f"✓ 转换完成: {os.path.basename(csv_file)}")
        except Exception as e:
            print(f"✗ 转换失败 {csv_file}: {str(e)}")
# 使用示例
csv_to_excel_advanced(
    "data/*.csv",  # 通配符模式
    output_folder="converted_excel",
    encoding='gbk',  # 如果是中文CSV,尝试gbk编码
    delimiter=','    # 分隔符
)

方法2:批处理脚本(Windows)

PowerShell脚本

# 批量转换CSV为Excel的PowerShell脚本
# 需要安装Excel COM组件
# 设置路径
$csvFolder = "C:\CSV_Files"
$excelFolder = "C:\Excel_Output"
# 创建输出文件夹
New-Item -ItemType Directory -Force -Path $excelFolder
# 创建Excel对象
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
# 遍历所有CSV文件
Get-ChildItem -Path $csvFolder -Filter "*.csv" | ForEach-Object {
    $csvFile = $_.FullName
    $excelFile = Join-Path $excelFolder "$($_.BaseName).xlsx"
    try {
        # 打开CSV文件
        $workbook = $excel.Workbooks.Open($csvFile)
        # 保存为Excel
        $workbook.SaveAs($excelFile, 51)  # 51 = xlOpenXMLWorkbook
        # 关闭工作簿
        $workbook.Close()
        Write-Host "转换完成: $($_.Name)"
    }
    catch {
        Write-Host "转换失败: $($_.Name) - $_"
    }
}
# 清理Excel对象
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

简化版PowerShell(无需Excel安装)

# 需要安装ImportExcel模块
Install-Module -Name ImportExcel -Scope CurrentUser
# 批量转换
$csvFolder = "C:\CSV_Files"
$excelFolder = "C:\Excel_Output"
Get-ChildItem -Path $csvFolder -Filter "*.csv" | ForEach-Object {
    $csv = $_.FullName
    $xlsx = Join-Path $excelFolder "$($_.BaseName).xlsx"
    Import-Csv $csv | Export-Excel $xlsx
    Write-Host "转换完成: $($_.Name)"
}

方法3:VBA脚本(Excel宏)

Sub BatchCSVtoExcel()
    Dim csvFolder As String
    Dim excelFolder As String
    Dim csvFile As String
    Dim wb As Workbook
    Dim fileName As String
    ' 设置路径
    csvFolder = "C:\CSV_Files\"  ' 修改为你的路径
    excelFolder = "C:\Excel_Output\"
    ' 确保输出文件夹存在
    If Dir(excelFolder, vbDirectory) = "" Then
        MkDir excelFolder
    End If
    ' 查找CSV文件
    csvFile = Dir(csvFolder & "*.csv")
    ' 关闭屏幕刷新以提高速度
    Application.ScreenUpdating = False
    ' 遍历所有CSV文件
    Do While csvFile <> ""
        ' 打开CSV文件
        Set wb = Workbooks.Open(csvFolder & csvFile)
        ' 生成文件名
        fileName = Left(csvFile, InStrRev(csvFile, ".") - 1) & ".xlsx"
        ' 保存为Excel
        wb.SaveAs excelFolder & fileName, xlOpenXMLWorkbook
        ' 关闭工作簿
        wb.Close False
        csvFile = Dir
    Loop
    Application.ScreenUpdating = True
    MsgBox "转换完成!"
End Sub

方法4:使用Excel命令行工具

使用Excel命令行的批处理文件

@echo off
setlocal enabledelayedexpansion
REM 设置路径
set CSV_DIR=C:\CSV_Files
set EXCEL_DIR=C:\Excel_Output
REM 创建输出目录
if not exist "%EXCEL_DIR%" mkdir "%EXCEL_DIR%"
REM 创建VBS脚本
echo Set objExcel = CreateObject("Excel.Application") > Convert.vbs
echo objExcel.Visible = False >> Convert.vbs
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >> Convert.vbs
echo csvFolder = "%CSV_DIR%" >> Convert.vbs
echo excelFolder = "%EXCEL_DIR%" >> Convert.vbs
echo For Each objFile In objFSO.GetFolder(csvFolder).Files >> Convert.vbs
echo     If LCase(objFSO.GetExtensionName(objFile.Name)) = "csv" Then >> Convert.vbs
echo         Set objWorkbook = objExcel.Workbooks.Open(objFile.Path) >> Convert.vbs
echo         excelName = objFSO.GetBaseName(objFile.Name) ^& ".xlsx" >> Convert.vbs
echo         objWorkbook.SaveAs excelFolder ^& "\" ^& excelName, 51 >> Convert.vbs
echo         objWorkbook.Close False >> Convert.vbs
echo         WScript.Echo "转换完成: " ^& objFile.Name >> Convert.vbs
echo     End If >> Convert.vbs
echo Next >> Convert.vbs
echo objExcel.Quit >> Convert.vbs
REM 运行VBS脚本
cscript //nologo Convert.vbs
REM 删除临时VBS文件
del Convert.vbs
echo 所有转换完成!
pause

安装依赖

Python依赖安装

pip install pandas openpyxl

PowerShell模块安装

Install-Module -Name ImportExcel -Scope CurrentUser

使用建议

  1. Python方法最灵活、跨平台,推荐使用
  2. 编码问题:中文CSV可能需要指定 encoding='gbk'encoding='utf-8-sig'
  3. 大数据量:如果CSV文件很大,考虑分块读取或使用dask
  4. 错误处理:建议添加异常处理和日志记录

选择适合你环境的方法即可!

抱歉,评论功能暂时关闭!