【问题标题】:Progress 4GL - Export large amount of data to ExcelProgress 4GL - 将大量数据导出到 Excel
【发布时间】:2016-09-20 03:16:27
【问题描述】:

各位开发者您好,

我正在尝试使用 Progress 4GL 将大量数据导出到 Excel。我们谈论的是 ±5500 条记录和 ±170 列。 问题是这对 Excel 来说太多了,它会引发以下错误:Excel error。 我可以继续,它会导出所有数据,但该过程并不完全可呈现,中间有一个错误。

我正在使用以下代码将不同 CSV 文件中的所有数据导出到一个 Excel 文件中,每个 CSV 文件都有一个单独的工作表:

  /* 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.

你们中有人知道如何解决这个问题并获得想要的结果吗?提前致谢!

【问题讨论】:

  • 一个长镜头,但您正在为每次迭代创建至少一个新资源(vchWorkSheet - 也可能是 vchQueryTable),但只在过程结束时将其删除一次。也许那(或其他)会造成内存泄漏。该错误似乎与内存消耗有关。尝试运行它并同时查看任务管理器内存图。

标签: excel export-to-excel progress-4gl openedge


【解决方案1】:

为什么要从 Progress 控制 XL?

如果 XL 是强制性步骤...我宁愿这样做...用宏文件调用 XL 以打开 CSV 并以 XL 格式保存。 如果这需要集成到业务流程中...我会在 CSV 生成后立即使用宏文件打开 XL。

【讨论】:

    猜你喜欢
    • 2016-01-17
    • 2016-05-08
    • 1970-01-01
    • 2013-10-06
    • 2016-06-30
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2018-02-26
    相关资源
    最近更新 更多