You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell将XLSX文件转为带双引号的CSV文件

解决XLSX转CSV时所有值加双引号的问题

你当前使用的Excel COM对象SaveAs方法(格式代码62),只会给包含逗号、换行等特殊字符的字段自动添加双引号,无法实现所有值都带引号的需求。以下提供两种可行的解决方法:

方法一:使用ImportExcel模块(推荐)

这个PowerShell模块专门处理Excel文件,导出CSV时可以直接指定强制给所有字段加引号,操作更简洁且无需处理COM对象残留问题。

# 首次运行需安装模块(执行一次即可)
# Install-Module -Name ImportExcel -Scope CurrentUser -Force

Function ExcelToCsvWithQuotes ($File) {
    $myDir = "C:\temp\"
    $excelFile = Join-Path $myDir "$File.xlsx"
    $csvFile = Join-Path $myDir "$File.csv"
    
    # 读取Excel并导出所有字段带双引号的CSV
    Import-Excel -Path $excelFile | Export-Csv -Path $csvFile -NoTypeInformation -UseQuotes Always
}

$FileName = "test_file"
ExcelToCsvWithQuotes -File $FileName

方法二:原生PowerShell手动处理(无需额外模块)

如果不想安装第三方模块,可以遍历Excel的每个单元格,手动给值添加双引号后拼接成CSV内容:

Function ExcelToCsvWithQuotes ($File) {
    $myDir = "C:\temp\"
    $excelFile = Join-Path $myDir "$File.xlsx"
    $csvFile = Join-Path $myDir "$File.csv"
    
    $Excel = New-Object -ComObject Excel.Application
    $Excel.Visible = $false
    $wb = $Excel.Workbooks.Open($excelFile)
    
    foreach ($ws in $wb.Worksheets) {
        $rows = @()
        $maxRow = $ws.UsedRange.Rows.Count
        $maxCol = $ws.UsedRange.Columns.Count
        
        # 逐行逐列处理单元格
        for ($row = 1; $row -le $maxRow; $row++) {
            $currentRow = @()
            for ($col = 1; $col -le $maxCol; $col++) {
                $cellValue = $ws.Cells.Item($row, $col).Text
                $currentRow += "`"$cellValue`""
            }
            $rows += $currentRow -join ","
        }
        $rows | Out-File -Path $csvFile -Encoding utf8
    }
    
    # 清理COM对象,避免Excel后台进程残留
    $Excel.Quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($ws) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($wb) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) | Out-Null
    [GC]::Collect()
    [GC]::WaitForPendingFinalizers()
}

$FileName = "test_file"
ExcelToCsvWithQuotes -File $FileName

两种方法都能输出你需要的格式:

Name,CompanyName
"Joe Bloggs","Contoso Company"

内容的提问来源于stack exchange,提问作者learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:24:13