IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Работа с офисными компанентами
сообщение
Сообщение #1


Гость






Уважаемые господа коллеги, если есть желание и возможность посоветуйте плз. где почитать или посмотреть на тему работы под Delphi с офисными приложениями Excell, Word в первую очередь. Может есть публикации или литературка описывающая в доступной форме. А может кто подкинет что. Мне хочется все выходные формы проекта формировать в виде DOC и XLS файлов, поскольку в большинстве своем они нужны не для печати, а для отправки по e-mail, заодно хочется научиться в автомате разбирать входящую почту.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Вот кусок кода (я когда то лепил), разбирайся сам:
unit Unit4;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, OleServer, Excel97, StdCtrls, ComCtrls, CheckLst, ExtCtrls;

type
 TInfForm4 = record
   List: String;
   Count: Integer;
   Data: array of record
     Name: String;
     Shift: String;
     Policlenik: Integer;
     New: Integer;
     SetDiagn: Integer;
     DataObr: TDateTime;
   end;
 end;

 TForm4 = class(TForm)
   EA: TExcelApplication;
   CheckListBox1: TCheckListBox;
   MonthCalendar1: TMonthCalendar;
   MonthCalendar2: TMonthCalendar;
   Button1: TButton;
   Button2: TButton;
   ComboBox1: TComboBox;
   ComboBox2: TComboBox;
   Panel1: TPanel;
   procedure Button1Click(Sender: TObject);
 private
 public
   Data: TInfForm4;
 end;

procedure ShowForm4(Info: TInfForm4);
function IndexToStr(X, Y: Integer): String;

var
 ZeroPos: record
   X, Y: Integer;
 end;


implementation

{$R *.dfm}

function IndexToStr(X, Y: Integer): String;
var
 E: String;
begin
 Inc(X, ZeroPos.X);
 Inc(Y, ZeroPos.Y);
 if X>26 then
   Result := Char(Byte((X-1) div 26+64))
 else
   Result := '';
 Result := Result+Char(Byte((X-1) mod 26+65))+IntToStr(Y);
 E := Result;
 Result := E;
end;

procedure ShowForm4(Info: TInfForm4);
var
 Form4: TForm4;
 ST: TSystemTime;
 F: Integer;
begin
Form4 := TForm4.Create(Application);
try
  Form4.Data := Info;
  Form4.CheckListBox1.Items.Text := Info.List;
  for F := 0 to Form4.CheckListBox1.Items.Count-1 do
    Form4.CheckListBox1.Checked[F] := True;
  GetLocalTime(ST);
  Form4.MonthCalendar2.Date := SystemTimeToDateTime(ST);
  St.wMonth := 1;
  St.wDay := 1;
  Form4.ComboBox1.ItemIndex := 2;
  Form4.ComboBox2.ItemIndex := 4;
  Form4.MonthCalendar1.Date := SystemTimeToDateTime(ST);
  Form4.ShowModal;
finally
  Form4.Free;
end;
end;

procedure TForm4.Button1Click(Sender: TObject);
var
 F, F1, F2: Integer;
 List: array of record
   Shifr: String;
   P: array of record
     Vperv, Sost: Integer;
     PVperv, PSost: Byte;
   end;
   Vperv, Sost: Integer;
 end;
 S, S1, S2: String;
 Date2001: TDateTime;
 CCount: Integer;

 function ShifrToIndex(S: String): Integer;
 var
   F: Integer;
 begin
   Result := Length(List)-1;
   for F := 0 to Length(List)-2 do
     if AnsiLowerCase(List[F].Shifr)=AnsiLowerCase(S) then
       Result := F;
 end;

