Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2012, 11:41   #1
alexan0308
Пользователь
 
Регистрация: 22.08.2009
Сообщений: 46
По умолчанию Добавить оглавление для Word внутри OleContainer

Загрузил в олеконтейнер ворд
Код:
procedure TForm1.Button11Click(Sender: TObject);
var
  ev : OleVariant;
   i : Integer;
begin
  OleContainer2.CreateObject('Word.Application',False);
  OleContainer2.CreateObjectFromFile(
  ExtractFilePath(Application.ExeName)+'Помощь.doc',false);
  OleContainer2.DoVerb(ovOpen);
  ev := 2;  OleContainer2.OleObject.Protect(ev);
end;
Все нормально, документ загрузился и редактируется. Хочу повесить на другую кнопку добавления оглавления (содержания) в текущем месте курсора

Код:
procedure TForm1.Button18Click(Sender: TObject);
var Selection, W :variant;
FBoolFalse,
FBoolTrue,
FEmptyString,
FEncoding: OleVariant;
 UpperHeadingLevel, LowerHeadingLevel,
 numRange: OleVariant;	aRange: Variant;
begin
     W:=  OleContainer2.OleObject.Application;
     Selection:=OleContainer2.OleObject.Application.Selection;
 aRange:= Selection.Range;
 UpperHeadingLevel:= 1;
 LowerHeadingLevel:= 3;  
 W.TablesOfContents.Add(aRange{Range}, FBoolTrue{UseHeadingStyles},
 UpperHeadingLevel{UpperHeadingLevel}, LowerHeadingLevel{LowerHeadingLevel},
 FBoolTrue{UseFields}, FEmptyString{TableID},
 FBoolTrue{RightAlignPageNumbers}, FBoolTrue{IncludePageNumbers},
 FEmptyString{AddedStyles}, FBoolTrue{UseHyperlinks},
 FBoolTrue{HidePageNumbersInWeb}, FBoolTrue{UseOutlineLevels});
end;
Ошибка... Method TableOfContents not supported by automation object
Как правильно обратиться к ворду внутри контейнера?
alexan0308 вне форума Ответить с цитированием
Старый 29.11.2012, 14:19   #2
alexan0308
Пользователь
 
Регистрация: 22.08.2009
Сообщений: 46
По умолчанию

Так то получилось... Теперь не получается оформить стиль каждого оглавления...
Код:
var Selection, W :variant;
...

procedure AddContents;
var Range, Font, ParagraphFormat : Variant;
begin

Font:= W.ActiveDocument.Styles('Оглавление 1').Font; //Тут ошибка
        Font.Name:= 'Times New Roman';
        Font.Size:= 14;

W.ActiveDocument.TablesOfContents.Add(Range:=Selection.Range, RightAlignPageNumbers:= True,
UseHeadingStyles:=True, UpperHeadingLevel:=1, LowerHeadingLevel:=3, IncludePageNumbers:=True,
AddedStyles:='',  UseHyperlinks:=False, HidePageNumbersInWeb:=True, UseOutlineLevels:= True);

end;
Кнопка добавления оглавления:
Код:
procedure TForm1.Button18Click(Sender: TObject);
begin
     W:=  OleContainer2.OleObject.Application;
     Selection:=OleContainer2.OleObject.Application.Selection;
     AddContents;
end;

Последний раз редактировалось alexan0308; 29.11.2012 в 14:21.
alexan0308 вне форума Ответить с цитированием
Старый 29.11.2012, 14:22   #3
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

alexan0308, а почему ты пытаешься вызвать TablesOfContents для OleContainer2.OleObject.Application, когда этот метод присутствует в Document-е? Попробуй вызвать
Код:
W.ActiveDocument.TablesOfContents.Add(...)
P.S. DOC-файл, хотя бы небольшой, тестовый, присоединил бы для экспериментов...

Последний раз редактировалось volvo877; 29.11.2012 в 14:24.
volvo877 вне форума Ответить с цитированием
Старый 29.11.2012, 14:24   #4
alexan0308
Пользователь
 
Регистрация: 22.08.2009
Сообщений: 46
По умолчанию

Спасибо, эту ошибку я уже понял... стиль не могу теперь поменять каждого оглавления...
alexan0308 вне форума Ответить с цитированием
Старый 29.11.2012, 14:51   #5
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Код:
Font:= W.ActiveDocument.Styles.Item('Heading 1').Font; // На англоязычном Office работает
volvo877 вне форума Ответить с цитированием
Старый 29.11.2012, 15:08   #6
alexan0308
Пользователь
 
Регистрация: 22.08.2009
Сообщений: 46
По умолчанию

Точно, если напрямую без контейнера делать,
Код:
Font:= W.ActiveDocument.Styles.Item('Оглавление 1').Font;
работает...
А если обращаться в контейнере, то пишет нет такого метода Styles...
alexan0308 вне форума Ответить с цитированием
Старый 29.11.2012, 15:26   #7
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Так я в контейнере и обращаюсь:
Изображения
Тип файла: jpg olecnt.jpg (42.3 Кб, 142 просмотров)
volvo877 вне форума Ответить с цитированием
Старый 29.11.2012, 15:33   #8
alexan0308
Пользователь
 
Регистрация: 22.08.2009
Сообщений: 46
По умолчанию

Все работает, огромное спасибо! Это у меня ошибка уже на другое место показывала...

Последний раз редактировалось alexan0308; 29.11.2012 в 15:38.
alexan0308 вне форума Ответить с цитированием
Старый 29.11.2012, 15:40   #9
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Да взял твой код, и скопировал, только имя файла поменял:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
  ev : OleVariant;
   i : Integer;
begin
  OleContainer2.CreateObject('Word.Application',False);
  OleContainer2.CreateObjectFromFile(
  ExtractFilePath(Application.ExeName)+'test.doc',false);
  OleContainer2.DoVerb(ovOpen);
  // ev := 2;  OleContainer2.OleObject.Protect(ev);
end;
А, да... Уровень защиты отключил, потому что со включенной выпадет ошибка: "This method or property if not available because the object refers to a protected area of the document"
volvo877 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оглавление на Word 2007 Golovastik Microsoft Office Word 4 15.01.2012 14:27
Добавить рисунок в закладку Word a_n_n_a Общие вопросы Delphi 1 08.07.2011 14:27
Добавить текст из Excel в Word Apostolx Microsoft Office Excel 9 27.12.2010 14:06
Оглавление для книги на форме. agregator Microsoft Office Excel 2 08.12.2009 12:55
В OleContainer документ Word, как в нем контролировать нажатие клавиши? Djonik Общие вопросы Delphi 0 16.03.2009 18:38