Могу предложить вам просто сделать из всех ваших StringGrid'ов, имеющихся на форме, один большой динамический StringGrid, который будет содержать все данные. Его передавать в параметре функции SaveAsExcelFile.
Вот, в качестве примера набросала для случая трёх StringGrid'ов на форме. Для другого количества "таблиц" — по аналогии...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
MaxColCnt, i, Last: Integer;
SumGrid: TStringGrid;
begin
SumGrid := TStringGrid.Create(Self);
try
// определяем число столбцов и строк в суммарном StringGrid
MaxColCnt := StringGrid1.ColCount;
if StringGrid2.ColCount > MaxColCnt then MaxColCnt := StringGrid2.ColCount;
if StringGrid3.ColCount > MaxColCnt then MaxColCnt := StringGrid3.ColCount;
SumGrid.ColCount := MaxColCnt;
SumGrid.RowCount := StringGrid1.RowCount + StringGrid2.RowCount + StringGrid3.RowCount;
// копируем содержимое первого StringGrid
Last := 0;
for i := 0 to StringGrid1.RowCount - 1 do
SumGrid.Rows[i].Assign(StringGrid1.Rows[i]);
// копируем содержимое второго StringGrid
Inc(Last, StringGrid1.RowCount);
for i := 0 to StringGrid2.RowCount - 1 do
SumGrid.Rows[i + Last].Assign(StringGrid2.Rows[i]);
// копируем содержимое третьего StringGrid
Inc(Last, StringGrid2.RowCount);
for i := 0 to StringGrid3.RowCount - 1 do
SumGrid.Rows[i + Last].Assign(StringGrid3.Rows[i]);
if SaveAsExcelFile(SumGrid, 'My Stringgrid1','e:\MyExcelFile.xls') then
ShowMessage('StringGrid saved!');
finally
SumGrid.Free;
end;
end;
_____________________
P.S. Кстати, эта функция SaveAsExcelFile у меня не работает (хоть для какого количества StringGrid), если не поменять в строке
Код:
Sheet := XLApp.Workbooks[1].WorkSheets[2];
индекс 2 (у WorkSheets) на 1.