括号内的键值 - 在OR中限制OR foreach ...?

时间:2014-02-26 14:50:28

标签: progress-4gl openedge

继续寻求将.NET转换为Progress,我昨天面临另一项挑战。

我们公司之前购买了一个.NET DLL来管理Excel文档,而无需安装Microsoft Excel。根据需要,有几个函数可以返回一系列单元格。

返回的值是一个在.NET中实现IEnumerator接口的类。

问题是我无法找到一种方法来迭代细胞而不会出现错误:

System.ArgumentException: Row or column index is invalid or out of required range

有没有办法进行验证X是否在范围范围内? 要么 有没有办法在不知道数组上限的情况下迭代数组?

谢谢! 的Sebastien

---临时解决方案---

/* declaration */
DEFINE VARIABLE oCell AS CLASS GemBox.Spreadsheet.ExcelCell NO-UNDO.
DEFINE VARIABLE oRange AS CLASS GemBox.Spreadsheet.CellRange NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

/* load excel file */
...

/* retrieve a series of cells */
ASSIGN oRange = oWorksheet:Cells:GetSubrangeAbsolute(1,1, 2,2).

/* first cell */
ASSIGN i = 0.
ASSIGN oCell = ?.
ASSIGN oCell = oRange:Item[i] NO-ERROR.

/* validate cell is in the range */
DO WHILE NOT oCell EQ ?:

    MESSAGE oCell:Value VIEW-AS ALERT-BOX.

    /* next cell */
    ASSIGN i = i + 1.
    ASSIGN oCell = ?.
    ASSIGN oCell = oRange:Item[i] NO-ERROR.
END. 

2 个答案:

答案 0 :(得分:1)

我没有访问权限,也没有测试此解决方案,但是如果它正确实现了界面,那么像这样的解决方案应该可以工作:

/* declaration */
DEFINE VARIABLE oCell AS CLASS GemBox.Spreadsheet.ExcelCell NO-UNDO.
DEFINE VARIABLE oRange AS CLASS GemBox.Spreadsheet.CellRange NO-UNDO.
DEFINE VARIABLE oEnumerator AS CLASS System.Collections.IEnumerator NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.

/* load excel file */
...

/* retrieve a series of cells */
ASSIGN oRange = oWorksheet:Cells:GetSubrangeAbsolute(1,1, 2,2).

oEnumerator = oRange:getEnumerator().
DO WHILE oEnumerator:MoveNext():
   oCell = CAST(oEnumerator:current,"GemBox.Spreadsheet.ExcelCell").
END.

如果它不能完全像这样,至少它应该指向正确的方向来使用它。

答案 1 :(得分:0)

从网页上我推断出cols =

oRange:LastColumnIndex - oRange:FirstColumnIndex 

和#行是

oRange:LastRowIndex - oRange:FirstRowIndex 

我认为使用

 oCell = oRange:Item[Int32, Int32]

要获取行的项目,col位置将更好地工作,而不是使用单个元素数组元素。