Delphi 7 で Ole Automation を使用して、Excel スプレッドシートの特定の範囲内の各セルのテキストを抽出しようとしています。
ちょうど今、(ワークブックが既に開いていると仮定して) ワークシートから範囲を選択し、.Value2 関数を使用して Variant 配列を設定する関数があります。
function GetExcelRange(const AWorkbookIndex: integer; const AWorksheetIndex: integer; const firstCol, lastCol, firstRow, lastRow: integer): Variant;
var
AWorkbook, ARange: OleVariant;
begin
Result := Unassigned;
if not VarIsEmpty(ExcelApp) then
begin
if ExcelApp.Workbooks.Count >= AWorkbookIndex then
begin
AWorkbook := ExcelApp.Workbooks[AWorkbookIndex];
try
if AWorkbook.Worksheets.Count >= AWorksheetIndex then
begin;
ARange := AWorkbook.WorkSheets[AWorksheetIndex].Range[AWorkbook.WorkSheets[AWorksheetIndex].Cells[firstRow, firstCol],
AWorkbook.WorkSheets[AWorksheetIndex].Cells[lastRow, lastCol]];
Result := ARange.Value2;
end;
finally
AWorkbook := Unassigned;
ARange := Unassigned;
end;
end;
end;
end;
私が期待するのは、行を次のように変更できることですResult := ARange.Text
が、null オブジェクトを返します。
Ole オブジェクトがアクティブな間は各セルを反復処理せず、上記のように範囲全体のテキストを配列に貼り付けたいと思います。