Страница 1 из 2
Вопрос по XlCreateExcelWithTemplate
Добавлено: 24 июн 2008, 16:55
galover
В каком месте диска создается файл - результат работы этой функции? во временной папке ОС?
Добавлено: 24 июн 2008, 18:41
m0p3e
Данная функция ничего не создает. Она открывает указанный файл.
xlCreateExcelWithTemplate
Function xlCreateExcelWithTemplate(TemplateName : string; Visible : boolean) : boolean;
Открывает Excel файл с именем FileName. Если Excel уже был запущен, то новый не создает, а подключается к нему.
Добавлено: 25 июн 2008, 12:03
galover
m0p3e
я тоже так думал, но в том то и дело, что создает! И даже имена вновь создаваемым файлам дает как "имя шаблона" + номер.xls
Сейчас использую вот такой код обертку
Код: Выделить всё
public function CreateExcelFileFromTemplate(templateName : string; fileName : string) : boolean;
{
DeleteFile(fileName);
result := CopyMoveFile(templateName, fileName, false);
if (result)
{
XlCreateExcelWithTemplate(fileName, true);
XlDisplayAlerts(false);
result := XlIsExcelValid();
}
}
templateName - путь к шаблону, fileName - путь к новому файлу.
После открытия созданного файла -> fileName можно удалить! Т.е. если бы открылся fileName, то имя бы у него было как у шаблона и он бы был заблокирован от удаления. Вот
Добавлено: 25 июн 2008, 13:23
m0p3e
Вот исходник:
Код: Выделить всё
constructor tExporter.CreateWithTemplate;
begin
inherited Create;
InitExporter;
if(not DoOpenExcel) then begin
Fail; Exit;
end;
try
SetGlobSettingOnStart(Visible);
if (trim(TemplateName) = '') then begin
WBook := ExApp.WorkBooks.Add;
end else begin
CloseWorkBookByName(TemplateName); // перенесли из Vip закрытие книжки сюда
WBook := ExApp.WorkBooks.Add(TemplateName);
end;
WBook.Windows[1].WindowState := xlMaximized;
ExApp.ScreenUpdating := False;
except
LogOnExcept('CreateWithTemplate1');
LastError := cgxlErrAddWorkBook;
end;
try
WSheet := WBook.WorkSheets.Item[1];
except
LogOnExcept('CreateWithTemplate2');
end;
end;
Не должен он ничего создавать по идее.
Добавлено: 25 июн 2008, 13:36
Алексей
я как-то давно писал отчет, открывал так же шаблон, потом его переименовывал и сохранял уже с другим именем в OUT
не создает, это точно.
Добавлено: 25 июн 2008, 13:40
galover
m0p3e
ну тут как бы создается новая книга, так чтА... Хотя код явно не весь, так что только гадать что там внутрях
Добавлено: 25 июн 2008, 13:49
m0p3e
Код весь. Поверь мне. Вызываемые функции не относятся к темплейтам. Если имя файла не передано, то просто создает новую. Если передано, то пытается открыть файл по этому пути. Все остальное особенности Excel-я.
Добавлено: 25 июн 2008, 14:05
galover
Алексей
Сам не верил, пока не попробовал!
Добавлено: 25 июн 2008, 14:14
galover
может раньше это и было так, только сейчас после вызова XlCreateExcelWithTemplate(fileName, true); - темплейт освобождается сразу!!! Попробуйте, поставить Message и удалите файл темплейта!!!! Галактика 8.10, все последние патчи стоят. Файл создается как временный - имя файла -> 'имя файла темплейта'1 (далее 2, 3, 4...) если формировать несколько отчетов подряд
Добавлено: 25 июн 2008, 14:29
galover
поисследовав убедился, что сначала открывается книга templat-а, с нее делается слепок, далее template закрывается и мы уже работаем с копией, эта копия нигде не сохраняется. И юзер уже сам потом решает что с ней делать
Добавлено: 25 июн 2008, 15:36
m0p3e
А нету у меня 8.1. Проверять негде.
Исходники библиотеки у меня от 8.1. Может уже в процессе эксплуатиции 8.1 поменяли что-то?
Добавлено: 04 авг 2009, 10:24
savov
Попробовал эту функцию в 8.10. Действительно, создается копия файла. Вопрос, как открыть файл (существующий) екселя, считать с него данные и закрыть его, НЕ СОЗДАВАЯ КОПИИ???? Очень надо!!!! Написал программку, все работает, но создается копия, как от этого избавится, пока не знаю.
Добавлено: 04 авг 2009, 10:42
m0p3e
Подозреваю, что excel ведет себя таким образом при открытии xlt файлов.
Добавлено: 04 авг 2009, 12:20
edward_K
есть Xlopenexcel
Добавлено: 04 авг 2009, 13:49
savov
edward_k, согласно доке:
Описание:
Function xlOpenExcel (Visible : boolean) : boolean;
Открывает Excel, никаких файлов не откравает. Если Excel уже был запущен, то новый не создает, а подключается к нему.
Возвращает результат операции.
ДАННАЯ ФУНКЦИЯ НЕ ОТКРЫВАЕТ ФАЙЛ!
Есть что то еще? или может несколько надо?
mOp3e,
РАБОТАЮ С xls файлом (создан вообще независимо от Гал-ки)