![]() |
|
#1
|
|||
|
|||
![]() Добрый день! Подскажите, пожалуйста, неумехе, я уже весь нет облазила, никак не могу найти ответ
Есть у меня текст в Ворде (калька), который я изменяю с помощью моей программки (ну там ФИО меняется, место проживания и т.п.). Так вот в определенном моменте мне нужно вставить вот такой текст: Расчетный износ (Иф) ТС по методике Андрианова определяется по формуле: Иф = 100 х (1 – е-Ω) где: Ω функция, зависящая от возраста и фактического пробега АМТС с начала эксплуатации. Вид функции Ω для &тс3 &произв производства определяется: ∆T х Тф. + ∆L х Lф; где Lф – пробег с начала эксплуатации, Тф – фактический возраст. Иф = 100(1-℮-Ω) = 64,32% где: ТФ– фактический возраст транспортного = 8,18 Lф – пробег, c начала эксплуатации (в тыс. Км.) = 130,880 Расчетный износ (Иф) транспортного средства – 64,32% Проблема вот в чем: 1) Как сделать так, чтобы первая строчка этого текста записывалась жирным шрифтом, остальные - обычным; 2) как записать, что "е" в степени? 3) как записать подстрочный текст? (Lф - здесь "ф" должна быть подстрочная) 4) у меня при компиляции unit Word_TLB возникает ошибка в procedure TWordDocument.InvokeEvent в 9: if Assigned(FOnXMLBeforeDelete) then FOnXMLBeforeDelete(Self, IUnknown(TVarData(Params[0]).VPointer) as Range {const Range}, IUnknown(TVarData(Params[1]).VPointer) as XMLNode {const XMLNode}, Params[2] {WordBool}); Ошибка: [Error] Word_TLB.pas(34708): Operator not applicable to this operand type |
#2
|
|||
|
|||
![]() я вот понять немогу никак
![]() |
#3
|
|||
|
|||
![]() ошибку не знаю, а те строчки должно быть можно добавить в ту кальку(.doc файл как я понял) в уже отформатированном виде, вроде Иф = 100 х (1 – е-%OMEGA%), а из дельфи заменить текст на нужный
(а если эта калька действительно генерируется другой программой, то значит я не так понял, и тоже понять не могу) >woweook< Последний раз редактировалось Pyro, 07.12.2012 в 12:36. |
#4
|
|||
|
|||
![]() Калька у меня уже есть) Калька - это текст в формате .doc, который нужно изменить с помощью программы, которую я пишу. Изменять нужно как простые вещи типа ФИО, так и в зависимости от всяких галочек на моей форме, целый кусок текста. Сразу в эту кальку вставить кусок текста, который я написала нельзя, так как в одном случае этот кусок должен появиться в тексте, в другом случае - не должен
|
#5
|
||||
|
||||
![]() Цитата:
Например: Код:
with WordApplication1.Selection do begin Font.Bold:=1; TypeText('Жирный текст'); Font.Bold:=0; TypeText('Обычный текст'); Font.Superscript:=1; TypeText('Верхний индекс'); Font.Superscript:=0; TypeText('Обычный текст'); Font.Subscript:=1; TypeText('Нижний индекс'); Font.Subscript:=0; TypeText('Обычный текст'); end; Ещё есть неплохой вариант - сохранить шаблон документа в формате rtf и работать с ним как с текстом. Цитата:
В Delphi на вкладке Servers палитры компонентов просто брось на форму компоненты TWordApplication и TWordDocument. |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Syslenish (07.12.2012)
|
#6
|
|||
|
|||
![]() poli-smen, спасибо огромное! Сейчас начну ковыряться с макросами
![]() "Далее для работы с Word-ом нам потребуется библиотека типов Word-а, это делается так: Project, Import Type Library, Add, далее переходим в папку, где стоит Word ( у меня это - "c:\program files\microsoft office) , заходим в папку Office и выбираем файл - msword8.olb (цифра -? версии Word-а - у Вас может отличаться ) или excel8.olb (для Excel).Нажимаем Оk. Delphi создаст 2 файла - Word_tlb.pas и Office_tlb.pas, их надо включить в раздел uses модуля Main нашего проекта" ну и решила, что этот модуль будет крайне необходим для моей проги) Но видимо не нужно)) Еще раз огромное спасибо! |
#7
|
|||
|
|||
![]() Так, у меня едет крыша)) Я разобралась с макросами, но теперь не знаю, как мне мой этот замечательный текст впихнуть именно в нужное мне место! Получается, он сразу этот мой жирный текст записывает ) Прям с самого начала документа! А как же его запихать в конкретное место? Этот кусок текста мне нужно вставить вместо метки "&износ" в файл типа .doc (в мою кальку) а он у меня вставляется в начало документа))
Ищу и заменяю текст я таким образом: Код:
function TForm1.WordFindAndInsert(FindText, ReplacementText: String): boolean; const wdReplaceAll=2; //указываю, что это шаблон Word (файл с расширением DOС) begin W.Selection.Find.Text:=FindText; // поиск текста W.Selection.Find.Replacement.Text:=ReplacementText;//текст для вставки WordFindAndInsert:=W.Selection.Find.Execute(Replace:=wdReplaceAll); //замена текста end; а вот кусок в тексте, где я хочу конкретную фразу вставить в конкретное место, но он мне в определенное место вставляет без всяких выделений, а в начале документа тот текст, который нужно)) Код:
text1:='Расчетный износ (Иф) ТС по методике Андрианова определяется по формуле:'; Wordinsert(text1,true,false,false,false,10,false); iznos:= iznos+text1+#13; WordFindAndInsert('&износ', iznos); W.Selection.Font.Bold:= false; где Код:
procedure Wordinsert(info: string; _bold, _italic, _StrikeThrough, _Underline: boolean; _Size: integer; _center: boolean); begin W.Selection.Font.Bold := _bold; W.Selection.Font.italic := _italic; W.Selection.Font.StrikeThrough := _StrikeThrough; W.Selection.Font.Underline := _Underline; W.Selection.Font.Size := _Size; if _center = true then W.Selection.ParagraphFormat.Alignment := 1; W.selection.TypeText(info); end; |
#8
|
||||
|
||||
![]() Цитата:
Создаёшь новый шаблон документа MSWord. В нужных местах вставляешь закладки: "Вставка" -> "Закладка...", даёшь закладке имя, допустим "Закладка1". Сохраняешь шаблон (допустим в папку с новым проектом) но не как документ, а как шаблон (т.е. файл с расширением .dot, а не .doc). Далее создаёшь новый проект Delphi. На форму бросаешь компоненты TWordApplication и TWordDocument. У них есть свойство "ConnectKind", которое по-умолчанию имеет значение "ckRunningOrNew", сразу же меняешь это значение на "ckNewInstance". Почему? Потому что меня раздражает, когда я работаю в каком нибудь документе Word/Excel и тут к моему Word/Excel подключается какой-то скрипт, открывает в нём какие-то документы и всячески мешает работать, а ещё после всего этого (особая наглость) пытается закрыть приложение Word/Excel со всеми моими открытыми документами. А с параметром "ckNewInstance", скрипт тихонько себе запустит новое приложение (т.е. новый exe-шник winword.exe) и в нём так же тихонько будет что-то там делать. Теперь бросай на форму кнопку TButton и цепляй такой обработчик OnClick к кнопке: Код:
procedure TForm1.Button1Click(Sender: TObject); var doc: _Document; o1, o2: OleVariant; begin WordApplication1.ConnectKind := ckNewInstance; // На всякий случай :) WordApplication1.Connect; try o1 := ExtractFilePath(Application.ExeName) + 'Шаблон.dot'; doc := WordApplication1.Documents.Add(o1, EmptyParam, EmptyParam, EmptyParam); WordDocument1.ConnectTo(doc); try o1 := wdGoToBookmark; o2 := 'Закладка1'; WordDocument1.GoTo_(o1, EmptyParam, EmptyParam, o2).Select; with WordApplication1.Selection do begin TypeText('Обычный текст '); Font.Bold := 1; TypeText('Жирный текст '); Font.Bold := 0; Font.Italic := 1; TypeText('Курсивный текст '); Font.Italic := 0; Font.Superscript := 1; TypeText('Верхний индекс '); Font.Superscript := 0; Font.Subscript := 1; TypeText('Нижний индекс '); Font.Subscript := 0; TypeText('Греческая буква омега: '); o1 := True; InsertSymbol(937, EmptyParam, o1, EmptyParam); TypeParagraph; TypeText('Следующий абзац '); end; finally WordDocument1.Disconnect; end; finally WordApplication1.Visible := True; WordApplication1.Disconnect; end; end; ![]() |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Syslenish (10.12.2012)
|
#9
|
|||
|
|||
![]() poli-smen, мой мозг спасен
![]() |