запись excel

Все особенности программирования под платформу Wintel
Ответить
fcdk_pavel
Сообщения: 3
Зарегистрирован: 13 сен 2013, 10:14

13 сен 2013, 10:15

const

EXCEL_FILE_EXT = '.xls';


function TForm7.GetExcelFileName: String;

begin
Result := ExtractFilePath(Application.ExeName) + Edit1.Text;
if LowerCase(ExtractFileExt(Result)) <> EXCEL_FILE_EXT then
Result := Result + EXCEL_FILE_EXT;
end;

procedure TForm7.Button1Click(Sender: TObject);
var
ExcelApp, Sheet: variant;
Col, Row: Word;
begin
ExcelApp := CreateOleObject('Excel.Application');

try
ExcelApp.Visible := false;
ExcelApp.Workbooks.Add;
Sheet := ExcelApp.ActiveWorkbook.Worksheets[1];
for Col := 0 to StringGrid1.ColCount - 1 do
for Row := 0 to StringGrid1.RowCount - 1 do
Sheet.Cells[Row + 1, Col + 1] := StringGrid1.Cells[Col, Row];
ExcelApp.ActiveWorkbook.SaveAs(GetExcelFileName);
ShowMessage('Запись завершена!');
finally
ExcelApp.Application.Quit;
ExcelApp := unassigned;

end;

end;
Вот кусок кода который создает файл Экселя(имя файла вводится в Эдит)
Как сделать так чтобы при следующем расчете программы(в предыдущих модулях) новые расчеты попадали уже в созданный файл(добавление в файл новых результатов расчета) а старые не исчезал(не перезаписывались)???
Помогите пожалуйста!
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

13 сен 2013, 16:29

Надо сначала проверить наличие файла, если запрошенный файл существует, то надо делать CreateOleObject от файла, а не от classname.

Дальше, после

Sheet := ExcelApp.ActiveWorkbook.Worksheets[1];

надо найти сколько строк уже заполнено. Например, можно так:

Shift := Sheet.Cells(1, 1).CurrentRegion.End(-4121).Row;

Ну и этот Shift надо прибавлять вместо 1 к номеру строки

Sheet.Cells[Row + Shift, Col + 1] := StringGrid1.Cells[Col, Row];
Ответить