Я использую ниже код оболочки питания для преобразования csv в excel. Но производительность кажется плохим, для файла csv размером 200 мб я ждал 20 минут. У каждого есть идея, как улучшить производительность. Или мне нужно делать прагматично (используя java, используя библиотеку apache poi)?Проблема с производительностью: конвертировать csv в excel с помощью Powershell
function convertToExcel {
param($fileName, $outputDir) # the two parameters.
#generate OutputFileName
$outputFilename = -join($fileName.BaseName, ".xlsx");
#prepare excel sheet
$excel = New-Object -ComObject Excel.Application
#$excel.visible = $true
$workbook = $excel.workbooks.add()
$sheets = $workbook.sheets
$sheetCount = $Sheets.count
$mySheet = 1
$mySheetName = "Sheet" + $mySheet
$s1 = $sheets | where{$_.name -eq $mySheetName}
$s1.Activate()
#Delete all other Sheets
If ($sheetCount -gt 1) {
$Sheets | ForEach {
$tmpSheetName = $_.Name
$tmpSheet = $_
If ($tmpSheetName -ne "Sheet1") {
$tmpSheet.Delete()
}
}
}
#copy paste data from csv
#$s1.Name = $fileName.BaseName
$s1.Name = "sheet1"
$s1.Activate()
$s1Data = Import-Csv $file.FullName -Delimiter '^'
$s1Data | ConvertTo-Csv -Delimiter "`t" -NoTypeInformation | Clip
$s1.cells.item(1,1).Select()
$s1.Paste()
$workbook.SaveAs("$outputDir\$outputFilename")
$excel.Quit()
}
#Read Input from Arguments
if ($args.length -ne 3){
}else{
$fileName = $Args[0] #read fileName
$inputFolder = $Args[1] #read inputFolder
$outputFolder = $Args[2] #read outputFolder
$files = dir -Path $inputFolder $fileName
ForEach ($file in $files) {
convertToExcel $file $outputFolder
}
}
вам нужно конвертировать такие файлы CSV часто ли? Не стоит ли инвестировать время, чтобы переписать сценарий на Java, или вы можете просто уйти и обедать, пока он работает? –
Да, мне нужно, чтобы он работал часто. это для еженедельного отчета. отчет может составлять до нескольких сотен МБ. –
Вы рассматривали возможность открытия файла CSV в excel напрямую? –