Скрипт Powershell - добавьте данные в Excel - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь изменить сценарий Windows Powershell, который я написал, от вывода csv до создания файла excel, потому что я хочу добавить изображения в свою электронную таблицу. Когда я добавляю данные в файл csv, я извлекаю значения из файла в различные переменные (отображаемые здесь как $ var1, $ var2 и $ var3 ...), а затем просто использую

Write-Output "$var1   $var2   $var3..." | Out-File file.csv

где я просто переключаюсь между переменными, чтобы поместить каждую в другой столбец. Есть ли простой способ сделать что-то похожее на листе Excel с помощью ComObject? Единственное, что я нашел, это разбить мои переменные на разные строки, например

$sh.Cells.Item($row, 1) = $var1
$sh.Cells.Item($row, 2) = $var2
$sh.Cells.Item($row, 3) = $var3
...

У меня много переменных, и я искал более чистый / простой способ добавления данных. Вот настройки моего файла Excel:

$xl = New-Object -ComObject Excel.Application -Property @{
Visible = $true
DisplayAlerts = $false
}

$wb = $xl.WorkBooks.Add()
$sh = $wb.Sheets.Item('Sheet1')

Я использую Windows 10 и у меня Powershell версии 5.0.

Любая помощь будет принята с благодарностью! Спасибо!

1 Ответ

0 голосов
/ 03 июля 2018

Используйте массив и вставьте его в Excel. Это намного быстрее, чем адресация каждого поля в отдельности. Вот пример того, как это работает:

$excel = New-Object -ComObject Excel.Application

$excel.Visible = $true
$excel.ScreenUpdating = $true

$workbook = $excel.Workbooks.Add()

$worksheet= $workbook.Worksheets.Item(1) 

# Array must type object!
$excelArray = New-Object 'object[,]' 4,5 

# Fill Array with some data
for( $row = 0; $row -lt $excelArray.GetLength(0); $row++ ) {
    for( $col = 0; $col -lt $excelArray.GetLength(1); $col++ ) {
        $excelArray[$row, $col] = '''' + $row.ToString() + '/' + $col.ToString()
    }
}

# Copy data to Excel
$range = $worksheet.Range('A1', ([char](64 + $excelArray.GetLength(1))).ToString() + $excelArray.GetLength(0).ToString() )
$range.Value2 = $excelArray
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...