【发布时间】:2018-01-02 06:59:29
【问题描述】:
我有 3 个.txt 文件,我正在使用 COM-Handle 创建 Excel 工作表。
谁能帮我设置分隔符?正在创建我的 Excel 工作表,但列不是逗号分隔的。
请查看我获得的文件的附加屏幕截图。我希望它位于不同的列中。
【问题讨论】:
-
如果你展示了你的代码,也许有人能指出你缺少什么?
标签: excel csv com progress-4gl 4gl
我有 3 个.txt 文件,我正在使用 COM-Handle 创建 Excel 工作表。
谁能帮我设置分隔符?正在创建我的 Excel 工作表,但列不是逗号分隔的。
请查看我获得的文件的附加屏幕截图。我希望它位于不同的列中。
【问题讨论】:
标签: excel csv com progress-4gl 4gl
将变量 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.
【讨论】:
我对 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 也可以将制表符识别为列分隔符。
【讨论】:
*.csv 编码为 UTF-8 但没有 BOM,则会失败。如果逗号 is 是系统列表分隔符,但 *.csv 以任何其他 unicode 编码编码,则失败... ;-)。
Ashleedawg 的回答可能是正确的,但让我提供一些 Progress 方面的背景信息:这很可能是您如何导出它的问题。如果您要将 TXT 文件转换为电子表格,这将取决于您是将其作为电子表格导出到 Excel,然后您必须命名您希望数据进入的单元格,或者将其导出为CSV 和逗号应被识别为分隔符,除非用户计算机专门使用另一个符号作为默认符号,简而言之。因此,如果您希望生成 CSV,则实际上不需要 com 句柄。 您可以使用普通的 OUTPUT TO 并将其全部设为文本,或者如果您使用 com-handle,您很可能必须逐个字段处理它(当然您可以使用 BUFFER-FIELD 循环缓冲区中的字段和用(行整数,col整数)命名单元格,如果我没记错的话)。 无论如何,一些代码让我们分析你如何导出它会更清楚地说明它。
【讨论】: