Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 133
1

Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word

12.03.2020, 20:05. Просмотров 842. Ответов 10
Метки нет (Все метки)


Добрый день! Подскажите, пожалуйста, возможно ли средствами делфи активировать кнопку "Добавить" (ниже поясняющие скрины) и завести общие шаблоны в word для всех документов?
Чтобы пояснить покажу на рисунках что именно необходимо.
На примере одного шаблона не получилось реализовать то, что нужно.

В коде пытался хотя бы добавить шаблон dot в word файл, но для общих шаблонов сделать не удалось.

Что нужно подкорректировать в коде, какие сайты почитать? И вообще есть ли такая возможность? Версия word не важна, у меня 2007 стоит, но не суть.


Delphi
1
2
3
4
5
6
7
8
var wrd: Variant;
begin
  Wrd := CreateoleObject('Word.Application');
  Wrd.Application.visible := false;
  khodas := ExtractFilePath(Application.ExeName) + '\doc1.dot';
  Wrd.Documents.Add(khodas, false);
  Wrd.Application.visible := true;
end;
Помогите, пожалуйста)
0
Миниатюры
Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word   Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word   Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word  

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2020, 20:05
Ответы с готовыми решениями:

visio & word, ошибка: word is waiting for another application to complete and ole action'
Когда я пытаюсь вставить диаграмму Visio в документ Word получаю следующую ошибку: 'word is waiting...

Проблема с $word=new COM("word.application") or die("Couldn ''t start Word!");
Наблюдаю такую штуку - создаю объект Word $word=new COM("word.application") or die("Couldn ''t...

Из Excel в Word, как добавить или сохранить закладку в Word
Добрый день, уважаемые форумчане, надеюсь на вашу помощь. Переношу данные из Excel в шаблон...

Из Excel в Word, как добавить/сохранить закладку в Word
Добрый день, уважаемые форумчане. Работаю над файлом по переносу данных из Excel в Word и по пути...

10
Житель Земли
2818 / 2665 / 372
Регистрация: 26.07.2011
Сообщений: 10,696
Записей в блоге: 1
13.03.2020, 14:16 2
Макрос. Включаешь в ворде запись макроса, делаешь то, что нужно, выключаешь запись. Если в коде макроса что-то есть, значит, это можно сделать сторонним приложением при помощи объектной модели COM. если нет, то увы
1
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 133
13.03.2020, 16:36  [ТС] 3
Отлично! Спасибо! Записал несколько макросов, вопрос как это может выглядить на delphi?
Добавление шаблонов
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Макрос1()
 
    AddIns.Add FileName:= _
        "C:\Users\*****\AppData\Roaming\Microsoft\Шаблоны\Decisionmod.dot" _
        , Install:=True
    AddIns.Add FileName:= _
        "C:\Users\****\AppData\Roaming\Microsoft\Шаблоны\Decision.dot", _
        Install:=True
    With ActiveDocument
        .UpdateStylesOnOpen = False
        .AttachedTemplate = "Normal"
    End With
End Sub
Удаление шаблонов

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Макрос1()
 
    AddIns( _
        "C:\Users\****\AppData\Roaming\Microsoft\Шаблоны\Decisionmod.dot" _
        ).Delete
    AddIns( _
        "C:\Users\****\AppData\Roaming\Microsoft\Шаблоны\Decision.dot"). _
        Delete
    With ActiveDocument
        .UpdateStylesOnOpen = False
        .AttachedTemplate = "Normal"
    End With
End Sub
ВХод в меню добавления шаблонов
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Макрос2()
'
' Макрос2 Макрос
'
'
    With ActiveDocument
        .UpdateStylesOnOpen = False
        .AttachedTemplate = "Normal"
    End With
End Sub
0
Житель Земли
2818 / 2665 / 372
Регистрация: 26.07.2011
Сообщений: 10,696
Записей в блоге: 1
16.03.2020, 13:32 4
Цитата Сообщение от Алексей_2012 Посмотреть сообщение
AddIns.Add FileName:= _
        "C:\Users\*****\AppData\Roaming\Microsoft\Шаблоны\Decisionmo d.dot" _
        , Install:=True
вроде принцип такой, не помню
Delphi
1
Wrd.AddIns.Add(FileName:= 'C:\Users\*****\AppData\Roaming\Microsoft\Шаблоны\Decisionmod.dot', Install:=True)
Добавлено через 57 секунд
Поскольку это OLE, проверить правильность можно только при работе приложения, когда оно будет общаться с Вордом
0
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 133
16.03.2020, 16:23  [ТС] 5
Попробовал так написать, применяется только к документу, который создался через программный код, а нужно чтоб шаблоны видели все документы wordа в общей папке пользователя, что исправить?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Button1Click(Sender: TObject);
var wrd: Variant;
 
  fil, dir: PChar;
begin
 
 
  fil := pchar(ExtractFilePath(Application.ExeName) + 'doc1.dot');
  dir := PChar(ExtractFilePath(GetEnvironmentVariable('APPDATA')) + 'Roaming\Microsoft\Шаблоны\doc1.dot');
  CopyFile(fil, dir, false);
 
 
  Wrd := CreateoleObject('Word.Application');
  Wrd.visible := false;
  wrd.documents.add(ExtractFilePath(GetEnvironmentVariable('APPDATA')) + 'Roaming\Microsoft\Шаблоны\normal.dot', false);
  Wrd.addins.add(string(dir), false);
 
  Wrd.visible := true;
end;
0
Житель Земли
2818 / 2665 / 372
Регистрация: 26.07.2011
Сообщений: 10,696
Записей в блоге: 1
16.03.2020, 16:29 6
Нужно понять, как сам ворд это делает. Я лично даже в ворде не имел дело с пользовательскими шаблонами, не говоря уже о стороннем приложении )
0
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 133
16.03.2020, 16:59  [ТС] 7
нужно как-то прописать в делфи
.AttachedTemplate = "Normal"

