Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2008, 16:52   #1
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию создание excel

Поиск по форуму не дал мне ответа, спрашиваю у форумчан:
Нужно создать excel таблицу, и в ячейки записывать данные.
Как это проще сделать?
P.S. office установден.
dimonbest вне форума Ответить с цитированием
Старый 28.05.2008, 16:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нужно создать excel таблицу
Создай пустышку руками потом через ODBC подключи к ADO компонентам и работай как с обычной БД.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.05.2008, 17:24   #3
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

Или через OLE, благо по этой теме инфы много.
Нет невыполнимых задач, всё дело времени...
D-mon вне форума Ответить с цитированием
Старый 28.05.2008, 17:30   #4
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

вроде уже разобрался:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Ole2, OleAuto, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  MyExcel: Variant;
  i,j: byte;
begin
  MyExcel:=CreateOleObject('Excel.Application');
  MyExcel.Visible:=false;
  MyExcel.WorkBooks.Add;
for i:=1 to 15 do

  MyExcel.Cells[i,1].value:=i;
  MyExcel.ActiveWorkbook.SaveAs('c:\dima2.xls');
  MyExcel.Quit;
  close;
end;



end.
Только выдает предупреждение:
UNIT OleAuto is deprecated
Это нормально?
dimonbest вне форума Ответить с цитированием
Старый 28.05.2008, 18:30   #5
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Если нужно, то вот ещё. Недавно делал:
Код:
procedure TForm1.N3Click(Sender: TObject);
var
  List,XApp: Variant;
  Index,i,j:integer;
begin
XApp:=CreateOleObject('Excel.Application');
XApp.visible:=true;
XApp.WorkBooks.Add(-4167);
XApp.WorkBooks[1].WorkSheets[1].Name:='Запрос1';

List:=XApp.WorkBooks[1].WorkSheets['Запрос1'].Columns;
List.Columns[1].ColumnWidth:=16;
List.Columns[2].ColumnWidth:=8;
List.Columns[3].ColumnWidth:=17;
List.Columns[4].ColumnWidth:=13;
List.Columns[5].ColumnWidth:=10;

List:=XApp.WorkBooks[1].WorkSheets['Запрос1'].Rows;
List.Rows[1].font.size:=14;
List.Rows[1].font.italic:=false;
List.Rows[1].font.bold:=true;
List.Rows[2].font.bold:=true;

List:=XApp.WorkBooks[1].WorkSheets['Запрос1'];
List.Cells[1,3]:='ОТЧЕТ';
List.Cells[2,1]:='CODE';
List.Cells[2,2]:='Наименование';
List.Cells[2,3]:='ФИО заказчика';
List.Cells[2,4]:='телефон';
List.Cells[2,5]:='счёт';
Index:=3;
form6.ADOQuery1.First;
for i:=1 to form6.ADOQuery1.RecordCount do
  begin for j:=1 to form6.DBGrid1.Columns.Count do
    List.Cells[index,j]:=form6.DBGrid1.Fields[j-1].AsString;
    Index:=Index+1;
    form6.ADOQuery1.Next;
  end;
end;
zetrix вне форума Ответить с цитированием
Старый 03.07.2008, 18:38   #6
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

Засада.... написал програмку создания excel файла на форме, работает отлично:
Код:
uses Ole2, OleAuto; 

procedure TForm1.Button1Click(Sender: TObject);
var 
  MyExcel: Variant;
begin
  MyExcel:=CreateOleObject('Excel.Application');
  MyExcel.Visible:=true;
  MyExcel.WorkBooks.Add;
  MyExcel.Cells[1,1].value:='1';
  MyExcel.ActiveWorkbook.SaveAs(PATHNAME);
  MyExcel.Quit;
end;
Скопировал функцию в службу, и она (служба) вылетает в этом месте:
Код:
  showmessage('ok');
  MyExcel:=CreateOleObject('Excel.Application'); <---------------------------------------- вылетает
  showmessage('ok2');
В чем может быть проблема?
dimonbest вне форума Ответить с цитированием
Старый 03.07.2008, 19:17   #7
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

мой 7й не видет uses Ole2, ... ругаеца.
beegl вне форума Ответить с цитированием
Старый 04.07.2008, 09:45   #8
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

Цитата:
Сообщение от beegl Посмотреть сообщение
мой 7й не видет uses Ole2, ... ругаеца.
У меня тоже 7ой... я копировал файлы
Ole2.dcu
OleAuto.dcu
OleCtl.dcu
в папку с проектом
dimonbest вне форума Ответить с цитированием
Старый 04.07.2008, 10:00   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Скопировал функцию в службу
Приведи код службы с этими вставками.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2008, 10:44   #10
dimonbest
Форумчанин
 
Регистрация: 07.02.2008
Сообщений: 150
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, IdMessage, Registry,Variants,Forms,
  StdCtrls,IdTCPServer, IdSMTPServer, IdPOP3,shellapi, IdAntiFreezeBase,
  IdAntiFreeze,dateutils,Ole2, OleAuto;

type
  Tsmtppop = class(TService)
    procedure createxls (s:string);
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceExecute(Sender: TService);
    procedure ServiceAfterInstall(Sender: TService);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;

var
  smtppop: Tsmtppop;
   stop,fl1,fl2: boolean;
   tm: tsystemtime;
   pf,sf:byte;
implementation

{$R *.DFM}



procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  smtppop.Controller(CtrlCode);
end;

function Tsmtppop.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure Tsmtppop.ServiceCreate(Sender: TObject);
begin
stop:=false;
fl1:=false;
fl2:=false;
end;

