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

Command to retrieve all non-empty block-content from Excel workbooks?

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

我目前正在使用 $Sheet.Cells.Item(row, col).Text 来获取单个值作为文本,但需要遍历整个块:我需要对块进行 2 次循环并将其保存为 CSV,或者为 $Sheet,有现成的 PowerShell 方法可用吗? PowerShell 中有哪些循环选项可用?

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

$XLSDoc = 'C:\Users\hhh\Desktop.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)
}

以下代码从代码 中创建一个函数,然后遍历目录中的所有 xlsx 文件,添加替换和修剪以避免每个文件 216 个字符的限制。然后它将CSV文件输出到每个sheet.

的目录中
 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.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)
 }