Уважаемые господа коллеги, если есть желание и возможность посоветуйте плз. где почитать или посмотреть на тему работы под Delphi с офисными приложениями Excell, Word в первую очередь. Может есть публикации или литературка описывающая в доступной форме. А может кто подкинет что. Мне хочется все выходные формы проекта формировать в виде DOC и XLS файлов, поскольку в большинстве своем они нужны не для печати, а для отправки по e-mail, заодно хочется научиться в автомате разбирать входящую почту.
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;