Delphi + Wordソリューションのリファレンス。これらはプロジェクト中に作成したいくつかの機能です。皆さんが Word について質問しているのを目にしました。さあ、取り出してみんなとシェアしましょう。 (友達がさらに新しい機能を追加したり、パッケージやライブラリなどにして、みんなが使いやすいようにしてくれることを願っています。私には時間がありません(笑)) 使用する前に、空の WORD ファイルを作成します必要に応じてテンプレートとして使用できます。 テンプレートでは、さまざまな形式とテキストがファイル内に設定されます。また、PRnWordTable のパラメータは Ehlib2.6 から取得した TDBGridEh 型のコントロールです。shFileCopy 関数 (ファイルのコピーに使用) と guiInfo 関数 (メッセージ ボックスの表示に使用) も私が作成したものです。コードも付属しています。サンプルコードは次のとおりです。コード補完の機能: 1. 印刷テンプレートの「#TITLE#」テキストを「デモ コード 1」に置き換えます。 2. DBGridEh1 コントロールによって現在表示されているコンテンツをドキュメントの最後に挿入します。 3. 空白行を挿入します。文書の末尾 4. 文書の末尾に新しいテキスト行を挿入します。 5. 文書内の空白行を削除します。 if PrnWordBegin('C:/Print template.DOC','C:/Target file 1.DOC) ') それから始めますPrnWordReplace('#TITLE#','デモ コード 1'); PrnWordTable(DBGridEh1); PrnWordInsert('これは新しいテキストです'); p ',true);ソースコードは次のとおりです。 //ワードの印刷(宣言部分) wDoc,wApp:Variant; 関数 PrnWordBegin(tempDoc,docName:String):boolean; 関数 PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean; 関数 PrnWordInsert(lineText:String;bNewLine:boolean=true):ブール値;オーバーロード関数 PrnWordInsert(var imgInsert:TImage;sBookMark:String=''):boolean;overload;関数 PrnWordInsert(var chartInsert:TChart;sBookMark:String=''):boolean;overload; function PrnWordTable(var dbG:TDBGridEh;sBookMark:String='' ):boolean; プロシージャ PrnWordSave; //Word の印刷 (実装部分) {関数:テンプレート ファイル tempDoc に基づいて新しいターゲット ファイル docName を作成し、ファイルを開きます} function PrnWordBegin(tempDoc,docName:String):boolean;begin result:=false; //テンプレートをコピー if tempDoc<>'' then if not shFileCopy(tempDoc, docName) then exit; //Word に接続 try wApp:=CreateOleObject('Word.application'); ただし、guiInfo('最初に Microsoft Word をインストールしてください。'); exit; end; try //Open if tempDoc='' then begin //新しいドキュメントを作成します wDoc:=wApp.Document.Add; wDoc.SaveAs(docName); //テンプレートを開きます。 Documents.Open(docName); end; guiInfo('テンプレートを開けませんでした。テンプレートが正しいかどうかを確認してください。 '); wApp.Quit; end; wApp.Visible:=true; result:=true;end; {関数: newText を使用してdocTextコンテンツを置換します。 false の場合、新しいテキストは折り返されています。 } function PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean;var i:Integer;begin if bSimpleReplace // 単純な処理を開始し、置換操作を直接実行します。 wApp.Selection.Find.Replacement.ClearFormatting; wApp.Selection.Find.Text := docText;テキスト :=newText; wApp.Selection.Find.Forward := True; wdFindContinue; wApp.Selection.Find.Format := False; wApp.Selection.Find.MatchWholeWord := True; Find.MatchWildcards := False; wApp.Selection.Find.MatchSoundsLike := False; wApp.Selection.Find.MatchAllWordForms := False; wApp.Selection.Find.Execute(Replace:=wdReplaceAll); // 自動的に行に分岐します。 Lines.Clear; reWord.Lines.Add(newText); // 置換される位置の後ろに配置します。 wApp.Selection.Find.Text := docText; wApp.Selection.Find.Forward := True; wApp.Selection.Find.Wrap := wApp.Selection .Find.Format := False; wApp.Selection.Find.MatchCase := False; wApp.Selection.Find.MatchWholeWord := False; wApp.Selection.Find.MatchWildcards := False; wApp.Selection.Find.MatchWildcards := False; MatchAllWordForms := False; wApp.Selection.MoveRight(wdCharacter,1); // i:=0 から reWord.Lines.Count-1 まで 1 行ずつ挿入を開始します // 現在の行を挿入します wApp.Selection.InsertAfter(reWord.Lines[i ]) ; //最後の行を除き、自動的に新しい行を追加します if i<reWord.Lines.Count-1 then wApp.Selection.InsertAfter(#13); // 置換マークを削除します。 wApp.Selection.Find.Replacement.ClearFormatting; wApp.Selection.Find.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); result:=false を除く{機能: TDBGridEhによって現在表示されているコンテンツを印刷します。TDBGridEh コントロールの形式とコンテンツに基づいて、ドキュメント内の sBookMark ブックマークにWordテーブルが自動的に生成されます。現在、セルの配置、複数行のタイトル (2 行) をサポートしています。 sBookMark : Wordテーブルに挿入されるブックマークの名前} function PrnWordTable (var dbG:TDBGridEh;sBookMark:String=''):boolean;var iCol,iLine,i,j,k:Integer; wTable,wRange:Variant; iGridLine,iTitleLine:Integer; getTextText:String;getTextDisplay:boolean; titleSplit,titleCol:Integer;整数;最後のタイトル:文字列;開始result:=false; try //テーブル内の列数を計算します(非表示の列を除く) iTitleLine:=1; //i:=0 から dbG.Columns.Count-1 まではデフォルトで 1 になります。 Do begin if dbG.Columns[i].Visible then begin iCol:=iCol+1 end; // テーブル内の行数を計算します (非表示の列を除く)。 dbG.DataSource.DataSet.Active then iLine:=dbG.DataSource.DataSet.RecordCount else iLine:=0; // 挿入ポイントの位置 if sBookMark='' then begin //ドキュメントの最後 iRangeEnd:=wDoc.Range.End-1 if iRangeEnd<0 then; iRangeEnd:=0; wRange:=wDoc.Range(iRangeEnd,iRangeEnd); end else begin // ブックマークで wRange:=wDoc.Range.Goto(wdGoToBookmark,,,sBookMark); Add(wRange,iGridLine,iCol); wTable.Columns.AutoFit; // タイトル行 k:=1; j:=1 to 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); // dbG.Columns[j-1].Title.Alignment=taCenter の場合はセルの配置を設定し、次に wTable。 Cell(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphCenter else if 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; k:=k+1; //iLine>0 の場合は、dbG.DataSource.dataset.DisableControls を開始します。 . DataSource.DataSet.First; for i:=1 to iLine Do begin k:=1 to dbG.Columns.Count Do begin if dbG.Columns[j-1].Visible then begin if dbG.Columns[j-1].FieldName<>'' then //空の列によるエラーを回避 begin //If 列独自の書式設定表示関数がある場合は、その表示関数を呼び出して表示文字列 getTextText:='' を取得します。 Assigned(dbG.DataSource.DataSet.FieldByName(dbG.Columns[j-1].FieldName).OnGetText) を開始します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 //データベースのコンテンツを使用して表示します。 wTable.Cell(i+iTitleLine,k).Range.InsertAfter(dbG.DataSource.DataSet.FieldByName) (dbG.Columns[j-1].FieldName).AsString);