procedure Tsmtppop.createxls (s:string);
label finish,rep;
type
   TD = record
      A : array [1..8] of byte;
   end;
var
  REG: TRegistry;
  MyExcel: Variant;
  i,ii,c,t,v,cicle: byte;
  st: string;
  f: file of byte;
  en,ex,ent,ext,allen,allex: integer;
  day,month:byte;
D:TDateTime;
    D1, M1, Y1,year:word;
    H1, M2, S2, S3 ,ht : word;
begin
REG := TRegistry.Create;
REG.RootKey:=HKEY_LOCAL_MACHINE;
REG.OpenKey('SOFTWARE\MCNT\Traffic Pro',false);
  showmessage('ok');--------------------Это сообщение выводиться
  MyExcel:=CreateOleObject('Excel.Application');
  showmessage('ok2');--------------------А это уже нет
  MyExcel.Visible:=false;
  MyExcel.WorkBooks.Add;


   i:=1;
   st:='';
   while s[i]<>'-' do
   begin
   st:=st+s[i];
   i:=i+1;
   end;
   day:=strtoint(st);

   i:=i+1;
   st:='';
   while (s[i]<>'-')do
   begin
   st:=st+s[i];
   i:=i+1;
   end;
   month:=strtoint(st);



   i:=i+1;
   st:='';
   while (i<=length(s))do
   begin
   st:=st+s[i];
   i:=i+1;
   end;
   year:=strtoint(st);

   ii:=1;
   while reg.ValueExists('file'+inttostr(ii)) do ii:=ii+1;

   ii:=ii-1;
   if ii >3 then
      for cicle:=4 to ii do
   MyExcel.WorkBooks[1].Worksheets.Add;
   for cicle:=1 to ii do
           begin
   decodeDate(D, Y1, M1, D1);       // 2008 2 8
   decodeTime(D, H1, M2, S2, S3);

close(f);
   MyExcel.WorkBooks[1].WorkSheets[cicle].Cells[v,1].value:='Всего:';
   MyExcel.WorkBooks[1].WorkSheets[cicle].Cells[v,2].value:=allen;
   MyExcel.WorkBooks[1].WorkSheets[cicle].Cells[v,3].value:=allex;
                            end;
  s:=' ';
  if day<10 then s:=s+'0'+inttostr(day) else
     s:=s+inttostr(day);
  s:=s+'-';
  if month<10 then s:=s+'0'+inttostr(month) else
     s:=s+inttostr(month);
  s:=s+'-';
     s:=s+inttostr(year);
  MyExcel.ActiveWorkbook.SaveAs(REG.readstring('path')+'traffic pro\mcounter\export\'+reg.ReadString('mag')+s+'.xls');

  MyExcel.Quit;

end;

procedure Tsmtppop.ServiceExecute(Sender: TService);
var
  d,dt:tdatetime;
  REG: TRegistry;
  sdev,pdev,i:byte;
  s,st:string;
  D1, M1, Y1,year,day,month:word;
begin

while stop<>true do
   begin
sleep(5000);
REG := TRegistry.Create;
REG.RootKey:=HKEY_LOCAL_MACHINE;
REG.OpenKey('SOFTWARE\MCNT\Traffic Pro',false);

s:=REG.ReadString('now');

   i:=1;
   st:='';
   while s[i]<>'-' do
   begin
   st:=st+s[i];
   i:=i+1;
   end;
   day:=strtoint(st);

   i:=i+1;
   st:='';
   while (s[i]<>'-')do
   begin
   st:=st+s[i];
   i:=i+1;
   end;
   month:=strtoint(st);



   i:=i+1;
   st:='';
   while (i<=length(s))do
   begin
   st:=st+s[i];
   i:=i+1;
   end;
   year:=strtoint(st);

 d:=now;
 decodeDate(D, Y1, M1, D1);


 if (y1<>year) or (m1<>month)or (d1<>day)then
 begin
 createxls(inttostr(day)+'-'+inttostr(month)+'-'+inttostr(year));--------------------вызов создание excel файла
 dt:=encodedate(year,month,day);
 showmessage(datetostr(dt));
 dt:=incday(dt,1);
 end;

 decodedate(dt,year,month,day);
  while (y1<>year) or (m1<>month)or (d1<>day)do
 begin

 dt:=encodedate(year,month,day);
 showmessage(datetostr(dt));
 dt:=incday(dt,1);
 decodedate(dt,year,month,day);
 end;


if REG.ValueExists('popf')then
pf:=strtoint(REG.ReadString('popf'));
if REG.ValueExists('smtpf')then
sf:=strtoint(REG.ReadString('smtpf'));
if (REG.ValueExists('popexec')) or (REG.ValueExists('popexec')) then
 if (REG.ReadString('popexec')='5') or (REG.ReadString('smtpexec')='5') then
   begin
   smtppop.DoStop;
   stop:=true;
   end;


   REG.CloseKey;
   REG.Destroy;


end;


end.
dimonbest вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из Access в Excel, Экспорт из отчётов в таблицу Excel Kissedbythegod Microsoft Office Access 1 31.05.2008 22:15
очень громоздкие финансовые модели в Excel, а Excel не тянет Ragazza Microsoft Office Excel 7 03.10.2007 20:08
создание файла из excel __madD__ Microsoft Office Excel 1 26.09.2007 16:54
Формирование из excel в ASCII, у меня он формирует по одному клиенту а в Excel нескол Askat Общие вопросы Delphi 0 18.07.2007 06:28
Как вытащить данные из Excel в бд dephi, а потом (после работы с данными) сформировать новый файл excel. Геля БД в Delphi 1 10.04.2007 15:11