【问题标题】:Opening an excel sheet using Progress code使用进度代码打开 Excel 工作表
【发布时间】:2015-04-01 07:56:31
【问题描述】:

我想使用 progress 4gl 在一个 excel 文件中打开 3 张工作表并将数据导出到其中。目前我正在生成 3 个 csv 文件,我必须将它们邮寄给用户。我想在单个 csv 或带有 3 张工作表的 excel 文件中生成 3 个 csv 中的数据。有人可以帮我解决这个问题吗?

OUTPUT TO VALUE(l_csv3). 
FOR EACH tt_stock 
   WHERE (tt_prodline = "ZMLC" OR 
          tt_prodline ="ZMSC" OR 
          tt_prodline = "ZZZZ" OR 
          tt_prodline ="ZLPG") 
   BREAK BY tt_nbr: 
   IF tt_po <> "" THEN 
      EXPORT DELIMITER "," 
         tt_part tt_um tt_desc tt_site tt_qtoh 
         tt_rop tt_sfst tt_nbr tt_qtor tt_vend 
         tt_line tt_name tt_prodline. 
   ELSE 
      EXPORT DELIMITER "," 
         tt_part tt_um tt_desc tt_site tt_qtoh 
         tt_rop tt_sfst "NO PO" tt_qtor tt_vend 
         tt_line tt_name tt_prodline. 
END. 
OUTPUT CLOSE.

【问题讨论】:

  • 向我们展示您的进度代码。也许你可以简单地将你的 csv 行指向一个文件。
  • 上述代码重复三次,得到 3 个 csv。我怎样才能把它放在一张有 3 张纸的 Excel 表格中??

标签: excel progress-4gl openedge


【解决方案1】:

看看我最终创造了什么。加入excel工作表的代码。 在示例中,有 4 个工作表文件将与第一个文件合并。不是合并,只是简单的联合。

    DEFINE VARIABLE chExcel      AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE chWorksheet1 AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE chWorksheet2 AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE chWorkbook1  AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE chWorkbook2  AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE iQtArq       AS INTEGER     NO-UNDO.
    DEFINE VARIABLE iPos         AS INTEGER     NO-UNDO.
    DEFINE VARIABLE idx          AS INTEGER     NO-UNDO.

    DEFINE TEMP-TABLE tt-arq
        FIELD nomeArq AS CHAR.
    CREATE tt-arq.
    tt-arq.nomeArq = "C:\damgra\excel\Pasta1.xlsx".
    CREATE tt-arq.
    tt-arq.nomeArq = "C:\damgra\excel\Pasta2.xlsx".
    CREATE tt-arq.
    tt-arq.nomeArq = "C:\damgra\excel\Pasta3.xlsx".
    CREATE tt-arq.
    tt-arq.nomeArq = "C:\damgra\excel\Pasta4.xlsx".

    iQtArq = 0.

    FOR EACH tt-arq.
        iQtArq = iQtArq + 1.
    END.

    IF iQtArq = 1 THEN RETURN.

    CREATE "excel.application" chExcel.

    iQtArq = 0.

    FOR EACH tt-arq.
        iQtArq = iQtArq + 1.

        IF iQtArq = 1 THEN DO:    
            chWorkbook1=chExcel:Workbooks:Open(tt-arq.nomeArq).
            chWorksheet1=chWorkbook1:Worksheets(1).
            chWorksheet1:NAME = "plan" + STRING(iQtArq).
            NEXT.
        END.

        iPos = chWorkbook1:sheets:COUNT .

        chWorkbook2=chExcel:Workbooks:Open(tt-arq.nomeArq).

        DO idx = 1 TO (chWorkbook2:sheets:COUNT):
            iPos = iPos + 1.
            chWorksheet2=chWorkbook2:Worksheets(idx).
            chWorksheet2:NAME = "plan" + STRING(iPos).
        END.

        chWorksheet2=chWorkbook2:Worksheets(1).
        chWorksheet1=chWorkbook1:Worksheets(chWorkbook1:sheets:COUNT).
        chWorksheet1:Activate.
        chWorkbook2:Sheets:move(,chWorksheet1).    
    END.

    chWorksheet1=chWorkbook1:Worksheets(1).
    chWorksheet1:Activate.

    chExcel:visible=true.

    IF valid-handle(chWorksheet1) THEN RELEASE OBJECT chWorksheet1.
    IF valid-handle(chWorksheet2) THEN RELEASE OBJECT chWorksheet2.
    IF valid-handle(chWorkbook1 ) THEN RELEASE OBJECT chWorkbook1 .
    IF valid-handle(chWorkbook2 ) THEN RELEASE OBJECT chWorkbook2 .
    IF valid-handle(chExcel )     THEN RELEASE OBJECT c

