Referensi solusi Delphi + Word . Ini adalah beberapa fungsi yang saya buat selama proyek ini. Sekarang keluarkan dan bagikan dengan semua orang. (Saya harap beberapa teman dapat menambahkan lebih lanjut fungsi-fungsi baru, atau membuatnya menjadi paket atau lib, dll., agar lebih nyaman digunakan semua orang. Saya sendiri tidak punya waktu, haha) Sebelum digunakan, buat file WORD kosong sebagai template sesuai kebutuhan Anda. Di dalam template Berbagai format dan teks diatur dalam file. Selain itu, parameter PRnWordTable adalah kontrol tipe TDBGridEh, yang diambil dari Ehlib2.6. Fungsi shFileCopy (digunakan untuk menyalin file) dan fungsi guiInfo (digunakan untuk menampilkan kotak pesan) juga ditulis sendiri, dan kode juga terlampir. Contoh kodenya adalah sebagai berikut: Fungsi penyelesaian kode: 1. Ganti teks "#TITLE#" pada template pencetakan dengan "Kode Demo 1" 2. Dan masukkan konten yang sedang ditampilkan oleh kontrol DBGridEh1 ke akhir dokumen 3. Sisipkan baris kosong di akhir dokumen 4. Sisipkan baris teks baru di akhir dokumen 5. Hilangkan baris kosong pada dokumen if PrnWordBegin('C:/Print template.DOC','C:/Target file 1.DOC ') lalu mulai PrnWordReplace('#TITLE#','Kode demo 1'); PrnWordTable(DBGridEh1); PrnWordInsert(''); PrnWordInsert('Ini adalah baris teks baru'); p',true); PrnWordSave; akhir; Kode sumbernya adalah sebagai berikut: //Pencetakan kata (bagian deklarasi) wDoc,wApp:Varian; fungsi PrnWordBegin(tempDoc,docName:String):boolean; fungsi PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean; fungsi PrnWordInsert(lineText:String;bNewLine:boolean=true): boolean;kelebihan; fungsi PrnWordInsert(var imgInsert:TImage;sBookMark:String=''):boolean;kelebihan beban; fungsi PrnWordInsert(var chartInsert:TCart;sBookMark:String=''):boolean;kelebihan beban; ):boolean; prosedur PrnWordSave; prosedur PrnWordEnd; // Pencetakan kata (bagian implementasi) { Fungsi: Buat file target baru docName berdasarkan file template tempDoc dan buka file } function PrnWordBegin(tempDoc,docName:String):boolean;begin result:=false; //Salin template if tempDoc<>'' lalu if bukan shFileCopy(tempDoc, docName) lalu keluar; //Hubungkan ke Word coba wApp:=CreateOleObject('Word.application'); kecuali guiInfo('Silakan instal Microsoft Word terlebih dahulu.'); exit; end; coba //Buka if tempDoc='' lalu mulai //Buat dokumen baru wDoc:=wApp.Document.Add; Documents.Open(docName); end; kecuali guiInfo('Gagal membuka template, harap periksa apakah template sudah benar. '); wApp.Quit; exit; wApp.Visible:=true; result:=true;end; { Fungsi: Gunakan newText untuk mengganti konten docText bSimpleReplace : Jika benar, hanya penggantian sederhana yang dilakukan, jika salah, yang baru teks dibungkus. Pemrosesan } function PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean;var i:Integer;mulai jika bSimpleReplace lalu mulai //Pemrosesan sederhana, langsung lakukan operasi penggantian, coba wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Replacement.ClearFormatting; Teks :=Teks baru; wApp.Selection.Find.Forward := Benar; wApp.Selection.Find.Wrap := wdFindContinue; wApp.Selection.Find.Format := Salah; wApp.Selection.Find.MatchCase := Salah; wApp.Selection.Find.MatchWholeWord := benar; Temukan.MatchWildcards := Salah; wApp.Selection.Find.MatchSoundsLike := Salah; wApp.Selection.Find.MatchAllWordForms := False; wApp.Selection.Find.Execute(Replace:=wdReplaceAll); result:=true; kecuali result:=false end; Lines.Clear; reWord.Lines.Add(newText); coba //Cari di belakang posisi yang akan diganti wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Text := docText; wApp.Selection.Find.Replacement.Text := ''; wApp.Selection.Find.Forward := wApp.Selection.Find.Wrap := wdFindContinue; .Find.Format := Salah; wApp.Selection.Find.MatchCase := Salah; wApp.Selection.Find.MatchWholeWord := Salah; wApp.Selection.Find.MatchByte := Benar; wApp.Selection.Find.MatchWildcards := Salah; MatchAllWordForms := Salah; wApp.Selection.Find.Execute; wApp.Selection.MoveRight(wdCharacter,1); //Mulai memasukkan baris demi baris untuk i:=0 ke reWord.Lines.Count-1 Mulai //Masukkan baris saat ini wApp.Selection.InsertAfter(reWord.Lines[i ]) ; //Kecuali baris terakhir, secara otomatis menambahkan baris baru jika i<reWord.Lines.Count-1 lalu wApp.Selection.InsertAfter(#13); //Hapus tanda pengganti wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Replacement.ClearFormatting; wApp.Selection.Find.Text := docText; .Selection.Find.Forward := Benar; wApp.Selection.Find.Wrap := wdFindContinue; wApp.Selection.Find.Format := Salah; wApp.Selection.Find.MatchCase := Salah; wApp.Selection.Find.MatchWholeWord := benar; MatchWildcards := Salah; wApp.Selection.Find.MatchSoundsLike := Salah; wApp.Selection.Find.MatchAllWordForms := Salah; wApp.Selection.Find.Execute(Ganti:=wdReplaceAll hasil:=true; { Fungsi: Mencetak konten yang saat ini ditampilkan oleh TDBGridEh. Berdasarkan format dan konten kontrol TDBGridEh , tabel Word secara otomatis dibuat di bookmark sBookMark di dokumen. Saat ini, tabel tersebut dapat mendukung penyelarasan sel, judul multi-baris (dua baris), total terbawah dan fitur lainnya. sBookMark : Word Nama bookmark yang akan dimasukkan ke dalam tabel } function PrnWordTable(var dbG:TDBGridEh;sBookMark:String=''):boolean;var iCol,iLine,i,j,k:Integer; wTable,wRange:Varian; iRangeEnd:longint; iGridLine,iTitleLine:Integer; getTextText:String;getTextDisplay:boolean; Integer;lastJudul:String;mulai hasil:=false; coba //Hitung jumlah kolom dalam tabel (tidak termasuk kolom tersembunyi) iTitleLine:=1; //Selalu default ke 1 iCol:=0 untuk i:=0 hingga dbG.Columns.Count-1; Mulai jika dbG.Columns[i].Terlihat lalu mulai iCol:=iCol+1 end; //Hitung jumlah baris dalam tabel (tidak termasuk kolom tersembunyi) if dbG.DataSource.DataSet.Active lalu iLine:=dbG.DataSource.DataSet.RecordCount else iLine:=0; iGridLine:=iLine+iTitleLine+dbG.FooterRowCount //Posisikan titik penyisipan jika sBookMark='' lalu mulai // Di akhir dokumen iRangeEnd:=wDoc.Range.End-1; jika iRangeEnd<0 lalu iRangeEnd:=0; wRange:=wDoc.Range(iRangeEnd,iRangeEnd); akhir lain mulai //Di penanda wRange:=wDoc.Range.Goto(wdGoToBookmark,,,sBookMark end; Tambahkan(wRange,iGridLine,iCol); wTable.Columns.AutoFit; //Judul baris k:=1; j:=1 hingga dbG.Columns.Count Mulai jika dbG.Columns[j-1].Terlihat lalu mulai jika dbG.UseMultiTitle lalu mulai titleList:=strSplit(dbG.Columns[j-1].Title.Caption,' |'); wTable.Cell(1,k).Range.InsertAfter(titleList.Strings[0]); wTable.Cell(1,k).Range.InsertAfter(dbG.Columns[j-1].Title.Caption); //Atur perataan sel jika dbG.Columns[j-1].Title.Alignment=taCenter lalu wTable. Sel(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphCenter lain jika dbG.Columns[j-1].Title.Alignment=taRightJustify lalu wTable.Cell(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphRight lagi jika dbG.Columns[j-1].Title.Alignment=taLeftJustify lalu wTable.Cell(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphJustify; k:=k+1; end; //Isi setiap baris jika iLine>0 lalu mulai dbG.DataSource.dataset.DisableControls; .DataSource.DataSet.First; untuk i:=1 hingga iLine Mulai k:=1 untuk j:=1 hingga dbG.Columns.Count Mulai jika dbG.Columns[j-1].Terlihat lalu mulai jika dbG.Columns[j-1].FieldName<>'' lalu //Hindari kesalahan karena kolom kosong dimulai //Jika kolom Jika Anda memiliki fungsi tampilan pemformatan sendiri, panggil fungsi tampilan untuk mendapatkan string tampilan getTextText:=''; Ditugaskan(dbG.DataSource.DataSet.FieldByName(dbG.Columns[j-1].FieldName).OnGetText) lalu mulai dbG.DataSource.DataSet.FieldByName(dbG.Columns[j-1].FieldName).OnGetText(dbG.DataSource.DataSet.FieldByName(dbG.Columns[j-1].FieldName),getTextText,getTextDisplay); wTable.Cell(i+iTitleLine,k).Range.InsertAfter(getTextText); ( dbG.Columns[j-1].FieldName).AsString akhir;