Преобразование нескольких CSV в один Xlsx - PullRequest
0 голосов
/ 22 января 2019

У меня есть скрипт, который создает x количество CSV, я хочу преобразовать все CSV в папке в один файл Xlsx.

У меня есть основы циклического прохождения каждого CSV, однако он перезаписывается после окончания каждого цикла.

Я хочу добавить каждый CSV на лист в рабочей книге и сохранить его.

но он отображает только последний CSV, который он прочитал, и не показывает никаких других рабочих листов.

Я выбрал код из следующего:

Как экспортировать CSV в Excel с помощью Powershell

Как уже говорилось, я пробовал вышеизложенное; не повезло.

Function Excel-Write{
$RD = "C:\temp\Servers\*.csv"
$CsvDir = $RD

$csvs = dir -path $CsvDir
$outputxls = ""C:\temp\Servers\Complete.Xlsx"

foreach($iCsv in $csvs){
  $WB = $csvs.Length
    $Excel = New-Object -ComObject excel.application
    #$Excel.displayAlerts = $false
    $workbook = $excel.Workbooks.add(1)
    $Worksheet = $workbook.worksheets.Item(1)
    $Worksheet.name = $Group

    $TxtConnector = ("TEXT;" + $iCsv)
    $Connector = $worksheet.Querytables.add($txtconnector,$worksheet.Range("A1"))
    $query = $Worksheet.QueryTables.item($Connector.name)

    $query.TextfileOtherDelimiter = $Excel.Application.International(5)

    $Query.TextfileParseType =1
    $Query.TextFileColumnDataTypes = ,2 * $worksheet.cells.column.count
    $query.AdjustColumnWidth =1

    $Query.Refresh()
    $Query.Delete()

        $workbook.Save()

}
$Workbook.SaveAs($outputxls,51)
$Excel.quit()
} 

Показывает только один лист, и это последний CSV, который был прочитан, он перезаписывает другие листы.

1 Ответ

0 голосов
/ 22 января 2019

Я думаю, вам нужно вывести первые две строки из цикла.Также вам нужно вызвать add вместо $ workbook.worksheets.Item (1) -> $ workbook.worksheets.add (1)

Function Excel-Write{
$RD = "C:\temp\Servers\*.csv"
$CsvDir = $RD

$csvs = dir -path $CsvDir
$outputxls = ""C:\temp\Servers\Complete.Xlsx"
$Excel = New-Object -ComObject excel.application
$workbook = $excel.Workbooks.add(1)

foreach($iCsv in $csvs){
  $WB = $csvs.Length
    #$Excel.displayAlerts = $false
    $Worksheet = $workbook.worksheets.add(1)
    $Worksheet.name = $Group

    $TxtConnector = ("TEXT;" + $iCsv)
    $Connector = $worksheet.Querytables.add($txtconnector,$worksheet.Range("A1"))
    $query = $Worksheet.QueryTables.item($Connector.name)

    $query.TextfileOtherDelimiter = $Excel.Application.International(5)

    $Query.TextfileParseType =1
    $Query.TextFileColumnDataTypes = ,2 * $worksheet.cells.column.count
    $query.AdjustColumnWidth =1

    $Query.Refresh()
    $Query.Delete()

        $workbook.Save()

}
$Workbook.SaveAs($outputxls,51)
$Excel.quit()
} 

Поскольку вы снова создаете объект Excel, он перезаписывает существующийлист.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...