【讨论】:

    【解决方案2】:
    DEFINE VARIABLE  chExcelApplication AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE  chWorkbook         AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE  chWorksheet        AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE  chQueryTable       AS COM-HANDLE NO-UNDO.
    DEFINE VARIABLE cConnection         AS CHARACTER  NO-UNDO.
    DEFINE VARIABLE lResult             AS LOGICAL    NO-UNDO.
    DEFINE VARIABLE cFilesToImport      AS CHARACTER  NO-UNDO.
    DEFINE VARIABLE cSheetTitles        AS CHARACTER  NO-UNDO.
    DEFINE VARIABLE iNumberOfFiles      AS INTEGER    NO-UNDO.
    
    /* Initialize Excel, File and Title Lists */
    CREATE "Excel.Application" chExcelApplication.
    chExcelApplication:Workbooks:ADD.
    
    ASSIGN
        cFilesToImport = "myfile1.txt,myfile2.txt,myfile3.txt"
        cSheetTitles   = "Alpha, Beta, Theta"
        chWorkbook     = chExcelApplication:WorkBooks:Item(1).
    
    /* Import ecah file's data into a new sheet of the workbook */
    DO iNumberOfFiles = 1 TO NUM-ENTRIES(cFilesToImport).
        ASSIGN
             FILE-INFO:FILE-NAME = ENTRY(iNumberOfFiles, cFilesToImport)
             cConnection = "TEXT;" + FILE-INFO:FULL-PATHNAME
             chWorkSheet = chExcelApplication:Sheets:Item(iNumberOfFiles)
             chWorkSheet:Name = ENTRY(iNumberOfFiles, cSheetTitles)
             lResult     = chWorkSheet:QueryTables:Add(cConnection,   chWorkSheet:cells(1,1)).
    
        ASSIGN
            chQueryTable = chWorkSheet:QueryTables(1)
            chQueryTable:FieldNames = TRUE
            chQueryTable:RowNumbers = False
            chQueryTable:FillAdjacentFormulas = False
            chQueryTable:PreserveFormatting = FALSE
            chQueryTable:RefreshOnFileOpen = FALSE
            chQueryTable:RefreshStyle = 1
            chQueryTable:SavePassword = False
            chQueryTable:SaveData = True
            chQueryTable:AdjustColumnWidth = True
            chQueryTable:RefreshPeriod = 0
            chQueryTable:TextFilePromptOnRefresh = FALSE
            chQueryTable:TextFilePlatform = 437
            chQueryTable:TextFileStartRow = 1
            chQueryTable:TextFileParseType = 1
            chQueryTable:TextFileTextQualifier = 1
            chQueryTable:TextFileConsecutiveDelimiter = False
            chQueryTable:TextFileTabDelimiter = True
            chQueryTable:TextFileSemicolonDelimiter = False
            chQueryTable:TextFileCommaDelimiter = False
            chQueryTable:TextFileSpaceDelimiter = False
            chQueryTable:TextFileTrailingMinusNumbers = True
            lResult = chQueryTable:Refresh
            chQueryTable:BackgroundQuery = False.
    END.
    
    /* Make Spreadsheet Visible */
    chExcelApplication:Visible = true.
    
    /* Release All Objects */
    RELEASE OBJECT chQueryTable  NO-ERROR.
    RELEASE OBJECT chWorkSheet  NO-ERROR.
    RELEASE OBJECT chWorkBook   NO-ERROR.
    RELEASE OBJECT chExcelApplication NO-ERROR.
    

    【讨论】:

    • 不错 :) 但最好直接从 DB 表写入电子表格,而不是必须先创建 3 个文件,然后将它们读入并将它们写成工作表。
    • 大家好。谢谢回复。我会试试这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多