Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Работа с шаблоном xls


Автор: comtat 26.1.2007, 10:55
Возникла такая ситуация, что необходимо делать отчеты в xls
чтобы облегчить труд себе и пользователям возникла идея использовать шаблон.

Т.е. есть шаблон Счет.xls из него нужно создать 
новый документ ексел с сохранением в нем форматирования, как в шаблоне и внесенными данными, 
чтобы пользователь мог его редактировать и при желании сохранить. 
При этом сам шаблон не должен редактироваться.

Как такое можно реализовать ?? 

Автор: _hunter 26.1.2007, 12:08
копируеш шаблон в .xls и дальше как заполняеш его как написанно в шапке форума. после заполнения показываеш его. все...

Автор: comtat 26.1.2007, 12:12
Цитата(_hunter @  26.1.2007,  12:08 Найти цитируемый пост)
копируеш шаблон в .xls

как это реализовать ??

открыть новый xls пройтись по шаблону и копить все в xls, так?


Автор: _hunter 26.1.2007, 12:16
Цитата(comtat @  26.1.2007,  12:12 Найти цитируемый пост)
как это реализовать ??

банальным CopyFile...

Автор: comtat 26.1.2007, 12:48
Ну тогда он будет сохранен, а сохранение хотелось бы оставить на совести юзера.
Ведь сохранение не всегда необходимо 

Автор: CatATonik 26.1.2007, 14:47
Сохраняшь свой файл как Счет.xlt, дальше Application.Workbooks.Add смотри в справке по VBA параметры, там есть "файл шаблона".

Автор: Данкинг 30.1.2007, 20:28
Пусть шаблон копируется в какую-нибудь временную папку на компе пользователя и оттуда уже открывается для внесения изменений. При последующих изменениях старая копия шаблона заменяется новой. Я так делал.

Автор: CatATonik 31.1.2007, 10:00
2comcat: Ну если ты про:
xla.Workbooks.Add('c:\delphi\excel\sample\demo.xlt');
то да. Только совсем не обязательно импортировать библиотеки типов и т.д. Вполне достаточно Variant'ов.

И не нужно, ничего каждый раз сохранять перзаписывать, копировать и т.д. При открытии на основе шаблона создается НОВАЯ книга на основе шаблона (т.е. его копия), сам шаблон как был так и остается.

Автор: comtat 31.1.2007, 11:37
Я сделал следующим образом
Код

      XLApp:= CreateOleObject('Excel.Application');
      Form7.Show();
      Application.ProcessMessages;
      pach := ExtractFileDir(Application.ExeName);
      if (AnsiStrLastChar(PChar(pach)) <> #92) then pach := pach+'\';

      XLApp.Workbooks.Open(pach+'Act.xlt'); 

      Sheet := XLApp.Workbooks[1].WorkSheets['Àêò']; 

      Sheet.Cells[1,1] := 'АКТ ВЫПОЛНЕНЫХ РАБОТ на ' + DateToStr(Date())+' г.';

      Sheet.Cells[9,4] := IntToStr(Form1.DataSource6.DataSet.RecordCount);
      Sheet.Cells[9,5] := '160-00';
      Sheet.Cells[9,6] := IntToStr(160*Form1.DataSource6.DataSet.RecordCount)+'-00';

      str := Sheet.Cells[11,1];
      Sheet.Cells[11,1] := str + NumToStr(160*Form1.DataSource6.DataSet.RecordCount, 0)+'__';
      Form7.Close();
      XLApp.Visible:=true;
 
CatATonik  спасибо за наводку на решение  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)