![]()  | 
	
 
  | 
| 
		 
			 
			#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, мой мозг спасен  
		
	
		
		
		
		
		
	
		
		
	
	
	  Спасибо, Вы настоящий эксперт! |