2016-05-23 3 views
0
へのエクスポート大量のデータを

こんにちは仲間の開発者は、プログレス4GL - そこエクセル

私はプログレス4GLを使用してExcelに大量のデータをエクスポートしようとしています。私たちは、±5500レコードと±170列について話しています。 問題は、Excelで処理するにはあまりにも多く、次のエラーが発生することです。Excel error。 私は続行することができ、すべてのデータをエクスポートしますが、手続きの途中にエラーが表示されることはありません。

/* Initialize Excel file & add new workbook */ 
    CREATE "Excel.Application" vchExcel. 
    vchExcel:SheetsInNewWorkbook = NUM-ENTRIES(ipcSheets,','). 
    vchExcel:WorkBooks:ADD(). 
    ASSIGN vchWorkBook = vchExcel:WorkBooks:Item(1). 

    /* Import each file's data into a new sheet of the workbook */ 
    Sheet: 
    DO iTab = 1 TO NUM-ENTRIES(ipcFiles) ON ERROR UNDO, RETRY Sheet: 
     /* Import CSV data into Excel */ 
     ASSIGN cConnection  = SUBSTITUTE("TEXT;" + gvcExportPath + "csv_files\" + "&1",ENTRY(iTab,ipcFiles)) 
      vchWorkSheet  = vchExcel:Sheets:ITEM(iTab) 
      vchWorkSheet:NAME = ENTRY(iTab,ipcSheets) 
      lResult   = vchWorkSheet:QueryTables:ADD(cConnection,vchWorkSheet:cells(1,1)). 

     ASSIGN 
      vchQueryTable = vchWorkSheet:QueryTables(1) 
      vchQueryTable:FieldNames = TRUE 
      vchQueryTable:RowNumbers = FALSE 
      vchQueryTable:FillAdjacentFormulas = FALSE 
      vchQueryTable:PreserveFormatting = FALSE 
      vchQueryTable:RefreshOnFileOpen = FALSE 
      vchQueryTable:RefreshStyle = 1 
      vchQueryTable:SavePassword = FALSE 
      vchQueryTable:SaveData = TRUE 
      vchQueryTable:AdjustColumnWidth = TRUE 
      vchQueryTable:RefreshPeriod = 0 
      vchQueryTable:TextFilePromptOnRefresh = FALSE 
      vchQueryTable:TextFilePlatform = 437 
      vchQueryTable:TextFileStartRow = 1 
      vchQueryTable:TextFileParseType = 1 
      vchQueryTable:TextFileTextQualifier = 1 
      vchQueryTable:TextFileConsecutiveDelimiter = TRUE 
      vchQueryTable:TextFileTabDelimiter = TRUE 
      vchQueryTable:TextFileSemicolonDelimiter = TRUE 
      vchQueryTable:TextFileCommaDelimiter = FALSE 
      vchQueryTable:TextFileSpaceDelimiter = FALSE 
      vchQueryTable:TextFileTrailingMinusNumbers = TRUE 
      lResult = vchQueryTable:REFRESH 
      vchQueryTable:BackgroundQuery = FALSE. 


     /* Catch all errors */ 
     CATCH eAnyError AS Progress.Lang.ERROR: 
      RUN disp_mesg(INPUT SUBSTITUTE("ERROR! -> &1",eAnyError:GetMessage(1))). 
      RUN adnew_log(INPUT SUBSTITUTE("ERROR OCCURRED!")). 
      RUN adnew_log(INPUT SUBSTITUTE("=> &1: &2",eAnyError:GetMessageNum(1),eAnyError:GetMessage(1))). 
     END CATCH. 
    END. 

    /* Save & close */ 
    vchExcel:Visible = FALSE. 
    vchExcel:DisplayAlerts = FALSE. 
    vchWorkBook:SaveAs(gvcExportPath + ipcName + '.xlsx',,,,,,). 
    vchWorkBook:CLOSE(). 

    /* Release All Objects */ 
    RELEASE OBJECT vchQueryTable NO-ERROR. 
    RELEASE OBJECT vchWorkSheet NO-ERROR. 
    RELEASE OBJECT vchWorkBook NO-ERROR. 
    vchExcel:QUIT(). /* Quit Excel */ 
    RELEASE OBJECT vchExcel NO-ERROR. 

はあなたのいずれかがこの問題を解決する方法を知っています:私は、各CSVファイルの別々のワークシートを1つのExcelファイルに異なるCSVファイルからのすべてのデータをエクスポートするには、次のコードを使用してい

希望の結果を得る?前もって感謝します!

+0

ロングショットですが、各反復に対して少なくとも1つの新しいリソース(vchWorkSheet - 場合によってはvchQueryTable)を作成していますが、手順の最後で1回だけ削除することになります。おそらくそれはメモリリークを引き起こします。エラーは単にメモリ消費に関連しているようです。それを実行して、タスクマネージャのメモリグラフを同時に見てみてください。 – Jensd

答えて

0

なぜXLをProgressから制御するのですか?

XLは必須のステップです...私はむしろそれを周りにしていました...マクロファイルを使ってXLに呼び出し、CSVを開きXL形式で保存します。 これをビジネスプロセスに統合する必要がある場合は、CSV生成直後にマクロファイルをXLで開くだけです。