Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 获取ExcelRange对象的坐标_Delphi_Excel_Com - Fatal编程技术网

Delphi 获取ExcelRange对象的坐标

Delphi 获取ExcelRange对象的坐标,delphi,excel,com,Delphi,Excel,Com,在Excel的COM API中: 给定一个ExcelRange对象,如何确定其中包含哪些行和列 我不想要范围的内容,只是范围的“坐标”,最好是整数 我注意到,ExcelRange既有一个行属性,也有一个列属性,但是这些属性只指示范围左上角的行和列 注意:我使用的是Delphi,但是这个问题可能与通过COM使用Excel的任何语言有关,因此不需要使用Delphi进行回答。假设一个简单的矩形范围,然后使用ExcelRange对象的行和列属性。所选内容的左上角由Range.Row和Range.Colu

在Excel的COM API中:

给定一个
ExcelRange
对象,如何确定其中包含哪些行和列

我不想要范围的内容,只是范围的“坐标”,最好是整数

我注意到,
ExcelRange
既有一个
属性,也有一个
属性,但是这些属性只指示范围左上角的行和列


注意:我使用的是Delphi,但是这个问题可能与通过COM使用Excel的任何语言有关,因此不需要使用Delphi进行回答。

假设一个简单的矩形范围,然后使用
ExcelRange
对象的
行和
列属性。所选内容的左上角由
Range.Row
Range.Column
确定。所选行数和列数由
Range.rows.Count
Range.columns.Count
给出

一般来说,Excel范围可以由多个非连续区域组成。在这种情况下,您可以使用
ExcelRange
Areas
属性来迭代组成复杂范围的简单矩形范围

来说明下面的代码:

procedure DescribeExcelRange(const Range: ExcelRange);
var
  AreaIndex: Integer;
  Area: ExcelRange;
begin
  for AreaIndex := 1 to Range.Areas.Count do
  begin
    Area := Range.Areas[i];
    Writeln(Format(
      'Area %d: R%dC%d:R%dC%d',
      [AreaIndex, Area.Row, Area.Column, 
       Area.Row+Area.Rows.Count-1, Area.Column+Area.Columns.Count-1]
    ));
  end;
end;

我没有实际测试过这段代码,所以我希望我正确地记住索引是基于1的。

假设一个简单的矩形范围,然后使用
ExcelRange
对象的
属性。所选内容的左上角由
Range.Row
Range.Column
确定。所选行数和列数由
Range.rows.Count
Range.columns.Count
给出

一般来说,Excel范围可以由多个非连续区域组成。在这种情况下,您可以使用
ExcelRange
Areas
属性来迭代组成复杂范围的简单矩形范围

来说明下面的代码:

procedure DescribeExcelRange(const Range: ExcelRange);
var
  AreaIndex: Integer;
  Area: ExcelRange;
begin
  for AreaIndex := 1 to Range.Areas.Count do
  begin
    Area := Range.Areas[i];
    Writeln(Format(
      'Area %d: R%dC%d:R%dC%d',
      [AreaIndex, Area.Row, Area.Column, 
       Area.Row+Area.Rows.Count-1, Area.Column+Area.Columns.Count-1]
    ));
  end;
end;
我还没有实际测试过这段代码,所以我希望我正确地记住索引是基于1的