我所拥有的是包含数据的工作表,我想定义一个非连续的范围,例如,可以用来创建图表。
只要范围是矩形,就很容易定义范围。
range := ASheet.Range['A1', 'B10'];
这会创建一个矩形范围,其左上角位于A1
和B10
的右下角。问题是未定义数据时可以使用单个矩形进行选择。
作为一个例子,我们有这些数据:
+-------+------+------+------+------+
| Time | Col1 | Col2 | Col3 | Col4 |
+-------+------+------+------+------+
| 01:20 | 5 | 1 | 101 | 51 |
| 01:21 | 6 | 1 | 101 | 51 |
| 01:22 | 5 | 0 | 101 | 51 |
| 01:23 | 5 | 0 | 101 | 51 |
| 01:24 | 5 | 0 | 101 | 55 |
| 01:25 | 5 | 1 | 101 | 55 |
| 01:26 | 6 | 1 | 101 | 15 |
| 01:27 | 7 | 2 | 101 | 15 |
| 01:28 | 7 | 2 | 101 | 15 |
+-------+------+------+------+------+
例如,如果我想为时间,Col1和Col2 创建图表,则范围只是ASheet.Range['A1', 'C10']
。如果我想为 Time,Col1,Col3和Col4 创建图表,则无法以这种方式创建范围(因为不应包括Col2)。
在VBA中,可以通过.Range("A1:B10,D1:E10")
创建所需的范围。遗憾的是,在Delphi(Excel2010)中似乎没有相同的方法来定义范围,实际上它似乎只支持格式为.Range[topLeft, bottomRight]
的范围。
我的问题是:如何在Delphi中定义不连续的范围?
答案 0 :(得分:10)
经过数小时和数小时的谷歌搜索后,我偶然发现了关键部分:Application.Union
,第n次阅读documentation for Range object。
解决方案是使用Excel对象方法Union
来建立两个连续范围的并集,以便定义一个新的范围,该范围可以是非连续的。
示例:
ExcelApp := TExcelApplication.Create(..);
...
Range1 := Sheet.Range['A1', 'B10'];
Range2 := Sheet.Range['D1', 'E10'];
Range := ExcelApp.Union(Range1, Range2);