Вопрос по XlCreateExcelWithTemplate

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Вопрос по XlCreateExcelWithTemplate

Сообщение galover »

В каком месте диска создается файл - результат работы этой функции? во временной папке ОС?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Данная функция ничего не создает. Она открывает указанный файл.

xlCreateExcelWithTemplate
Function xlCreateExcelWithTemplate(TemplateName : string; Visible : boolean) : boolean;
Открывает Excel файл с именем FileName. Если Excel уже был запущен, то новый не создает, а подключается к нему.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение 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, то имя бы у него было как у шаблона и он бы был заблокирован от удаления. Вот
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение 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;
Не должен он ничего создавать по идее.
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

я как-то давно писал отчет, открывал так же шаблон, потом его переименовывал и сохранял уже с другим именем в OUT

не создает, это точно.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

m0p3e

Код: Выделить всё

ExApp.WorkBooks.Add(TemplateName); 
ну тут как бы создается новая книга, так чтА... Хотя код явно не весь, так что только гадать что там внутрях
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Код весь. Поверь мне. Вызываемые функции не относятся к темплейтам. Если имя файла не передано, то просто создает новую. Если передано, то пытается открыть файл по этому пути. Все остальное особенности Excel-я.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

Алексей
Сам не верил, пока не попробовал!
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

может раньше это и было так, только сейчас после вызова XlCreateExcelWithTemplate(fileName, true); - темплейт освобождается сразу!!! Попробуйте, поставить Message и удалите файл темплейта!!!! Галактика 8.10, все последние патчи стоят. Файл создается как временный - имя файла -> 'имя файла темплейта'1 (далее 2, 3, 4...) если формировать несколько отчетов подряд
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

поисследовав убедился, что сначала открывается книга templat-а, с нее делается слепок, далее template закрывается и мы уже работаем с копией, эта копия нигде не сохраняется. И юзер уже сам потом решает что с ней делать
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

А нету у меня 8.1. Проверять негде.
Исходники библиотеки у меня от 8.1. Может уже в процессе эксплуатиции 8.1 поменяли что-то?
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Сообщение savov »

Попробовал эту функцию в 8.10. Действительно, создается копия файла. Вопрос, как открыть файл (существующий) екселя, считать с него данные и закрыть его, НЕ СОЗДАВАЯ КОПИИ???? Очень надо!!!! Написал программку, все работает, но создается копия, как от этого избавится, пока не знаю.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Подозреваю, что excel ведет себя таким образом при открытии xlt файлов.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

есть Xlopenexcel
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Сообщение savov »

edward_k, согласно доке:

Описание:
Function xlOpenExcel (Visible : boolean) : boolean;
Открывает Excel, никаких файлов не откравает. Если Excel уже был запущен, то новый не создает, а подключается к нему.
Возвращает результат операции.

ДАННАЯ ФУНКЦИЯ НЕ ОТКРЫВАЕТ ФАЙЛ!
Есть что то еще? или может несколько надо?

mOp3e,
РАБОТАЮ С xls файлом (создан вообще независимо от Гал-ки)
Ответить