为什么我的代码没有保存正确的工作表?

时间:2019-06-03 09:44:12

标签: excel powershell

我具有以下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页)。我试图更改为其他工作表编号,但每次都保存最后一个工作表。

1 个答案:

答案 0 :(得分:0)

非常接近。您需要遍历工作表中的项目,而不仅仅是调用另一个answer中所述的items(2):

Function XLSBtoCSV ($Path)
{
    foreach($File in (Get-childItem $Path -Filter "*.xlsb"))
        {

        $pwd = $Path

        $excelFile = "$pwd\" + $File

        try{
            $Excel = New-Object -ComObject Excel.Application

            $Excel.Visible = $false

            $Excel.DisplayAlerts = $false

            $wb = $Excel.Workbooks.Open($excelFile)

            # source https://stackoverflow.com/questions/16156951/how-to-iterate-through-excel-worksheets-only-extracting-data-from-specific-colum
            foreach($ws in $wb.Worksheets)
            {
                $ws.SaveAs("$pwd\" + $File.BaseName + "-" + $ws.name + ".csv", 6)
            }
        } 
        finally 
        {
            # close/dispose all the open parts of Excel
            if($Excel) 
            { 
                $Excel.Quit()
            }
        }
    }

}


$FilePath = Get-Location

XLSBtoCSV -Path $FilePath