Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/103: Рейтинг темы: голосов - 103, средняя оценка - 4.82
Программист по неволе
 Аватар для Alex_From_777
24 / 24 / 8
Регистрация: 22.04.2015
Сообщений: 476
Записей в блоге: 1

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

01.10.2018, 14:22. Показов 22064. Ответов 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 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 / 4574 / 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru