Программист по неволе
 Аватар для Alex_From_777
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1

Внести текст в ячейку таблицы Word

01.10.2018, 14:22. Показов 21943. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Помогите решить следующую задачку.
Имеется файл .docx с таблицей.
Я его открываю, и пытаюсь внести текст в ячейку [1,1].
Но что я делаю неправильно? Ибо при выполнении строки vVarTable=vVarDoc.OlePropertyGet("Tables[1]"); возникает исключение EOLESystem Error 'Неизвестное имя'
C++
1
2
3
4
5
6
7
8
9
10
     vVarApp = CreateOleObject("Word.Application");
     vVarApp.OlePropertySet("Visible",true);
     vVarDocs=vVarApp.OlePropertyGet("Documents");
     vVarDocs.OleProcedure("Open", path.c_str(),false,0);
     vVarDoc=vVarDocs.OleFunction("Item",1);
     vVarDoc.OleProcedure("Activate");
 
     String text = "CONTROLL";
     vVarTable=vVarDoc.OlePropertyGet("Tables[1]");
     vVarTable.OlePropertyGet("Cell", 1,1).OlePropertyGet("Range").OlePropertyGet("Text")=text.c_str();
Подскажите, как получить доступ к таблицам, если они уже были созданы ранее в тексте.
Заранее благодарю.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2018, 14:22
Ответы с готовыми решениями:

Можно ли заранее вручную внести текст в ячейку StringGrid?
есть два вопроса!!! создаю таблицу в StringGrid, и у меня должны быть введены несколько текстов в некоторые ячеки. В остальные ввод данных...

Как сложить текст из других ячеек в вычисляемую ячейку чтобы был виден текст а не значение ссылок на другие таблицы
С новым годом господа :-) Прошу немного сориентировать в решении нужной мне задачи. Собсно ситуация простейшая и типичная для...

Вставить таблицу в ячейку таблицы word
собственно вопрос как это сделать?))))

17
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,861
Записей в блоге: 12
01.10.2018, 15:19
Как минимум нужно:
C++
1
vVarTable = vVarDoc.OlePropertyGet("Tables").OleFunction("Item", 1);
1
Программист по неволе
 Аватар для Alex_From_777
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1
02.10.2018, 08:01  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
vVarTable = vVarDoc.OlePropertyGet("Tables").OleFunc tion("Item", 1);
Да, а затем еще я добавил:
C++
1
2
3
vVarCell = vVarTable.OleFunction("Cell", 1, 1);
RangeCell = vVarCell.OlePropertyGet("Range");
RangeCell.OlePropertySet("Text", text.c_str());
и получил, что хотел.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
09.02.2020, 12:44
А какие библиотеки надо подключить, чтобы заработало CreateOleObject?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,861
Записей в блоге: 12
09.02.2020, 12:57
Цитата Сообщение от archerix Посмотреть сообщение
чтобы заработало CreateOleObject
, надо подключить файл ComObj.hpp. В Билдере, разумеется, этот код как раз для него и написан.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
09.02.2020, 13:51
Спасибо. Перед кодом написано просто "С++", я подумал, что это как-то можно выкружить и в обычном С++.

Я с таким по Дельфи знаком, и мне интересно понять, возможно ли так же делать из обычного С++. То, что в Билдере оно есть, я знаю. Хотя по-моему, там это все как-то не так наглядно, как в Дельфи.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
10.02.2020, 00:01
ComObj подключил, все равно неясно - а какого типа должно быть это vVar? Мне казалось, Variant или OleVariant, но компилятор их не понимает.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,861
Записей в блоге: 12
10.02.2020, 15:59
Это Variant-ы, и компилятор от borland-а их прекрасно понимает, ибо описан этот тип в модуле System, который подключается к любому проекту по умолчанию.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
11.02.2020, 03:25
Ага, заработало, что-то сразу я напутал, видимо.

А вот такой вопрос - в примере открывается готовый документ. А как создать новый?

И еще - а как обозначается параметр - "пустышка" для методов документа и приложения?

Добавлено через 44 минуты
С первым вопросом разобрался.
C++
1
2
vVarDocs = vVarApp.OlePropertyGet("Documents");
vVarDocs.OleProcedure("Add");
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
11.02.2020, 11:12
Чего-то никак не удается просто добавить текст в Ворд, все время ругается на ошибки с типами

Пробовал так:
C++
1
2
vVarApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Content")
                     .OleProcedure("InsertAfter",vtexty);
Или так, по-хитрому:
C++
1
2
3
4
vVarParagraphs=vVarDoc.OlePropertyGet("Paragraphs");
vVarParagraph=vVarParagraphs.OleFunction("Item",1);
vVarParagraph.OlePropertyGet("Range").
             OlePropertySet("Text","123");
Пока получилось только передавать по одному символу типа Char, при этом в документе возникает его номер, а не он сам
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,861
Записей в блоге: 12
11.02.2020, 12:30
C++
1
2
vVarApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Content")
                     .OleProcedure("InsertAfter", WideString(vtexty));
- никогда проблем не было...
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
11.02.2020, 13:59
Ну а у меня вот так вот

C++
1
2
3
4
5
6
stexty="123";
vtexty="Hello, World";
ctexty='a';
 
vVarApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Content")
                     .OleProcedure("InsertAfter",vtexty);
Пробую подставлять их по очереди, переменные имеют тип строковый, вариант и чар соответственно. Работает только чар, и то странно - вместо буквы передается ее код. Остальные выкидывают сообщение об ошибке типов.

Добавлено через 9 минут
Попробовал передать вот так, нашел в интернете вроде бы работающий пример
C++
1
stexty.c_str()
Передался первый символ, после чего программа упала. У меня Билдер какой-то неправильный что ли?

Добавлено через 57 минут
А кто-то пробовал пользовать Ворд путем подключения библиотеки MSWORD.OLB? Я правда, пока не могу вникнуть как ее подключить. Примеры кода выглядят как-то более удобно и привычно, чем тут.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
12.02.2020, 13:48
И открыть существующий файл тоже не выходит. Тут stexty - строка.

C++
1
2
3
4
   stexty = "D:\testB.docx";
   wrd = CreateOleObject("Word.Application");
   wrd.OlePropertySet("Visible",true);
   wrd.OlePropertyGet("Documents").OleProcedure("Open", stexty.c_str());
Вылетает сообщение, что файл не найден, а в скобочках приписка - 'D:\%09est'. Что бы это значило?

Добавлено через 6 минут
Такое чувство, что строка с названием файла передается не полностью, часть символов в конце отбрасывается.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4573 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
12.02.2020, 13:52
Цитата Сообщение от archerix Посмотреть сообщение
"D:\testB.docx"
C++
1
"D:\\testB.docx"
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
12.02.2020, 13:58
Так изначально было написано - тогда вылетала ошибка "Неверное имя каталога". Собственно, потому и попробовал с одной чертой для опыту Весь мозг сломал уже, не знаю, что еще попробовать.

Название, расширение и само наличие файла десять раз перепроверено. Пробовал эту строку из переменой забивать в консоль - запускается.
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
13.02.2020, 03:24
Вроде удалось угадать - надо передавать текст как WideString. Интересно это только у меня так оригинально?
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
13.02.2020, 12:56
Можно тут спросить - а как таким образом выполнять поиск и замену в Ворде? Или лучше создать новую тему? В найденных в тырнете статьях не увидел такого
0
2 / 2 / 1
Регистрация: 08.02.2020
Сообщений: 215
14.02.2020, 01:36
Ну ладно, сам делюсь результатами изысканий в тырнетах и опытов Функция "заменить все", насколько понимаю. У меня работает.

C++
1
2
vVarApp.OlePropertyGet("Selection").OlePropertyGet("Find").OleProcedure("Execute", WideString("World"),
                               false, false, false, false, false, true, 1, false, WideString("Planet"), 2);
И есть такая расшифровка параметров:

OleProcedure ("Execute",
s1/*Текст, который будем менять*/,
false/*учитывать регистрe*/,
false/*Только полное слово*/,
false/*Учитывать универсальные символы*/,
false/*Флажок Произносится как*/,
false/*Флажок Все словоформы*/,
true/*искать вперед*/,
1/*Активация кнопки Найти далее*/,
false/* Задание формата */,
s2/*На что заменить*/,
2/*Заменить все*/);

Добавлено через 58 минут
А кто знает, как выделить определенный фрагмент текста, с такого-то символа по такой-то?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2020, 01:36
Помогаю со студенческими работами здесь

Решения с переносом в соседнюю ячейку таблицы word
У меня есть шаблон документа, который заполняется с помощью скрипта, но появился проблема, с переносом текста в нижнюю ячейку. Задумано,...

Вставить дату в ячейку таблицы в Word 2013
Подскажите, пож, как в Microsoft Word 2013 в одну из ячеек готовой таблицы вставить возможность изменения и выбора даты типа выпадающего...

Как изменить размер изображения, вставленного в ячейку таблицы MS Word?
Формирую таблицу с картинками в MS Word из 1С по технологии COM. Столкнулся с тем, что картинка после вставки в ячейку таблицы имеет...

Опустить кнопку и текст в ячейку таблицы
Она оранжевого цвета в верхнем правом углу.Ее нужно опустить на шапку шайта.Делал верстку блочно табличным методом и у меня где то она...

Как в ячейку таблицы вписать текст
function test() { document.getElementById("td3").innertext = "F-11"; } <table> ...


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

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

Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru