Аватар для Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 134

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

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

Author24 — интернет-сервис помощи студентам
Добрый день! Подскажите, пожалуйста, возможно ли средствами делфи активировать кнопку "Добавить" (ниже поясняющие скрины) и завести общие шаблоны в 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;
Помогите, пожалуйста)
Миниатюры
Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word   Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word   Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word  

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2020, 20:05
Ответы с готовыми решениями:

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

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

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

10
Житель Земли
 Аватар для DenNik
3003 / 3022 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
13.03.2020, 14:16
Макрос. Включаешь в ворде запись макроса, делаешь то, что нужно, выключаешь запись. Если в коде макроса что-то есть, значит, это можно сделать сторонним приложением при помощи объектной модели COM. если нет, то увы
1
 Аватар для Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 134
13.03.2020, 16:36  [ТС]
Отлично! Спасибо! Записал несколько макросов, вопрос как это может выглядить на 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
Житель Земли
 Аватар для DenNik
3003 / 3022 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
16.03.2020, 13:32
Цитата Сообщение от Алексей_2012 Посмотреть сообщение
AddIns.Add FileName:= _
        "C:\Users\*****\AppData\Roaming\Microsof t\Шаблоны\Decisionmod.dot" _
        , Install:=True
вроде принцип такой, не помню
Delphi
1
Wrd.AddIns.Add(FileName:= 'C:\Users\*****\AppData\Roaming\Microsoft\Шаблоны\Decisionmod.dot', Install:=True)
Добавлено через 57 секунд
Поскольку это OLE, проверить правильность можно только при работе приложения, когда оно будет общаться с Вордом
0
 Аватар для Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 134
16.03.2020, 16:23  [ТС]
Попробовал так написать, применяется только к документу, который создался через программный код, а нужно чтоб шаблоны видели все документы 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
Житель Земли
 Аватар для DenNik
3003 / 3022 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
16.03.2020, 16:29
Нужно понять, как сам ворд это делает. Я лично даже в ворде не имел дело с пользовательскими шаблонами, не говоря уже о стороннем приложении )
0
 Аватар для Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 134
16.03.2020, 16:59  [ТС]
нужно как-то прописать в делфи
.AttachedTemplate = "Normal"

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

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

теперь другая загвоздка, удалить надстройку из wordа, пробовал
Delphi
1
2
3
4
5
6
var wrd:oleVariant;
begin
...
Wrd.addins.delete(string(dir)); //dir - название (пробовал путь тоже указывать) шаблона
 
end;
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
17.03.2020, 16:15
Кликните здесь для просмотра всего текста
Чучуть уточню. Суть в том, что когда мы пишем так:
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
 Аватар для Алексей_2012
0 / 0 / 1
Регистрация: 26.04.2014
Сообщений: 134
17.03.2020, 16:44  [ТС]
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2020, 16:44
Помогаю со студенческими работами здесь

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

Конвертирование 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
Реализация конвейеров машинного обучения с Python и Scikit-learn
AI_Generated 23.04.2025
Мир данных вокруг нас растёт с каждым днём, и умение эффективно обрабатывать информацию стало необходимым навыком. Специалисты по машинному обучению ежедневно сталкиваются с задачами предобработки. . .
Контроллеры Kubernetes Ingress: Сравнительный анализ
Mr. Docker 23.04.2025
В Kubernetes управление входящим трафиком представляет собой одну из ключевых задач при построении масштабируемых и отказоустойчивых приложений. Ingress — это API-объект, который служит вратами. . .
Оптимизация кода Python с Cython и Numba
py-thonny 23.04.2025
Python прочно обосновался в топе языков программирования благодаря своей простоте и гибкости. Разработчики любят его за читабельность кода и богатую экосистему библиотек. Но у этой медали есть и. . .
Микросервис на Python с FastAPI и Docker
ArchitectMsa 23.04.2025
В эпоху облачных вычислений и растущей сложности программных продуктов классическая монолитная архитектура всё чаще уступает место новым подходам. Микросервисная архитектура становится фаворитом. . .
Создаем веб-приложение на Vue.js и Laravel
Reangularity 23.04.2025
Выбор правильного технологического стека определяет успех веб-проекта. Laravel и Vue. js формируют отличную комбинацию для создания современных приложений. Laravel — это PHP-фреймворк с элегантным. . .
Максимальная производительность C#: Span<T> и Memory<T>
stackOverflow 22.04.2025
Мир высоконагруженных приложений безжалостен к неэффективному коду. Каждая миллисекунда на счету, каждый выделенный байт памяти может стать причиной падения производительности. Разработчики на C#. . .
JWT аутентификация в Java
Javaican 21.04.2025
JWT (JSON Web Token) представляет собой открытый стандарт (RFC 7519), который определяет компактный и самодостаточный способ передачи информации между сторонами в виде JSON-объекта. Эта информация. . .
Спринты Agile: Планирование, выполнение, ревью и ретроспектива
EggHead 21.04.2025
Спринты — сердцевина Agile-методологии, позволяющая командам создавать работающий продукт итерационно, с постоянной проверкой гипотез и адаптацией к изменениям. В основе концепции спринтов лежит. . .
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров
Programma_Boinc 21.04.2025
Очередные открытия мега простых чисел, сделанные добровольцами с помощью домашних компьютеров. 3 марта 2025 года, в результате обобщенного поиска простых чисел Ферма в PrimeGrid был найден. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru