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

如何在Windows下用PowerShell提取xlsx指定工作表为文本文件

PowerShell批量提取Excel工作表转文本实现方案

下面提供两种适配不同环境的可直接使用的脚本方案:

方案1:依赖本地已安装的Microsoft Excel

该方案无需下载额外第三方模块,适合已经安装Office Excel的普通Windows设备。

# 自定义配置参数
$inputDir = "C:\替换为你的xlsx文件存放目录"
$outputDir = "C:\替换为生成文本文件的保存目录"
$targetSheet = "Approval_Logs"

# 自动创建输出目录(不存在时)
if (-not (Test-Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

# 初始化Excel后台进程
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false
# 定义文本保存格式:42对应制表符分隔的Unicode文本,和ssconvert默认输出格式一致
$xlTextFormat = 42

# 遍历目录下所有xlsx文件
Get-ChildItem -Path $inputDir -Filter "*.xlsx" -Recurse | ForEach-Object {
    $xlsxFullPath = $_.FullName
    $outputTxtPath = Join-Path $outputDir ($_.BaseName + "_Approval_Logs.txt")

    try {
        $workbook = $excel.Workbooks.Open($xlsxFullPath)
        $matchSheet = $workbook.Worksheets | Where-Object { $_.Name -eq $targetSheet }
        
        if ($matchSheet) {
            $matchSheet.SaveAs($outputTxtPath, $xlTextFormat)
            Write-Host "导出成功:$outputTxtPath"
        } else {
            Write-Host "跳过文件:$xlsxFullPath,未找到目标工作表"
        }
        $workbook.Close()
    } catch {
        Write-Host "处理文件$xlsxFullPath出错:$_"
        if ($workbook) { $workbook.Close() }
    }
}

# 释放Excel进程资源
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel

方案2:无需安装Excel,依赖ImportExcel第三方模块

该方案适合没有安装Office的Windows服务器、轻量设备,不需要启动Excel进程,运行效率更高。
首次运行前需要先执行以下命令安装依赖模块:
Install-Module -Name ImportExcel -Scope CurrentUser -Force

对应处理脚本:

# 自定义配置参数
$inputDir = "C:\替换为你的xlsx文件存放目录"
$outputDir = "C:\替换为生成文本文件的保存目录"
$targetSheet = "Approval_Logs"

# 自动创建输出目录(不存在时)
if (-not (Test-Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

# 遍历目录下所有xlsx文件
Get-ChildItem -Path $inputDir -Filter "*.xlsx" -Recurse | ForEach-Object {
    $xlsxFullPath = $_.FullName
    $outputTxtPath = Join-Path $outputDir ($_.BaseName + "_Approval_Logs.txt")

    try {
        # 直接读取目标工作表数据
        $sheetContent = Import-Excel -Path $xlsxFullPath -WorksheetName $targetSheet -ErrorAction Stop
        # 导出为UTF8编码的制表符分隔文本
        $sheetContent | Export-Csv -Path $outputTxtPath -Delimiter "`t" -Encoding UTF8 -NoTypeInformation
        Write-Host "导出成功:$outputTxtPath"
    } catch {
        Write-Host "跳过文件:$xlsxFullPath,未找到目标工作表或读取失败:$_"
    }
}
使用注意事项
  • 两种方案都支持递归扫描$inputDir下所有层级的xlsx文件,不需要的话可以去掉Get-ChildItem命令里的-Recurse参数
  • 方案1运行前建议关闭所有手动打开的Excel窗口,避免资源占用冲突导致处理失败
  • 方案2导出的文本编码默认为UTF8,可根据需求修改Export-Csv的-Encoding参数调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:01