Можно работать с необработанными данными Excel, но вам придется «перепроектировать» формат. Мне удалось получить некоторые полезные данные из простого листа очень .
Чтобы проверить и поэкспериментировать с этим, создайте пустую папку и сохраните документ Excel как Book1xlsx
с некоторыми значениями, например это:
| Name | Value |
| adf | 5 |
| fgfdg | 4 |
| dfgdsfg | 3 |
Затем поместите туда этот скрипт и посмотрите результат. Если ваши данные более продвинуты, вам, вероятно, придется потратить немало времени на выяснение того, как называются разные типы и листы, и как их искать.
unzip Book1.xlsx
[xml]$sheet = Get-Content "xl\worksheets\sheet1.xml"
[xml]$strings = Get-Content "xl\sharedStrings.xml"
$stringsTable = $strings.sst.si.t
$data = $sheet.worksheet.sheetData.row | % {
# Each column for each row is in the "c" variable
# (The ,@() is a hack to avoid powershell from turning everything into a single array)
return ,@($_.c | % {
# There is a "t" property that represents the type.
if ($_.t -like "s") {
# "s" means a string. To get the actual content we need to look up in the strings xml
return $stringsTable[$_.v]
} elseif ($_.t -like "") {
# Empty type means integer, we can return the value as is
return $_.v
}
})
}
# Data will be a 2 dimensional array
# $data[0][0] will refer to A1
# $data[1][0] will refer to A2
# $data[0][1] will refer to B1
$data
Надеюсь, это будет достаточно, чтобы вы начали.
Изменить: вот также код для преобразования двухмерного массива в PSObject
, который вы можете использовать с Export-Csv
.
$headers = $data[0]
$dataObject = $data | Select-Object -Skip 1 | % {
$row = $_
$index = 0
$object = @{}
foreach ($column in $row) {
$object[$headers[$index]] += $column
$index++
}
return [PSCustomObject]$object
}
$dataObject | Export-Csv ...