Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel, Экспорт в шаблон Excel 
V
    Опции темы
comtat
  Дата 7.6.2006, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: нет
Всего: 71



Есть шаблон шапки сметы user posted image

И не обходимо сохранять данные 
в экселевский файл где шапка как на картинке,
но не обходимо чтобы как минимум менялось номер сметы
и туда вносятся такие данные user posted image

Подскажите варианты решения 
 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
matriza
Дата 7.6.2006, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



шапку заново запость плз =) 
PM MAIL   Вверх
comtat
Дата 7.6.2006, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: нет
Всего: 71



user posted image

      Cтроительная смета № 12
Общая стоимость строительства : 10000000 руб.
и т.д.

Чета типа того  


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Zaiц
Дата 7.6.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 13.5.2005

Репутация: нет
Всего: нет



1) Можно через OLE (интерфейсы самого Excel-а). Я так писала формирование квартальных форм ЕСН. Это довольно медленно, но зато выводит данные в указанный шаблон.
2) Есть "быстрый" вывод таблицы - напрямую в файл (это можно делать и без наличия самого Excel-а на машине). Там тоже можно кидать первую строку (заголовок) как часть самих данных. Это я делаю при всех возможных отчетов для выверки данных. Очень быстро, но не так красиво.
Все это есть на www.drkb.ru 
 
PM MAIL   Вверх
dimkaspaun
Дата 7.6.2006, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.5.2006
Где: Новосибирск

Репутация: нет
Всего: нет



насчнт номера сметы я не подскажу можно в принципи создать счетчик выписаных смет например что бы номер сметы выводился в Edit а потом в шаблон Exel в определённую ячейку. А перенос данных из Table такой :
Код

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ExtCtrls, DBCtrls, Grids, DBGrids, DB,
  DBTables,ComObj,activeX, Excel2000, OleServer;
не забуть на форму добавить Exel хреновины во вкладке Servers. 
procedure TForm10.BitBtn5Click(Sender: TObject);

Var
   ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: Variant;
   BeginCol, BeginRow, j: integer;
   RowCount, ColCount: Integer;
   App:variant;
Begin
   BeginCol := 1;
   BeginRow := 17;

 // Размеры выводимого массива данных
   RowCount := Table1.FieldCount;
   ColCount := Table1.FieldDefs.Count;


    // Создание Excel
   ExcelApp := CreateOleObject('Excel.Application');
 // Отключаем реакцию Excel на события, чтобы ускорить вывод информации
   ExcelApp.Application.EnableEvents := false;


 //  Создаем Книгу (Workbook)
 //  Если заполняем шаблон, то
   Workbook := ExcelApp.WorkBooks.Add('C:\ДИПЛОМ Ильиных\ПРАЙС\1.xls' );
   ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant);

 // Заполняем массив
   Table1.DisableControls;
   Table1.First;
   While Not Table1.eof Do
   Begin
       For J := 1 To Table1.FieldDefs.Count Do
       Begin
           ArrayData[Table1.RecNo, J] :=
            Table1.FieldbyName(Table1.FieldDefs.Items[j - 1].DisplayName).value;
       End;
       Table1.Next;
   End;

   Table1.EnableControls;

//     Левая верхняя ячейка области, в которую будем выводить данные
   Cell1 := WorkBook.WorkSheets[1].Cells[BeginRow, BeginCol];
 // Правая нижняя ячейка области, в которую будем выводить данные
   Cell2 := WorkBook.WorkSheets[1].Cells[BeginRow + RowCount - 1,
    BeginCol + ColCount - 1];

 // Область, в которую будем выводить данные
   Range := WorkBook.WorkSheets[1].Range[Cell1, Cell2];

 // А вот и сам вывод данных
 // Намного быстрее поячеечного присвоения
   Range.Value := ArrayData;

 // Делаем Excel видимым
   ExcelApp.Visible := True;
end;

  

Это сообщение отредактировал(а) Girder - 8.6.2006, 09:00
PM MAIL   Вверх
comtat
Дата 7.6.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: нет
Всего: 71



dimkaspaun Номера смет не проблема они есть в базе

Вопрос в том как из шаблона взять шапку
и записать в файл *.xls шапку и данные 

