![]() |
|
|
#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%), а из дельфи заменить текст на нужный
(а если эта калька действительно генерируется другой программой, то значит я не так понял, и тоже понять не могу) Последний раз редактировалось 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_TLB, нашла вот такую фразу:"Далее для работы с 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, мой мозг спасен
Спасибо, Вы настоящий эксперт! |