命令从Excel工作簿检索所有非空块内容?

我有一个关于300行和10行大小的DataRepo表,大约有300个XLSX格式的Excel文件。 我需要读取每个Excel文件并将其存储为CSV(因为原始XLSX文件已被损坏,导致KeyError,除非用Excel手动重新保存,否则会导致KeyError,Python / R中的其他方法)。

我目前使用$Sheet.Cells.Item(row, col).Text获取单个值作为文本,但需要在整个块:或者我需要2块循环块,并保存CSV或find一些准备好的方法对于$Sheet ,任何现成的PowerShell方法可用? PowerShell中有哪些循环选项?

如何使用PowerShell检索Excel工作表中的所有非空内容?

 $XLSDoc = 'C:\Users\hhh\Desktop\1.xlsx' $SheetName = "DataRepo" $Excel = New-Object -ComObject "Excel.Application" $Workbook = $Excel.Workbooks.Open($XLSDoc) $Sheet = $Workbook.Worksheets.Item($SheetName) #Get data: $Sheet.Cells.Item(1,2).Text 

我可以在PowerShell中做类似于VBA的事情吗?

 Dim i As Integer Dim j As Integer i = 1 j = 1 Do While i < 10 Do While j < 10 Sheet.Cells.Item(i, j).Text j = j + 1 Loop i = i + 1 Loop 

使用这样的东西将每个工作表导出到一个单独的CSV:

 $wbName = $Workbook.Name $wbPath = $Workbook.Path $Workbook.Worksheets | ForEach-Object { $csvName = Join-Path $wbPath ('{0}_{1}.csv' -f $wbName, $_.Name) $_.SaveAs($csvName, 6) } 

以下代码在此处创build一个函数,然后遍历目录中的所有xlsx文件,添加replace和修剪以避免每个文件有216个字符的限制。 然后它将CSV文件输出到每个工作表的目录。

  Function ExportXLSXToCSVs ($XLSDoc) { $Excel = New-Object -ComObject "Excel.Application" $Workbook = $Excel.Workbooks.Open($XLSDoc) $wbName = $Workbook.Name $wbPath = $Workbook.Path $Workbook.Worksheets | ForEach-Object { $csvName = Join-Path $wbPath ('{0}_{1}.csv' -f $wbName, $_.Name) #Trim/replacements added to avoid the limit 216 chars per file $csvName = $csvName.Trim().Replace(" ", "") $_.SaveAs($csvName, 6) #CSV } } #DEMO 1 over a single file #ExportXLSXToCSVs('C:\Users\hhh\Desktop\1.xlsx') #DEMO 2 over all files in a directory Get-ChildItem "C:\Users\hhh\Desktop\Data\" -Filter *.xlsx | ForEach-Object { $myFile = $_.DirectoryName +"\"+ $_.Name ExportXLSXToCSVs($myFile) }