7

我拥有的是一张包含数据的表格,我想定义一个非连续范围,例如,该范围可用于创建图表。

只要范围是矩形的,就很容易定义范围。

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 |
+-------+------+------+------+------+

例如,如果我希望为Time、Col1 和 Col2创建图表,则范围很简单ASheet.Range['A1', 'C10']。如果我想为Time、Col1、Col3 和 Col4创建图表,则无法以这种方式创建范围(因为不应包含 Col2)。

在 VBA 中,可以通过简单地创建所需的范围.Range("A1:B10,D1:E10")。不幸的是,似乎没有在 Delphi (Excel2010) 中定义范围的等效方法,实际上它似乎只支持格式为.Range[topLeft, bottomRight].

我的问题是:如何在 Delphi 中定义一个不连续的范围?

4

1 回答 1

10

经过数小时的谷歌搜索后,我在第 n 次Application.Union阅读Range 对象的文档时偶然发现了关键部分: 。

解决方案是使用 Excel 对象方法Union将两个连续范围合并,以定义一个新范围,该范围可以是不连续的。

例子:

ExcelApp := TExcelApplication.Create(..);
...
Range1 := Sheet.Range['A1', 'B10'];
Range2 := Sheet.Range['D1', 'E10'];

Range  := ExcelApp.Union(Range1, Range2);
于 2013-06-13T20:48:19.767 回答