А то что предлагаешь самый простой способ он у меня есть.
Но все равно спасибо   smile 

А вот варианты с Ole интересны
Если можно по подробнеее 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
pavelv
Дата 7.6.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



comtat алгоритм описан пересказывать не буду. Нужно просто открыть твой шаблон, далее забить в него данные и сохранить под другим именем. Потом открыть уже новый файл 
PM MAIL   Вверх
matriza
Дата 7.6.2006, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



извиняй что нету времени объяснять... вот простой примерчик.... там есть описания создания колонок (как я понимаю ты это называешь шапкой...)
Код

procedure TForm_xls.SpeedButton1Click(Sender: TObject);
var
 XLApp,Sheet,Colum:Variant;
 index,i:Integer;
begin
 XLApp:= CreateOleObject('Excel.Application');
 XLApp.Visible:=true;
 XLApp.Workbooks.Add(-4167);
 XLApp.Workbooks[1].WorkSheets[1].Name:='Отчёт';
 Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Columns;
 Colum.Columns[1].ColumnWidth:=10;
 Colum.Columns[2].ColumnWidth:=50;
 Colum.Columns[3].ColumnWidth:=25;
 Colum.Columns[4].ColumnWidth:=12;
 Colum.Columns[5].ColumnWidth:=10;
 Colum.Columns[6].ColumnWidth:=10;
 Colum.Columns[7].ColumnWidth:=15;
 Colum.Columns[8].ColumnWidth:=15;

 Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Rows;
 Colum.Rows[2].Font.Bold:=true;
 Colum.Rows[1].Font.Bold:=true;
 Colum.Rows[1].Font.Color:=clBlue;
 Colum.Rows[1].Font.Size:=14;

 Sheet:=XLApp.Workbooks[1].WorkSheets['Отчёт'];
 Sheet.Cells[1,2]:=Form_table.Caption;
 Sheet.Cells[2,1]:='Номер';
 Sheet.Cells[2,2]:='Наименование';
 Sheet.Cells[2,3]:='OEM';
 Sheet.Cells[2,4]:='Количество';
 Sheet.Cells[2,5]:='Цена';
 Sheet.Cells[2,6]:='Цена (руб)';
 Sheet.Cells[2,7]:='Категория';
 Sheet.Cells[2,8]:='Подкатегория';

 index:=3;
 for i:=1 to Table_xls.RecordCount do
  begin
   Sheet.Rows[index].Font.Color:=clBlack;
   Sheet.Cells[index,1]:=DBGridEh1.Fields[0].AsString;
   Sheet.Cells[index,2]:=DBGridEh1.Fields[1].AsString;
   Sheet.Cells[index,3]:=DBGridEh1.Fields[2].AsString;
   Sheet.Cells[index,4]:=DBGridEh1.Fields[3].AsString;
   Sheet.Cells[index,5]:=DBGridEh1.Fields[4].AsString;
   Sheet.Cells[index,6]:=DBGridEh1.Fields[5].AsString;
   Sheet.Cells[index,7]:=DBGridEh1.Fields[10].AsString;
   Sheet.Cells[index,8]:=DBGridEh1.Fields[11].AsString;
   Inc(index);
   Table_xls.Next;
  end;
end; 
  

Это сообщение отредактировал(а) Girder - 8.6.2006, 09:01
PM MAIL   Вверх
Albinos_x
Дата 7.6.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108





--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
comtat
Дата 8.6.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: нет
Всего: 71



Albinos_x огромное спасибо 


--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Zaiц
Дата 8.6.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 13.5.2005

Репутация: нет
Всего: нет



Насчет OLE
1) Я делаю через позднее связывание, т.к. прогу приходится кидать по филиалам, а у всех Excel разный.
2) Чтобы не мучиться каждый раз, я написала маленький модуль, в котором находятся все нужные мне функции для работы по шаблону
3) Сначала создаю нужный excel-ный файл (шаблон), в нем делаю все нужное форматирование (цвет, формат, ширина колонок, и т.д.), в нужных ячейках прописываю поля для печати, если надо печатать таблицу - делаю регион в самом Excel-е, а потом из программы просто вызываю нужные мне ф-ции.
Если надо - я могу тебе этот файл (pas) и примеры вызова.

 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.