Delphi + Word- Lösungsreferenz. Dies sind mehrere Funktionen, die ich während des Projekts erstellt habe. Ich habe gesehen, dass jeder Fragen zu Word stellt. Nehmen Sie es jetzt heraus und teilen Sie es mit allen. (Ich hoffe, einige Freunde können weitere neue Funktionen hinzufügen oder sie in Pakete oder Bibliotheken usw. umwandeln, um die Verwendung für alle bequemer zu machen. Ich selbst habe keine Zeit, haha.) Erstellen Sie vor der Verwendung eine leere WORD-Datei als Vorlage nach Ihren Bedürfnissen. In der Vorlage sind verschiedene Formate und Texte in der Datei eingestellt. Darüber hinaus ist der Parameter von PRnWordTable ein Steuerelement vom Typ TDBGridEh, das aus Ehlib2.6 stammt. Die Funktion shFileCopy (zum Kopieren von Dateien) und die Funktion guiInfo (zum Anzeigen eines Meldungsfelds) wurden ebenfalls von mir geschrieben Codes sind ebenfalls beigefügt. Der Beispielcode lautet wie folgt: Funktionen der Code-Vervollständigung: 1. Ersetzen Sie den Text „#TITLE#“ in der Druckvorlage durch „Demo Code 1“. 2. Und fügen Sie den aktuell vom DBGridEh1-Steuerelement angezeigten Inhalt am Ende des Dokuments ein. 3. Fügen Sie eine Leerzeile bei ein am Ende des Dokuments 4. Fügen Sie am Ende des Dokuments eine neue Textzeile ein. 5. Entfernen Sie die Leerzeilen im Dokument, wenn PrnWordBegin('C:/Druckvorlage.DOC','C:/Zieldatei 1.DOC ') dann beginnen PrnWordReplace('#TITLE#','Demo code 1'); PrnWordInsert(''); PrnWordInsert('^p^p','^ p ',true); PrnWordSave; Der Quellcode lautet wie folgt: //Wortdruck (Deklarationsteil) wDoc,wApp:Variant; function PrnWordBegin(tempDoc,docName:String):boolean; function PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean; function PrnWordInsert(lineText:String;bNewLine:boolean=true): boolean;overload; function PrnWordInsert(var imgInsert:TImage;sBookMark:String=''):boolean;overload; function PrnWordInsert(var chartInsert:TChart;sBookMark:String=''):boolean;overload; function PrnWordTable(var dbG:TDBGridEh;sBookMark:String='' ):boolean; procedure PrnWordSave; //Word -Druck (Implementierungsteil) { Funktion: Erstellen Sie eine neue Zieldatei docName basierend auf der Vorlagendatei tempDoc und öffnen Sie die Datei } function PrnWordBegin(tempDoc,docName:String):boolean;begin result:=false; //Vorlage kopieren if tempDoc<>'' then if not shFileCopy(tempDoc, docName) then exit; //Mit Word verbinden try wApp:=CreateOleObject('Word.application'); außer guiInfo('Bitte installieren Sie zuerst Microsoft Word.'); exit; end; try //Open if tempDoc='' then begin //Erstelle ein neues Dokument wDoc:=wApp.Document.Add; wDoc.SaveAs(docName); Dokumente. Open(docName); end; außer guiInfo('Fehler beim Öffnen der Vorlage, bitte überprüfen Sie, ob die Vorlage korrekt ist. '); wApp.Quit; end; wApp.Visible:=true;end; { Funktion : Verwenden Sie newText, um den Inhalt von docText zu ersetzen Text wird umbrochen. } function PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean;var i:Integer;begin if bSimpleReplace dann beginne //Einfache Verarbeitung, führe den Ersetzungsvorgang direkt aus try wApp.Selection.Find.Replacement.ClearFormatting; wApp.Selection.Find.Text := docText; Text :=newText; wApp.Selection.Find.Forward := True; wApp.Selection.Find.Wrap := wdFindContinue; wApp.Selection.Find.Format := False; wApp.Selection.Find.MatchCase := True; wApp.Selection.Find.MatchCase := True; Find.MatchWildcards := False; wApp.Selection.Find.MatchSoundsLike := False; wApp.Selection.Find.MatchForms := False; wApp.Selection.Find.Execute(Replace:=wdReplaceAll);exclusive result:=false; //Automatisch in Zeilen verzweigen; Lines. Clear; reWord.Lines.Add(newText); try //Lokalisieren Sie hinter der zu ersetzenden Position wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Text := docText; wApp.Selection.Find.Forward := True; wApp.Selection.Find.Wrap := wdFindContinue; .Find.Format := False; wApp.Selection.Find.MatchCase := False; wApp.Selection.Find.MatchWholeWord := False; wApp.Selection.Find.MatchWildcards := False; wApp.Selection.Find.Find. MatchAllWordForms := False; wApp.Selection.Find.Execute; wApp.Selection.MoveRight(wdCharacter,1); //Beginnen Sie mit dem zeilenweisen Einfügen von i:=0 bis reWord.Lines.Count-1 Do begin //Fügen Sie die aktuelle Zeile ein wApp.Selection.InsertAfter(reWord.Lines[i ]) ; //Mit Ausnahme der letzten Zeile werden automatisch neue Zeilen hinzugefügt, wenn i<reWord.Lines.Count-1 then wApp.Selection.InsertAfter(#13); //Löschen Sie die Ersetzungsmarkierung wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Text := docText; wApp.Selection.Find.Replacement.Text := ''; .Selection.Find.Forward := True; wApp.Selection.Find.Wrap := wdFindContinue; wApp.Selection.Find.Format := False; wApp.Selection.Find.MatchCase := False; wApp.Selection.Find.MatchByte := True; MatchWildcards := False; wApp.Selection.Find.MatchSoundsLike := False; wApp.Selection.Find.MatchAllWordForms := False; wApp.Selection.Find.Execute(Replace:=wdReplaceAll); außer result:=false; { Funktion: Drucken Sie den aktuell von TDBGridEh angezeigten Inhalt . Basierend auf dem Format und Inhalt des TDBGridEh- Steuerelements wird automatisch eine Word- Tabelle am sBookMark-Lesezeichen im Dokument generiert. Derzeit können mehrzeilige Titel (zwei) unterstützt werden Zeilen), Endsummen und andere Funktionen. sBookMark : Word Der Name des Lesezeichens, das in die Tabelle eingefügt werden soll } function PrnWordTable(var dbG:TDBGridEh;sBookMark:String=''):boolean;var iCol,iLine,i,j,k:Integer; wTable,wRange:Variant; iGridLine,iTitleLine:Integer; getText:String;getTextDisplay:boolean;titleSplit,titleCol:Integer;lastTitleSplit: Ganzzahl;lastTitle:String;begin result:=false; try //Anzahl der Spalten in der Tabelle berechnen (ohne ausgeblendete Spalten) iTitleLine:=1; //Immer standardmäßig 1 i:=0 bis dbG.Columns.Count-1 Do begin if dbG.Columns[i].Visible then begin iCol:=iCol+1; //Berechnen Sie die Anzahl der Zeilen in der Tabelle (ohne ausgeblendete Spalten). dbG.DataSource.DataSet.Active then iLine:=dbG.DataSource.DataSet.RecordCount else iLine:=0; iGridLine:=iLine+iTitleLine+dbG.FooterRowCount; //Positionieren Sie den Einfügepunkt, wenn sBookMark='' dann beginnen // In Am Ende des Dokuments iRangeEnd:=wDoc.Range.End-1; if iRangeEnd<0 then iRangeEnd:=0; wRange:=wDoc.Range(iRangeEnd,iRangeEnd); Add(wRange,iGridLine,iCol); wTable.Columns.AutoFit; //Titelzeile k:=1; j:=1 bis dbG.Columns.Count Do begin if dbG.Columns[j-1].Visible then begin if dbG.UseMultiTitle then begin 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); //Zellausrichtung festlegen, wenn dbG.Columns[j-1].Title.Alignment=taCenter, dann wTable. Cell(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphCenter sonst wenn dbG.Columns[j-1].Title.Alignment=taRightJustify then wTable.Cell(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphRight else if dbG.Columns[j-1].Title.Alignment=taLeftJustify then wTable.Cell(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphJustify; end; //Füllen Sie jede Zeile aus, wenn iLine>0, dann beginnen Sie dbG.Dataset.DisableControls; . DataSource.DataSet.First; for i:=1 to iLine Do begin k:=1 for j:=1 to dbG.Columns.Count Do begin if dbG.Columns[j-1].Visible then begin if dbG.Columns[j-1].FieldName<>'' then //Fehler aufgrund leerer Spalten vermeiden begin //Wenn die Spalte Wenn Sie über eine eigene Formatierungsanzeigefunktion verfügen, rufen Sie die Anzeigefunktion auf, um die Anzeigezeichenfolge getTextText:='' zu erhalten Assigned(dbG.DataSource.DataSet.FieldByName(dbG.Columns[j-1].FieldName).OnGetText) dann beginnen 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); end else begin //Datenbankinhalt zur Anzeige verwenden wTable.Cell(i+iTitleLine,k).Range.InsertAfter(dbG.DataSource.DataSet.FieldByName ( dbG.Columns[j-1].FieldName).AsString end;