Использование powershell для извлечения данных из Excel и записи их в файл CSV - PullRequest
0 голосов
/ 30 апреля 2020

Привет пытался извлечь данные из файла Excel и сохранить его в формате CSV с помощью powershell. Мне нужен столбец B, чтобы быть заголовком и значения в столбце D во второй строке. У меня 53 строки.

снимок экрана файла Excel

enter image description here

enter image description here

Я написал приведенный ниже код powershell, который сохраняется в виде файла CSV, но кодировка неправильная. Когда я использую terraform csvcode, он выдает ошибку.

$strPath = "C:\project.xlsx"
$AssetInv = "C:\project.txt"
$AssetInvcsv = "C:\project.csv"
$objExcel = New-Object -ComObject Excel.Application
$objExcel.Visible = $false

$WorkBook = $objExcel.Workbooks.Open($strPath)
$worksheet = $workbook.sheets.item("Sheet1")

$c = 2
for ($r = 3; $r -le 53; $r++)
{
    $Data = 0
    $Data = $worksheet.Cells.Item($r, $c).Value2
    $Data1= [string]$Data
    $Data1 + "," | Out-File -filepath $AssetInv -append -NoNewline -Encoding utf8
}
$c = 4
for ($r = 3; $r -le 53; $r++)
{
    $Data = 0
    $Data = $worksheet.Cells.Item($r, $c).Value2
    $Data1= [string]$Data
    $Data1 + "," | Out-File -filepath $AssetInv -append -NoNewline -Encoding utf8
}
$objExcel.quit()

Я могу исправить эту проблему, сохранив файл как TXT-файл, а затем снова импортировав и экспортировав как CSV. Я не хочу сохранять его как TXT и снова импортировать и экспортировать как CSV. Как мне это сделать?

import-csv $AssetInv -delimiter "," | export-csv $AssetInvcsv -NoTypeInformation

1 Ответ

0 голосов
/ 30 апреля 2020

Посмотрите файлы справки для командлета Export-Csv. Тем не менее, если это настоящий файл .xl *, то Excel OM предоставляет методы для открытия .xl *, выполнения чего-либо и сохранения как .csv

$excel               = New-Object -ComObject Excel.Application
$excel.Visible       = $true
$excel.DisplayAlerts = $true

$wb    = $excel.Workbooks.Open($filepath)
# Do all your Excel file manipulations here

# Save, close, clean-up
$wb.SaveAs('D:\Temp\FileData.csv',6,'')
$excel.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$excel)
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...