unit u_op_seae_word; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, dxExEdtr, DB, dxTL, dxDBCtrl, dxDBGrid, dxCntner, StdCtrls, Mask, wwdbedit, Wwdotdot, Wwdbcomb, bsSkinCtrls, Dialogs, Excel, ADODB, BusinessSkinForm, DBCtrls, OleServer, Word2000; type Tfrm_op_seae_word = class(TForm) bsBusinessSkinForm1: TbsBusinessSkinForm; t_excel_bill: TADOQuery; t_excel_bill1: TDataSource; bsSkinPanel1: TbsSkinPanel; t_excel_bill_bill: TADOQuery; t_excel_bill_bill1: TDataSource; bsSkinPanel8: TbsSkinPanel; bsSkinButton10: TbsSkinButton; bsSkinButton11: TbsSkinButton; bsSkinButton12: TbsSkinButton; t_op_ctn: TADOQuery; bsSkinOpenDialog1: TOpenDialog; SaveDialog: TSaveDialog; bsSkinGroupBox2: TbsSkinGroupBox; bsSkinPanel6: TbsSkinPanel; bsSkinPanel7: TbsSkinPanel; bsSkinButton7: TbsSkinButton; bsSkinButton8: TbsSkinButton; bsSkinButton9: TbsSkinButton; t_excel_billEX_ID: TAutoIncField; t_excel_billDSDesigner: TStringField; t_excel_billDSDesigner2: TBlobField; dxDBGrid2: TdxDBGrid; dxDBGrid2Column1: TdxDBGridMaskColumn; dxDBGrid2Y: TdxDBGridMaskColumn; bsSkinPanel9: TbsSkinPanel; wwDBComboBox2: TwwDBComboBox; DBEdit1: TDBEdit; dxDBGrid2Column4: TdxDBGridColumn; DBEdit5: TDBEdit; bsSkinButton1: TbsSkinButton; bsSkinButton2: TbsSkinButton; bsSkinButton4: TbsSkinButton; bsSkinGroupBox3: TbsSkinGroupBox; bsSkinPanel2: TbsSkinPanel; dxDBGrid1: TdxDBGrid; dxDBGrid1Column1: TdxDBGridMaskColumn; Memo1: TMemo; bsSkinButton13: TbsSkinButton; wordApp: TWordApplication; lbl1: TLabel; procedure FormShow(Sender: TObject); procedure bsSkinButton1Click(Sender: TObject); procedure bsSkinButton2Click(Sender: TObject); procedure bsSkinButton4Click(Sender: TObject); procedure t_excel_billPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); procedure t_excel_bill_billPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); procedure t_excel_billBeforeDelete(DataSet: TDataSet); procedure bsSkinButton7Click(Sender: TObject); procedure bsSkinButton8Click(Sender: TObject); procedure bsSkinButton9Click(Sender: TObject); procedure t_excel_bill_ctnBeforeInsert(DataSet: TDataSet); procedure t_excel_bill_billBeforePost(DataSet: TDataSet); procedure t_excel_bill_billAfterInsert(DataSet: TDataSet); procedure bsSkinButton11Click(Sender: TObject); procedure bsSkinButton12Click(Sender: TObject); procedure bsSkinButton10Click(Sender: TObject); procedure bsSkinButton13Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frm_op_seae_word: Tfrm_op_seae_word; implementation uses u_main, my_sys_function, u_op_seae; {$R *.dfm} procedure Tfrm_op_seae_word.FormShow(Sender: TObject); begin t_excel_bill.open; t_excel_bill_bill.open; end; procedure Tfrm_op_seae_word.bsSkinButton1Click(Sender: TObject); begin if employee<>'陈冠宇' then begin showmessage('请联系系统管理员'); Exit; end; t_excel_bill.insert; end; procedure Tfrm_op_seae_word.bsSkinButton2Click(Sender: TObject); begin if employee<>'陈冠宇' then begin showmessage('请联系系统管理员'); Exit; end; table_post(t_excel_bill); end; procedure Tfrm_op_seae_word.bsSkinButton4Click(Sender: TObject); begin if employee<>'陈冠宇' then begin showmessage('请联系系统管理员'); Exit; end; table_delete(t_excel_bill); end; procedure Tfrm_op_seae_word.t_excel_billPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin showmessage('格式名称重复'); end; procedure Tfrm_op_seae_word.t_excel_bill_billPostError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction); begin showmessage('字段名称重复'); end; procedure Tfrm_op_seae_word.t_excel_billBeforeDelete(DataSet: TDataSet); begin table_before_delete(t_excel_bill_bill,'子表'); end; procedure Tfrm_op_seae_word.bsSkinButton7Click(Sender: TObject); begin t_excel_bill_bill.insert; end; procedure Tfrm_op_seae_word.bsSkinButton8Click(Sender: TObject); begin table_post(t_excel_bill_bill); end; procedure Tfrm_op_seae_word.bsSkinButton9Click(Sender: TObject); begin table_delete(t_excel_bill_bill); end; procedure Tfrm_op_seae_word.t_excel_bill_ctnBeforeInsert( DataSet: TDataSet); begin table_before_insert(t_excel_bill); end; procedure Tfrm_op_seae_word.t_excel_bill_billBeforePost( DataSet: TDataSet); begin table_before_post(t_excel_bill_bill,'字段名称'); table_before_post(t_excel_bill_bill,'标签名'); end; procedure Tfrm_op_seae_word.t_excel_bill_billAfterInsert( DataSet: TDataSet); begin t_excel_bill_bill['EX_ID']:=t_excel_bill['EX_ID']; end; procedure Tfrm_op_seae_word.bsSkinButton11Click(Sender: TObject); begin close; end; procedure Tfrm_op_seae_word.bsSkinButton12Click(Sender: TObject); begin if employee<>'陈冠宇' then begin showmessage('请联系系统管理员'); Exit; end; if t_excel_bill.IsEmpty then exit; if (t_excel_bill.state=dsinsert)or(t_excel_bill.state=dsedit)then t_excel_bill.Post; if bsSkinOpenDialog1.Execute then begin t_excel_bill.EDIT; t_excel_billDSDesigner2.LoadFromFile(bsSkinOpenDialog1.FileName); t_excel_bill.post; end; end; procedure Tfrm_op_seae_word.bsSkinButton10Click(Sender: TObject); var str:Tstringlist; wide_str,tempstr:widestring; i:integer; Y:INTEGER; templateName: OleVariant; newTemplate: OleVariant; ItemIndex: OleVariant; vSelection: Selection; vBookMark: BookMark; vTable: Table; WD: WordDocument; function WriteWordBookMark(WD: WordDocument;BookMarkName,BookMarkValue: String): Boolean;//将值写入word文件的书签处 var BMName: OleVariant; begin Result := False; if WD.Bookmarks.Exists(BookMarkName) then begin BMName := BookMarkName; WD.Bookmarks.Item(BMName).Select; wordApp.Selection.Text := BookMarkValue; end; end; begin if t_excel_bill.IsEmpty then exit; t_excel_billDSDesigner2.SaveToFile(ExtractFilePath(ParamStr(0))+t_excel_bill.fieldbyname('EX_ID').asstring+'.doc'); templateName :=ExtractFilePath(ParamStr(0))+t_excel_bill.fieldbyname('EX_ID').asstring+'.doc'; str:=Tstringlist.Create; str.Clear; newTemplate := False; try wordApp.Connect(); except MessageDlg('您的计算机上还未安装Microsoft Office Word97或更高的版本!', mtError, [mbOK], 0); Abort; end; { WordApp:TWordApplication; Template:String;//模板文件名(全路径) BookMarkName:String;//模板文件中的书签名 BookMarkValue:String;//需要在标签位置填写的值,即从数据库中读取出来的值 visibleTemp:boolean;//word应用程序是否可见 WD:= WordApp.Documents.Add(Template, EmptyParam, EmptyParam, visibleTemp); WriteWordBookMark(WordApp, WD,BookMarkName,BookMarkValue); //****************************************************// } wd:=wordApp.Documents.AddOld(templateName, newTemplate); t_excel_bill_bill.First; while not t_excel_bill_bill.eof do begin if t_excel_bill_bill.fieldbyname('字段名称').asstring<>'集装箱111'then begin if trim(t_excel_bill_bill.fieldbyname('字段名称').asstring)<>'固定值'then begin if trim(t_excel_bill_bill.fieldbyname('字段名称').asstring)='船名航次' then begin Memo1.Text:=frm_op_seae.t_op_seae2.DataSet.fieldbyname('船名').asstring+' '+frm_op_seae.t_op_seae2.DataSet.fieldbyname('航次').asstring; for i:=0 to Memo1.Lines.Count-1 do begin if i=0 then tempstr:=Memo1.Lines[i] else tempstr:=tempstr+#13#10+Memo1.Lines[i]; end; end else begin Memo1.Text:=frm_op_seae.t_op_seae2.DataSet.fieldbyname(t_excel_bill_bill.fieldbyname('字段名称').asstring).asstring; for i:=0 to Memo1.Lines.Count-1 do begin if i=0 then tempstr:=Memo1.Lines[i] else tempstr:=tempstr+#13#10+Memo1.Lines[i]; end; end; WriteWordBookMark(WD,t_excel_bill_bill.fieldbyname('标签名').asstring,tempstr); end else begin WriteWordBookMark(WD,t_excel_bill_bill.fieldbyname('标签名').asstring,t_excel_bill_bill.fieldbyname('固定值').asstring); end; end else begin t_op_ctn.close; t_op_ctn.Parameters[0].value:=frm_op_seae.t_op_seae2.DataSet.fieldbyname('编号').asstring; t_op_ctn.open; // Y:=t_excel_bill_bill.fieldbyname('坐标Y').asinteger; t_op_ctn.first; while not t_op_ctn.eof do begin wide_str:=t_op_ctn.fieldbyname('箱号').asstring +copy(' ',1,20-length(t_op_ctn.fieldbyname('箱号').asstring)) +t_op_ctn.fieldbyname('封号').asstring; tempstr:=wide_str; wide_str:=t_op_ctn.fieldbyname('数量').asstring+'X' +t_op_ctn.fieldbyname('表现形式').asstring+' ' +t_op_ctn.fieldbyname('件数').asstring +t_op_ctn.fieldbyname('包装').asstring; tempstr:=tempstr+#13#10+wide_str; wide_str:=t_op_ctn.fieldbyname('重量').asstring+'KGS'; tempstr:=tempstr+#13#10+wide_str; wide_str:=t_op_ctn.fieldbyname('尺码').asstring+'CBM'; tempstr:=tempstr+#13#10+wide_str; t_op_ctn.next; end; wide_str:=frm_op_seae.t_op_seae2.DataSet.fieldbyname('件数').asstring +frm_op_seae.t_op_seae2.DataSet.fieldbyname('包装').asstring; tempstr:=tempstr+#13#10+wide_str; wide_str:=frm_op_seae.t_op_seae2.DataSet.fieldbyname('重量').asstring+'KGS'; tempstr:=tempstr+#13#10+wide_str; wide_str:=frm_op_seae.t_op_seae2.DataSet.fieldbyname('尺码').asstring+'CBM'; tempstr:=tempstr+#13#10+wide_str; WriteWordBookMark(WD,t_excel_bill_bill.fieldbyname('标签名').asstring,tempstr); end; t_excel_bill_bill.next; end; wordApp.Visible := true; //先最小化 // wordApp.WindowState := 2; //再最大化 wordApp.WindowState := 1; wordApp.Disconnect(); end; procedure Tfrm_op_seae_word.bsSkinButton13Click(Sender: TObject); begin if t_excel_bill.IsEmpty then exit; if _employee<>'陈冠宇' then begin showmessage('请联系系统管理员'); Exit; end; end; end.