从 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)
}
我有一个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)
}
以下代码从代码
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)
}