Страница 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

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

ExApp.WorkBooks.Add(TemplateName); 
ну тут как бы создается новая книга, так чтА... Хотя код явно не весь, так что только гадать что там внутрях

Добавлено: 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 файлом (создан вообще независимо от Гал-ки)