Уважаемые господа коллеги, если есть желание и возможность посоветуйте плз. где почитать или посмотреть на тему работы под Delphi с офисными приложениями Excell, Word в первую очередь. Может есть публикации или литературка описывающая в доступной форме. А может кто подкинет что. Мне хочется все выходные формы проекта формировать в виде DOC и XLS файлов, поскольку в большинстве своем они нужны не для печати, а для отправки по e-mail, заодно хочется научиться в автомате разбирать входящую почту.
mj
7.06.2003 3:16
Вот кусок кода (я когда то лепил), разбирайся сам:
unit Unit4;
interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleServer, Excel97, StdCtrls, ComCtrls, CheckLst, ExtCtrls;
type
TInfForm4 = record
List: String;
Count: Integer;
Data: arrayofrecordName: 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);
privatepublic
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>26thenResult := Char(Byte((X-1) div26+64))
elseResult := '';
Result := Result+Char(Byte((X-1) mod26+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 := 0to Form4.CheckListBox1.Items.Count-1do
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: arrayofrecord
Shifr: String;
P: arrayofrecord
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;
beginResult := Length(List)-1;
for F := 0to Length(List)-2doif AnsiLowerCase(List[F].Shifr)=AnsiLowerCase(S) thenResult := F;
end;
begintry
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;
trywhile EA.Range[IndexToStr(0, F), IndexToStr(0, F)].Formula<>''dobegin
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 := 0to Length(Data.Data)-1dobegin
F1 := Data.Data[F].Policlenik;
if F1<0then
F1 := 0;
if CheckListBox1.Checked[F1] thenbegin
F2 := ShifrToIndex(Data.Data[F].Shift);
if ClassName='TForm4'thenif (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) thenbegin
Inc(List[F2].Vperv);
Inc(List[F2].P[F1].Vperv);
end;
if ClassName='TForm5'thenif (Data.Data[F].DataObr>=MonthCalendar1.Date) and
(Data.Data[F].DataObr<=MonthCalendar2.Date) and
(Data.Data[F].New=1) thenbegin
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)) thenbegin
Inc(List[F2].Sost);
Inc(List[F2].P[F1].Sost);
end;
end;
end;
try
CCount := 0;
for F := 0to CheckListBox1.Items.Count-1doif CheckListBox1.Checked[F] then
Inc(CCount);
for F1 := 0to Length(List)-1dobegin
S1 := '=';
S2 := '=';
F := -1;
for F2 := 0to Data.Count-1doif CheckListBox1.Checked[F2] thenbegin
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*100div (Length(List)-1))+'%)';
Panel1.Refresh;
end;
except
Panel1.Visible := False;
ShowMessage('Произошла ошибка синхронизации таблици!'#13'Замечено изменение таблици...');
end;
Panel1.Visible := False;
EA.Disconnect;
end;
end.
mj
7.06.2003 3:21
Примеры на эту тему лежат в папке Demos/ActiveX
Forsag
14.06.2003 22:54
Чё то я не пойму причём тут ЭктивИкс?! ??? Здесь объект ОЛЕ нужен. ОН со стандартными офисными прогр. работает
mj
16.06.2003 5:12
Цитата
Чё то я не пойму причём тут ЭктивИкс?! ??? Здесь объект ОЛЕ нужен. ОН со стандартными офисными прогр. работает
Второе предупреждение!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.