begin
 try
   EA.Connect;
 except
   ShowMessage('Невозможно присоединится к Excel''ю');
   Exit;
 end;
 EA.Visible[0] := True;
 Panel1.Visible := True;
 Panel1.Caption := 'Загрузка данных';
 Panel1.Refresh;
 ZeroPos.X := ComboBox1.ItemIndex+1;
 ZeroPos.Y := ComboBox2.ItemIndex+1;
 F := 0;
 try
   EA.Range[IndexToStr(0, 0), IndexToStr(0, 0)].Formula
 except
   EA.FindFile;
   EA.ActiveWindow.Activate;
   EA.Visible[0] := True;
   try
     EA.Range[IndexToStr(0, 0), IndexToStr(0, 0)].Formula
   except
     ShowMessage('Невозможно присоединится к книге Excel''я');
     Panel1.Visible := False;
     Exit;
   end;
   ShowMessage('Выбирете нужный лист книги Excel''я');
 end;
 try
   while EA.Range[IndexToStr(0, F), IndexToStr(0, F)].Formula<>'' do
   begin
     SetLength(List, F+1);
     List[F].Shifr := EA.Range[IndexToStr(0, F), IndexToStr(0, F)].Formula;
     SetLength(List[F].P, Data.Count);
     Inc(F);
   end;
 except
   ShowMessage('Ошибка чтения книги Excel''я');
   Panel1.Visible := False;
   Exit;
 end;
 SetLength(List, F+1);
 SetLength(List[F].P, Data.Count);
 Panel1.Caption := 'Сортировка';
 Panel1.Refresh;
 Date2001 := StrToDate('1.1.2001');
 for F := 0 to Length(Data.Data)-1 do
 begin
   F1 := Data.Data[F].Policlenik;
   if F1<0 then
     F1 := 0;
   if CheckListBox1.Checked[F1] then
   begin
     F2 := ShifrToIndex(Data.Data[F].Shift);
     if ClassName='TForm4' then
      if (Data.Data[F].DataObr>=MonthCalendar1.Date) and
        (Data.Data[F].DataObr<=MonthCalendar2.Date) and
        (Data.Data[F].New<2) and (Data.Data[F].SetDiagn=1) then
      begin
        Inc(List[F2].Vperv);
        Inc(List[F2].P[F1].Vperv);
      end;
     if ClassName='TForm5' then
      if (Data.Data[F].DataObr>=MonthCalendar1.Date) and
        (Data.Data[F].DataObr<=MonthCalendar2.Date) and
        (Data.Data[F].New=1) then
      begin
        Inc(List[F2].Vperv);
        Inc(List[F2].P[F1].Vperv);
      end;
     if ((Data.Data[F].DataObr<=MonthCalendar2.Date) and
       (Data.Data[F].New=1)) or ((Data.Data[F].DataObr<Date2001) and
       (Data.Data[F].New<>3)) then
     begin
       Inc(List[F2].Sost);
       Inc(List[F2].P[F1].Sost);
     end;
   end;
 end;
 try
   CCount := 0;
   for F := 0 to CheckListBox1.Items.Count-1 do
     if CheckListBox1.Checked[F] then
       Inc(CCount);
   for F1 := 0 to Length(List)-1 do
   begin
     S1 := '=';
     S2 := '=';
     F := -1;
     for F2 := 0 to Data.Count-1 do
       if CheckListBox1.Checked[F2] then
       begin
         Inc(F);
         S1 := S1+IndexToStr(F*4+1, F1)+'+';
         S2 := S2+IndexToStr(F*4+3, F1)+'+';
         EA.Range[IndexToStr(F*4+1, F1), IndexToStr(F*4+1, F1)].FormulaLocal := List[F1].P[F2].Vperv;
         EA.Range[IndexToStr(F*4+2, F1), IndexToStr(F*4+2, F1)].FormulaLocal :=
'=ЕСЛИ(И('+IndexToStr(F*4+1, F1)+'>0; '+IndexToStr(CCount*4+1, F1)+'>0); ЦЕЛОЕ('+
IndexToStr(F*4+1, F1)+'*100/'+IndexToStr(CCount*4+1, F1)+'*10)/10; "-")';
         EA.Range[IndexToStr(F*4+3, F1), IndexToStr(F*4+3, F1)].FormulaLocal := List[F1].P[F2].Sost;
         EA.Range[IndexToStr(F*4+4, F1), IndexToStr(F*4+4, F1)].FormulaLocal :=
'=ЕСЛИ(И('+IndexToStr(F*4+3, F1)+'>0; '+IndexToStr(CCount*4+2, F1)+'>0); ЦЕЛОЕ('+
IndexToStr(F*4+3, F1)+'*100/'+IndexToStr(CCount*4+2, F1)+'*10)/10; "-")';
       end;
     SetLength(S1, Length(S1)-1);
     SetLength(S2, Length(S2)-1);
     EA.Range[IndexToStr(F*4+5, F1), IndexToStr(F*4+5, F1)].FormulaLocal := S1;
     EA.Range[IndexToStr(F*4+6, F1), IndexToStr(F*4+6, F1)].FormulaLocal := S2;
     if EA.Range[IndexToStr(F*4+5, F1), IndexToStr(F*4+5, F1)].Text<>List[F1].Vperv then
       ShowMessage('Ощибки в вычислениях:'#13'Ячейка: '+IndexToStr(F*4+5, F1)+
 #13'Должно быть: '+IntToStr(List[F1].Vperv)+#13'Содержится: '+
IntToStr(EA.Range[IndexToStr(F*4+5, F1), IndexToStr(F*4+5, F1)].Text));
     if EA.Range[IndexToStr(F*4+6, F1), IndexToStr(F*4+6, F1)].Text<>List[F1].Sost then
       ShowMessage('Ощибки в вычислениях:'#13'Ячейка: '+IndexToStr(F*4+6, F1)+
#13'Должно быть: '+IntToStr(List[F1].Sost)+#13'Содержится: '+
IntToStr(EA.Range[IndexToStr(F*4+6, F1), IndexToStr(F*4+6, F1)].Text));
     Panel1.Caption := 'Вставка (завершено '+IntToStr(F1*100 div (Length(List)-1))+'%)';
     Panel1.Refresh;
   end;
 except
   Panel1.Visible := False;
   ShowMessage('Произошла ошибка синхронизации таблици!'#13'Замечено изменение таблици...');
 end;
 Panel1.Visible := False;
 EA.Disconnect;
end;

end.


Сообщение отредактировано: volvo -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Примеры на эту тему лежат в папке Demos/ActiveX
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 25

Репутация: -  0  +


Чё то я не пойму причём тут ЭктивИкс?! ??? Здесь объект ОЛЕ нужен. ОН со стандартными офисными прогр. работает
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


Цитата
Чё то я не пойму причём тут ЭктивИкс?! ??? Здесь объект ОЛЕ нужен. ОН со стандартными офисными прогр. работает

Второе предупреждение!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 16:40
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name