Справочник по решению Delphi + Word Это несколько функций, которые я сделал во время проекта. Я видел, что все задают вопросы о Word. Теперь выньте его и поделитесь со всеми. (Я надеюсь, что некоторые друзья смогут добавить новые функции или объединить их в пакеты или библиотеки и т. д., чтобы сделать их более удобными для всех. У меня самого нет времени, ха-ха) Перед использованием создайте пустой файл WORD. в качестве шаблона по вашему желанию. В шаблоне в файле установлены различные форматы и текст. Кроме того, параметр PRnWordTable — это элемент управления типа TDBGridEh, который взят из Ehlib2.6. Функция shFileCopy (используется для копирования файлов) и функция guiInfo (используется для отображения окна сообщения) также написаны мной, а функция коды также прилагаются. Пример кода выглядит следующим образом: Функции завершения кода: 1. Замените текст «#TITLE#» в шаблоне печати на «Демо-код 1». 2. И вставьте содержимое, отображаемое в данный момент элементом управления DBGridEh1, в конец документа. 3. Вставьте пустую строку в конце документа. конец документа 4. Вставьте новую строку текста в конец документа 5. Удалите пустые строки в документе, если PrnWordBegin('C:/Print template.DOC','C:/Target file 1.DOC '), затем начните PrnWordReplace('#TITLE#','Демо-код 1'); PrnWordInsert(''); PrnWordInsert('Это новая строка текста'); p ',true); PrnWordSave; end; Исходный код выглядит следующим образом: // Печать слов (часть объявления) wDoc,wApp:Variant; функция PrnWordBegin(tempDoc,docName:String):boolean; функция PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean; функция PrnWordInsert(lineText:String;bNewLine:boolean=true): логическое значение; перегрузка; функция PrnWordInsert (вар imgInsert:TImage;sBookMark:String=''):boolean;overload; функция PrnWordInsert(varchartInsert:TChart;sBookMark:String=''):boolean;overload; function PrnWordTable(var dbG:TDBGridEh;sBookMark:String='' ):boolean; процедура PrnWordSave; процедура PrnWordEnd; // Печать слов (часть реализации) { Функция: создать новый целевой файл docName на основе файла шаблона tempDoc и открыть файл } function PrnWordBegin(tempDoc,docName:String):boolean;begin result:=false; //Копируем шаблон if tempDoc<>'' then if not shFileCopy(tempDoc, docName) then exit; //Подключитесь к Word, попробуйте wApp:=CreateOleObject('Word.application'); кроме guiInfo('Сначала установите Microsoft Word.'); exit; end; try //Открыть, если tempDoc='', затем начать //Создать новый документ wDoc:=wApp.Document.Add; wDoc.SaveAs(docName); end else Begin //Открыть шаблон wDoc:=wApp. Documents. Open(docName); end; кроме guiInfo('Не удалось открыть шаблон, проверьте правильность шаблона. '); wApp.Quit; end; wApp.Visible:=true; result:=true;end; { Функция: использовать newText для замены содержимого docText bSimpleReplace : если true, выполняется только простая замена, если false — новый. Обработка текста } function PrnWordReplace(docText,newText:String;bSimpleReplace:boolean=false):boolean;var i:Integer;begin if bSimpleReplace. затем начнем //Простую обработку, напрямую выполним операцию замены. wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Replacement.ClearFormatting; wApp.Selection.Find.Text := wApp.Selection.Find.Replacement. Текст :=newText; wApp.Selection.Find.Forward := True; wApp.Selection.Find.Wrap := wdFindContinue; wApp.Selection.Find.Format := False; wApp.Selection.Find.MatchCase := False; wApp.Selection.Find.MatchWholeWord := true; wApp.Selection.Find.MatchByte := True; Find.MatchWildcards := Ложь wApp.Selection.Find.MatchSoundsLike := Ложь; wApp.Selection.Find.MatchAllWordForms := False; wApp.Selection.Find.Execute(Replace:=wdReplaceAll); result:=true; кроме result:=false; end; //Автоматически переходить на строки reWord. Lines.Clear; reWord.Lines.Add(newText); //Находим позицию, которую нужно заменить wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Text := docText; wApp.Selection.Find.Replacement.Text := ''; wApp.Selection.Find.Forward := True; wApp.Selection.Find.Wrap := wdFindContinue; .Find.Format := Ложь; wApp.Selection.Find.MatchCase := Ложь; wApp.Selection.Find.MatchWholeWord := False; wApp.Selection.Find.MatchByte := True; wApp.Selection.Find.MatchWildcards := False; wApp.Selection.Find.MatchSoundsLike := False; MatchAllWordForms: = Ложь; wApp.Selection.Find.Execute; wApp.Selection.MoveRight(wdCharacter,1); //Начинаем вставку построчно для i:=0 в reWord.Lines.Count-1 Do Begin //Вставляем текущую строку wApp.Selection.InsertAfter(reWord.Lines[i) ]) ; //За исключением последней строки, автоматически добавляем новые строки, если i<reWord.Lines.Count-1 then wApp.Selection.InsertAfter(#13); //Удалить метку замены wApp.Selection.Find.ClearFormatting; wApp.Selection.Find.Replacement.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.MatchWholeWord := true; wApp.Selection.Find.MatchByte := True; MatchWildcards := Ложь; wApp.Selection.Find.MatchSoundsLike := Ложь; wApp.Selection.Find.MatchAllWordForms: = False; wApp.Selection.Find.Execute(Replace:=wdReplaceAll); результат:=true; кроме result:=false; end;end; { Функция: Распечатать содержимое, отображаемое в данный момент TDBGridEh. На основе формата и содержимого элемента управления TDBGridEh автоматически создается таблица Word для закладки sBookMark в документе. В настоящее время она может поддерживать выравнивание ячеек и многострочные заголовки (две). строк), нижние итоги и другие возможности. sBookMark : Word Имя закладки, которая будет вставлена в таблицу } function PrnWordTable(var dbG:TDBGridEh;sBookMark:String=''):boolean;var iCol,iLine,i,j,k:Integer; wTable,wRange:Variant; iRangeEnd:longint; iGridLine,iTitleLine:Integer; getTextText:String;getTextDisplay:boolean; titleList:TStringList;titleSplit,titleCol:Integer;lastTitleSplit,SubTitle: Целое число;lastTitle:String;begin result:=false; try //Вычисляем количество столбцов в таблице (исключая скрытые столбцы) iTitleLine:=1 //Всегда по умолчанию 1 iCol:=0; для i:=0 to dbG.Columns.Count-1; Do Begin if dbG.Columns[i].Visible then Begin iCol:=iCol+1 end; //Вычисляем количество строк в таблице (исключая скрытые столбцы) if; dbG.DataSource.DataSet.Active then iLine:=dbG.DataSource.DataSet.RecordCount else iLine:=0; iGridLine:=iLine+iTitleLine+dbG.FooterRowCount; //Позиционируем точку вставки, если sBookMark='' then start // В конце документа iRangeEnd:=wDoc.Range.End-1, если iRangeEnd<0, то; iRangeEnd:=0; wRange:=wDoc.Range(iRangeEnd,iRangeEnd); end else Begin //На закладке wRange:=wDoc.Range.Goto(wdGoToBookmark,,,sBookMark); end; wTable:=wDoc.Tables. Add(wRange,iGridLine,iCol); wTable.Columns.AutoFit; //строка заголовка k:=1; j:=1 до dbG.Columns.Count Начать, если dbG.Columns[j-1].Visible, затем начать, если dbG.UseMultiTitle, затем начать 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); //Устанавливаем выравнивание ячеек if dbG.Columns[j-1].Title.Alignment=taCenter then 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 иначе if dbG.Columns[j-1].Title.Alignment=taLeftJustify then wTable.Cell(1,k).Range.ParagraphFormat.Alignment:=wdAlignParagraphJustify; k:=k+1; end; //Заполняем каждую строку, если iLine>0, затем начинаем dbG.DataSource.dataset.DisableControls; . DataSource.DataSet.First; для i:=1 до iLine Начать k:=1 для j:=1; dbG.Columns.Count Начать if dbG.Columns[j-1].Visible then start if dbG.Columns[j-1].FieldName<>'' then //Избегать ошибок из-за пустых столбцов start //Если столбец Если у вас есть собственная функция отображения форматирования, вызовите ее, чтобы получить отображаемую строку getTextText:='' if; 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 end;