You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Progress 4GL统计CSV行数、切换工作表并解析指定行数据

解决Progress 4GL读取CSV第二行及Excel工作表的问题

Hey there! Let's break down your two issues and fix them up:

1. 只读取CSV文件的第二行

你的当前代码会遍历所有行并全部存入临时表,要只读取第二行,我们可以加一个行计数器来控制流程:跳过第一行,处理第二行后直接退出循环。

修改后的代码如下:

DEFINE TEMP-TABLE tt_sec7Role FIELD ttsec_role AS CHARACTER.
DEFINE VARIABLE v_dataline AS CHARACTER NO-UNDO.
DEFINE VARIABLE v_count AS INTEGER NO-UNDO.
DEFINE VARIABLE v_lineNum AS INTEGER NO-UNDO INITIAL 0. // 新增行计数器

EMPTY TEMP-TABLE tt_sec7Role.
INPUT FROM "C:\Users\ast\Desktop\New folder\cit.csv".

REPEAT:
    IMPORT UNFORMATTED v_dataline.
    v_lineNum = v_lineNum + 1.
    
    // 跳过第一行,只处理第二行
    IF v_lineNum = 2 AND v_dataline <> '' THEN DO:
        DO v_count = 1 TO NUM-ENTRIES(v_dataline,','):
            CREATE tt_sec7Role.
            ttsec_role = ENTRY(v_count, v_dataline, ',').
        END.
        EXIT REPEAT. // 处理完第二行就退出循环,不再读取后续行
    END.
END.

INPUT CLOSE.

// 验证临时表数据
v_count = 0.
FOR EACH tt_sec7Role:
    v_count = v_count + 1.
END.
MESSAGE "临时表条目数: " v_count VIEW-AS ALERT-BOX.

关键改动说明:

  • 新增v_lineNum计数器跟踪当前读取的行号
  • 仅当行号为2且行内容非空时,才将数据存入临时表
  • 处理完第二行后用EXIT REPEAT终止循环,避免读取多余行

2. 关于CSV的"工作表"说明及Excel工作表处理

首先要澄清:CSV是纯文本格式,没有工作表(Worksheet)的概念,它就是单一的纯文本数据集合。如果你说的是Excel文件(.xlsx/.xls)里名为sec的工作表,那我们可以通过Progress的OLE功能来操作Excel并读取指定工作表的数据。

以下是读取Excel中sec工作表数据的示例代码:

DEFINE VARIABLE hExcel AS HANDLE NO-UNDO.
DEFINE VARIABLE hWorkbook AS HANDLE NO-UNDO.
DEFINE VARIABLE hWorksheet AS HANDLE NO-UNDO.
DEFINE VARIABLE vRow AS INTEGER NO-UNDO.
DEFINE VARIABLE vCol AS INTEGER NO-UNDO.
DEFINE VARIABLE vCellValue AS CHARACTER NO-UNDO.

EMPTY TEMP-TABLE tt_sec7Role.

// 初始化OLE连接到Excel
CREATE OLEOBJECT hExcel.
hExcel:CONNECT("Excel.Application").
hExcel:Visible = FALSE. // 后台运行Excel,不显示窗口

// 打开目标Excel文件
hWorkbook = hExcel:Workbooks:OPEN("C:\Users\ast\Desktop\New folder\cit.xlsx").

// 切换到名为"sec"的工作表
hWorksheet = hWorkbook:Worksheets("sec").

// 读取数据(示例:从第一行第一列开始读取非空行)
vRow = 1.
DO WHILE hWorksheet:Cells(vRow, 1):Value <> '':
    vCol = 1.
    DO WHILE hWorksheet:Cells(vRow, vCol):Value <> '':
        vCellValue = hWorksheet:Cells(vRow, vCol):Value.
        CREATE tt_sec7Role.
        ttsec_role = vCellValue.
        vCol = vCol + 1.
    END.
    vRow = vRow + 1.
END.

// 清理资源
hWorkbook:CLOSE(FALSE). // 不保存关闭工作簿
hExcel:QUIT().
hExcel:DISCONNECT().
DELETE OBJECT hExcel.

// 验证数据
v_count = 0.
FOR EACH tt_sec7Role:
    v_count = v_count + 1.
END.
MESSAGE "临时表条目数: " v_count VIEW-AS ALERT-BOX.

注意事项:

  • 确保目标文件是Excel格式(.xlsx/.xls)而非CSV
  • 运行代码的机器需要安装Excel,且Progress有OLE操作权限
  • 可以根据需求调整读取的起始行/列逻辑

内容的提问来源于stack exchange,提问作者Thiru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:07:51