【发布时间】:2019-06-03 23:21:44
【问题描述】:
我有以下 Powershell 脚本将 XLSB 文件的第二张工作表转换为 CSV。
Function XLSBtoCSV ($Path)
{
foreach($File in (Get-childItem $Path -Filter "*.xlsb"))
{
$pwd = $Path
$excelFile = "$pwd\" + $File
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $false
$Excel.DisplayAlerts = $false
$wb = $Excel.Workbooks.Open($excelFile)
$ws = $wb.Worksheets.item(2)
$ws.SaveAs("$pwd\" + $File.BaseName + "-" + $ws.name + ".csv", 6)
$Excel.Quit()
}
}
$FilePath = Get-Location
XLSBtoCSV -Path $FilePath
这个脚本曾经可以工作,但不知何故现在它只保存了最后一个工作表(表 3)。我尝试更改为不同的工作表编号,但每次都会保存最后一个工作表。
【问题讨论】:
-
您能在
$wb = $Excel.Workbooks.Open($excelFile)之后添加$wb.Worksheets | select name并显示输出吗?我无法重现该问题。 -
我添加了 $ws.name 以跟踪选择的工作表。该名称实际上是正确的,但该文件仍保存有上一个工作表中的数据。
-
我的意思是-您可以将该命令的输出添加到您的问题中吗?如前所述,该代码对我有用。
-
它适用于我较小的文件。只有这种特殊类型的文件不起作用。输出显示名称 ----- 摘要、数据、数据字典。这些是所有 3 个工作表的名称。我只希望得到一个名字吗?
-
如果这适用于较小的文件,那么代码是正确的。也许您的文件有问题,但我无法重现,因此很难指出问题所在。我询问了
$wb.Worksheets | select name,因为我预计工作表的顺序不正确,而您选择了错误的。
标签: excel powershell