【问题标题】:Using delimiter while creating excel sheet in progress 4gl在创建 excel 工作表时使用分隔符 4gl
【发布时间】:2018-01-02 06:59:29
【问题描述】:

我有 3 个.txt 文件,我正在使用 COM-Handle 创建 Excel 工作表。 谁能帮我设置分隔符?正在创建我的 Excel 工作表,但列不是逗号分隔的。

请查看我获得的文件的附加屏幕截图。我希望它位于不同的列中。

【问题讨论】:

  • 如果你展示了你的代码,也许有人能指出你缺少什么?

标签: excel csv com progress-4gl 4gl


【解决方案1】:

将变量 chExcel 定义为 COM-HANDLE NO-UNDO。 将变量 chWorksheet1 定义为 COM-HANDLE NO-UNDO。 将变量 chWorksheet2 定义为 COM-HANDLE NO-UNDO。 将变量 chWorkbook1 定义为 COM-HANDLE NO-UNDO。 将变量 chWorkbook2 定义为 COM-HANDLE NO-UNDO。 将变量 iQtArq 定义为整数 NO-UNDO。 将变量 iPos 定义为整数 NO-UNDO。 将变量 idx 定义为整数 NO-UNDO。

DEFINE TEMP-TABLE tt-arq
    FIELD nomeArq AS CHAR.
CREATE tt-arq.
tt-arq.nomeArq = "C:\damgra\excel\Test1.txt".
CREATE tt-arq.
tt-arq.nomeArq = "C:\damgra\excel\Test2.txt".
CREATE tt-arq.
tt-arq.nomeArq = "C:\damgra\excel\Test3.txt".


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 = "test" + 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 chExcel.

【讨论】:

  • 好的,我明白了。就像我说的那样,以这种方式工作,您将需要逐个字段输出到单元格。我相信,如果您只想导出,最好将其导出为 csv(作为文本)并使用您喜欢的分隔符使用导出命令。然后最后在Excel中打开它,结果是一样的。如果您需要任何帮助,请告诉我。
【解决方案2】:

我对 Excel 非常熟悉,但不太熟悉通过 4GL 生成 Excel 文档,但无论如何我都会冒险回答:

我怀疑您正在为 Excel 创建基于文本的文件(即非二进制或非 XLS 格式)。简单地添加逗号不会创建单独的列。

您可以尝试几件事:

  • 如果生成的文件确实是文本(即,您可以使用记事本打开它),那么请确保文件名的扩展名CSV,例如c:\mypath\MyFile.csv

在 Excel 中打开扩展名为 .csv 的文件时,它将逗号分隔为列。

示例:

1) 打开NOTEPAD.EXE

2) 复制/粘贴此文本:

This is my CSV File called: myFile.csv
This is column A,and this is column B, column C,D,E,F
If I need to include a comma in the text,"I wrap it, in quotes, in the CSV file."
A,B,C,D,E,F,G

3) 使用名称保存文件:myFile.csv

4) 关闭文件,然后双击 将其打开。

(如果 Excel 在您的系统上不是 associated with the .CSV file type 类型,您可能需要打开 Excel,然后从 inin Excel 打开 CSV 文件.)

Excel 不会 AutoFit 文件中的列(或允许任何其他格式)CSV,但在列标题之间双击将自动调整。

另一个选项,而不是使用逗号,使用 Tab 字符 (ASCII Code 9)。 Excel 也可以将制表符识别为列分隔符。

【讨论】:

  • “当在 Excel 中打开扩展名为 .csv 的文件时,它会将逗号分隔成列。”:一般情况下不是这样。如果逗号不是区域设置中给定的系统列表分隔符,它将失败。如果逗号 is 是系统列表分隔符,但 *.csv 编码为 UTF-8 但没有 BOM,则会失败。如果逗号 is 是系统列表分隔符,但 *.csv 以任何其他 unicode 编码编码,则失败... ;-)。
  • 啊,是的,你是对的。我有时会忘记日期、时间和键盘并不是唯一特定于地区的设置。感谢您的澄清。
【解决方案3】:

Ashleedawg 的回答可能是正确的,但让我提供一些 Progress 方面的背景信息:这很可能是您如何导出它的问题。如果您要将 TXT 文件转换为电子表格,这将取决于您是将其作为电子表格导出到 Excel,然后您必须命名您希望数据进入的单元格,或者将其导出为CSV 和逗号应被识别为分隔符,除非用户计算机专门使用另一个符号作为默认符号,简而言之。因此,如果您希望生成 CSV,则实际上不需要 com 句柄。 您可以使用普通的 OUTPUT TO 并将其全部设为文本,或者如果您使用 com-handle,您很可能必须逐个字段处理它(当然您可以使用 BUFFER-FIELD 循环缓冲区中的字段和用(行整数,col整数)命名单元格,如果我没记错的话)。 无论如何,一些代码让我们分析你如何导出它会更清楚地说明它。

【讨论】:

  • 我附上了上面的代码。我正在使用与上述类似的东西
猜你喜欢
  • 2017-01-12
  • 2019-12-15
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-12-15
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多