CSV тут может не хватить. Самый простой и быстрый для реализации способ предложил
Vadim. Я бы предложил дополнить его не генерацией, а банальной заменой по подстановочным символам. По шагам:
* Делаем резервную копию файла XLS и открываем его.
* В ячейку B6 вставляем текст, например "{DBEdit1}" (главное чтобы такого текста больше ни в какой ячейке не было)
* В B7 вставляем {DBEdit2}
* В G7 вставляем {DBEdit3}
* и т.д.
* сохраняем файл как XML (что-то типа Excel 2003 XML)
Потом из программы делаем что-то вроде:
- Код: Выделить всё
var
Path: string;
ReportPath: string;
ExcelData: TStringList;
Buffer: string;
begin
Path:=Utf8Decode(ExtractFilePath(Application.ExeName)+'Reports/blank_z.xml');
ReportPath:=Utf8Decode(ExtractFilePath(Application.ExeName)+'Reports/temp_report.xml');
ExcelData := TStringList.Create;
ExcelData.LoadFromFile(path);
Buffer := ExcelData.Text;
Buffer := StringReplace(Buffer, '{DBEdit1}', PrintForm.DBEdit1.Text, []);
Buffer := StringReplace(Buffer, '{DBEdit2}', PrintForm.DBEdit2.Text, []);
Buffer := StringReplace(Buffer, '{DBEdit3}', PrintForm.DBEdit3.Text, []);
// и т.д.
ExcelData.Text := Buffer;
ExcelData.SaveToFile(ReportPath);
FreeAndNil(ExcelData);
// открываем созданный файл в Excel
ExecuteProcess('путь к excel', ReportPath);
end;
Код разумеется не тестировал и не оптимизировал, думаю идея понятна. В пути к excel можно попробовать указать просто excel.exe (или как он там называется, возможно он уже в path, вроде бы у меня такое было). Если не получится -- можно устанавливать в путь по умолчанию (C:\Program Files\...) и разрешать менять в настройках программы.