Показать сообщение отдельно
  #2  
Старый 19.05.2009, 23:07
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Могу предложить вам просто сделать из всех ваших 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.
Ответить с цитированием