пробовал по разному - возвращает ошибку, но компилится
0
Житель Земли
2818 / 2665 / 372
Регистрация: 26.07.2011
Сообщений: 10,696
Записей в блоге: 1
17.03.2020, 10:25 8
Цитата Сообщение от Алексей_2012 Посмотреть сообщение
пробовал по разному
тут синтаксис один
Delphi
1
{word_object}.AttachedTemplate := 'Normal'
а вот куда прикрутить - вопрос

Цитата Сообщение от Алексей_2012 Посмотреть сообщение
возвращает ошибку, но компилится
технология OLE (позднее связывание) - компилятор не может знать и проверить, есть ли у OLE-объекта свойство AttachedTemplate, поскольку связь с этим объектом устанавливается на этапе работы программы. А ошибку возвращает сам объект, которому суют непойми что... )
1
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 133
17.03.2020, 15:00  [ТС] 9
спасибо за ответы, попробовал на другом ПК - все работает и так с офисом 2013( Ну да ладно, хоть работает.

теперь другая загвоздка, удалить надстройку из wordа, пробовал
Delphi
1
2
3
4
5
6
var wrd:oleVariant;
begin
...
Wrd.addins.delete(string(dir)); //dir - название (пробовал путь тоже указывать) шаблона
 
end;
0
880 / 583 / 178
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
17.03.2020, 16:15 10
Кликните здесь для просмотра всего текста
Чучуть уточню. Суть в том, что когда мы пишем так:
Delphi
1
{some_object}.AttachedTemplate := 'Normal';
на самом деле выполняется что-то вроде:
Delphi
1
SetProperty({some_object}, 'AttachedTemplate', 'Normal');
При этом ещё не факт есть ли у {some_object} свойство по имени 'AttachedTemplate'.

Судя по документации, AttachedTemplate - это свойство "документа".
Соответственно по идее возможны такие варианты:
  • Wrd.Documents[0].AttachedTemplate := '{...}.dot';
  • Wrd.ActiveDocument.AttachedTemplate := '{...}.dot';

Добавлено через 3 минуты
Зачем бы объявляете PChar и потом делаете странные действия? Чего не просто String?

Application.AddIns | AddIns

Добавлено через 2 минуты
Версии ваших Delphi'й? Версии ваших Word'ов?
0
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 133
17.03.2020, 16:44  [ТС] 11
word версии разные на разных машинах, 2007 где-то, где-то 2010, где-то 2013
версия делфи - delphi 7 lite

Нашел как удалить все шаблоны, но по отдельности не ясно как)

Delphi
1
wrd.addins.unload(true);
присутствует строка, принимает тип Pchar, лучше сразу задать переменные Pchar...ну это не суть)
Delphi
1
 CopyFile(fil, dir, false);
Разобрался, вроде адекватно добавляет на 2013 офис и удаляет тоже всю коллекцию
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
procedure TForm1.Button1Click(Sender: TObject);
var wrd: OleVariant;
    fil, dir: PChar;
    appdata:string;
begin
 
  appdata:=GetEnvironmentVariable('APPDATA') + '\Microsoft\Øàáëîíû\';
 
 
  fil := pchar(ExtractFilePath(paramstr(0)) + 'doc2.dot');
  dir := PChar(appdata+'doc2.dot');
 
 
  CopyFile(fil, dir, false);
 
  Wrd := CreateoleObject('Word.Application');
  Wrd.visible := false;
 
 
  wrd.documents.add(appdata+'normal.dot', false);
  Wrd.addins.add(string(dir), install:=true);
 
  wrd.ActiveDocument.Close;
  wrd.Quit;
  wrd:=null;
  application.Terminate;
 
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2020, 16:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Конвертирование PDF в Word. Word документ получился с режимом ограниченной функциональности
Добрый день! Конвертировал я PDF документ в Word документ через Adobe Acrobate pro DC. Получился...

Макрос Word 2016 замена шрифта рандомных символов на выбранный - MS Word
Есть обычный текст, только буквы и цифры Нужно, чтобы после обработки макроса выбирались случайные...

Работа метода Word.Selection.Find при поиске в документе Word
Дорого времени суток! никак не могу разобраться в механизме работы range.find Запускаю: ...

MS Word 2003: как открыть файлы более новых версий Word?
У меня стоит мс офис ворд 2003 года и то, что написано на намного более новых, просто не читает -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.