java - 性能问题: convert csv to excel using Powershell

标签 java excel powershell

我正在使用下面的 power shell 代码将 csv 转换为 Excel。但性能似乎很差,对于一个200mb的csv文件,我已经等了20分钟了。任何人都知道如何提高性能。或者我必须务实地做(使用 java 使用 apache poi 库)?

   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
  }
 }

最佳答案

您是否尝试过在 Excel 中打开 CSV 文件?这可能是最快的方法。

$app = New-Object -ComObject Excel.Application
$app.Visible = $true
$app.DisplayAlerts = $False
$app.Workbooks.Open("yourcsvfile.csv")

另一种方法是按行读取文件并添加整行,但速度会慢一些。

但是,转换为 PS 对象并逐个单元写入总是最慢的。

编辑:这是一个完整的函数...

function ConvertToExcel { 
    param($fileName)    
    $outputFilename = -join($fileName.split('.')[0], ".xls")
    $excel = New-Object -ComObject Excel.Application
    #$excel.Visible = $true
    $excel.DisplayAlerts = $False
    $wb = $excel.Workbooks.Open($fileName)
    $wb.SaveAs("$outputFilename", [Microsoft.Office.Interop.Excel.XlFileFormat]::xlExcel8)
    Start-Sleep -Milliseconds 200
    $excel.Quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
    Remove-Variable excel
}

ConvertToExcel "D:\tst\serverlist.csv"

关于java - 性能问题: convert csv to excel using Powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36001207/

相关文章:

vba - 当从用户窗体使用 Sheets.Add 时,新工作表是 "connected"到另一个工作表?

powershell - 指定的提供程序类型无效。密码异常

excel - 从 VBA 迁移到 SQL Server 2008 R2 时如何提高数据库性能?

java - 从输入区域返回空值

java - 动态更改 Material 按钮背景不起作用

JavaFx 隐藏 TextArea-VScrollbar

r - 频率关系矩阵

powershell - 如何将输出从 PowerShell 中的外部进程捕获到变量中?

powershell - PowerShell 中的触摸函数

java - 卡夫卡 "Login module not specified in JAAS config"