|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
||||||
Работа с Olecontainer02.07.2017, 16:13. Показов 10537. Ответов 16
Метки нет (Все метки)
Всем добрый вечер. Если кто в курсе – подскажите. При работе программы создаю в ней вторую форму, открываю в ней Olecontainer с встроенным пустым файлом Word. Цель – лень заполнять ручками (набивать) данные. Их же можно скачать из уже готового другого файла и вставить (есть необходимость вставить заполненную таблицу и потом уже раскидать значения из ее ячеек там, где надо). Вторая форма создается – все хорошо. В файл в Olecontainere таблица вставляется – все хорошо. Но при сохранении файла из Ole - сохраняется пустой исходник.
0
|
||||||
| 02.07.2017, 16:13 | |
|
Ответы с готовыми решениями:
16
Работа с Excel и OleContainer Olecontainer |
|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
|
| 02.07.2017, 19:56 [ТС] | |
|
Жалко терять время на нудную и неэффективную работу - заново набирать руками уже набранные таблицы.
0
|
|
|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
|
| 03.07.2017, 06:24 [ТС] | |
|
Во-первых, что бы найти готовую таблицу, из которой я должен взять информацию - Word открыть уже нужно. В идеале я бы выделил таблицу прямо в документе, скопировал бы ее в буфер и уже из него брал бы по кусочкам. Но я пока не нашел такой возможности. Кинуть таблицу в буфер можно, а вот выдрать из нее значения ячеек и скопировать каждое в нужном направлении (каждое в свой Edit, например)???
0
|
|
|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
|
| 03.07.2017, 09:51 [ТС] | |
|
Только примерно. Например - состав компьютера - системный блок, монитор, клавиатура, мышь и принтер. Состав меняется редко, и комп, собранный 2-3 года назад при переучете набирать заново.... А так скопировал - и готово.
0
|
|
|
|
|||||||||||||||||||||
| 03.07.2017, 10:06 | |||||||||||||||||||||
|
у вас в коде происходит странное
сначала вы создаете один объект
офсайт
0
|
|||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
|
| 03.07.2017, 13:07 [ТС] | |
|
1. я создаю объект Word ( vWord := CreateOleObject('Word.Application')
. Без этого никак.2. Объявляю в Oleconteiner присоединение файла Word; То же вроде все правильно. 3. Присоединяю к Ole (открываю в окне Ole) конкретный файл Word (у меня файл "1.docx"). Файл открывается. Вижу контрольную надпись "Файл-источник", которая была в файле изначально; 4. Вношу изменения в файл. Вставляю таблицу, текст, вношу правки - все работает, как в обычном Wordе. Даже если в подготовительных операциях (№№ 1-3) я что-то делал не так - неважно, все работает. 5. Пытаюсь после выхода документа Word из Ole закрыть файл с изменениями. Что и не получается. Я пробовал разные варианты - пытался и сначала выйти из Ole, затем сохранить файл Word, закрыть Word, закрыть Oleconteiner. И сначала сохранить документ в Word, потом выйти из Ole, закрытьWord, закрыть Ole. В самом лучшем случае файл сохраняется с другим названием (становится 11.docx). Но изменения, внесенные прямо в Ole (п.4), в файле не сохраняются. Я бы пошел по другому пути - открыть файл Word, выделить в нем таблицу (скопировать ее в буфер обмена), и пытаться уже из него копировать нужную информацию по-ячейкам. Текст и картинки так обрабатывать можно - масса примеров с объяснениями. Как вытащить информацию из ячейки таблицы - пока не нашел. Добавлено через 3 минуты Только что увидел одну свою глупость. Я Olecontainer обозвал Oleobj. Из-за этого есть непонятки. Хотя на работу не влияет.
0
|
|
|
Житель Земли
|
|
| 03.07.2017, 13:14 | |
|
тебе в посте №8 уже указали на причины: ты создаешь ДВЕ переменных. изменения проводишь в одной, а сохраняешь файл из другой. какие еще вопросы? ты уже создал объект vWord - вот и работай в нем, на кой еще oleobj1?
Добавлено через 56 секунд а если ты изменения проводишь в oleobj1, так и СОХРАНЯЙ тоже oleobj1
0
|
|
|
|
||
| 03.07.2017, 13:28 | ||
|
что за операция "присоединение файла"? почему эта операция игнорируется разработчиками в примере? и в чем глупость oleObj ?
0
|
||
|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
|||||||||||||||||||||
| 03.07.2017, 15:22 [ТС] | |||||||||||||||||||||
|
Oleobj1 - это Oleconteiner. У меня и не получается сохранить в этом самом контейнере изменения в документ Word.
То что Вы написали как OleContainer1.SaveAsDocument(SaveDialog1 .Именем) - вот это и не хочет работать. Только я это делаю без Dialog, автоматом, файл-исходник всегда один и тот же. Файл из 1.docx переименовывается в 11.docx, но все изменения теряются где-то на полпути. стандартная процедура открытия (все взято с сайта, я не придумывал).
"" Если рабочий файл открыть в OleContainer и потом закрывать oc1.Close; oc1.DestroyObject; то процесс надстройки не завершается. После завершения моей программы выдается сообщение об ошибке COM и в каталоге остается файл с тильдой. Что нужно сделать, чтобы файл в OleContainer закрывался корректно как в оболочке Word?"" конец цитаты. Добавлено через 34 минуты Вот еще один пример на ту же тему. Если убрать все лишнее - будет один в один с моим текстом программы и с теми же проблемами
Еще один страдалец ""Добрый день, такая проблема, открываю в оле excel документ, потом я вношу руками туда записи и пытаюсь его сохранить вот так OleContainer1.SaveAsDocument(Extractfile Path(Application.ExeName) + 'grafic.xlsx'); и пытаюсь открыть этот сохраненный файл опять, но пишет что формат файла поврежден или неверный, и все это после сохранения"" конец цитаты. Наверное я перемудрил. Сделаю проще - без Ole контейнера просто открою пустой файл Word, кину туда талбицу и буду с ней работать. Не очень удобно, зато получится. Спасибо за помощь.
0
|
|||||||||||||||||||||
|
|
|||||||||||
| 03.07.2017, 16:33 | |||||||||||
|
вот где есть проблема, так то что оле контейнер не уважает свое место и занимает всю форму, поэтому пришлось выделить для него отдельную форму. результат
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
|
| 03.07.2017, 20:34 [ТС] | |
|
Спасибо. Вечером попробую.
Добавлено через 3 часа 41 минуту Добрый вечер. Подскажите пожалуйста один момент. procedure TForm1.b1Click(Sender: TObject); begin Form2.ShowModal; form2.OleContainer1.OleObject.SaveAs(Ext ractFilePath(ParamStr(0))+'333.doc'); end; procedure TForm2.FormShow(Sender: TObject); begin OleContainer1.CreateObjectFromFile(Extra ctFilePath(ParamStr(0))+'111.docx', false); OleContainer1.DoVerb(ovInPlaceActivate); end; Как я понимаю, при появлении новой формы файл 111 открывается в окне. При нажатии на Btn1 появляется новая форма и сразу же исходный файл '111' сохраняется как '333'? Но ведь это действие (сохранение) должно быть после работы с файлом 111 (внесения в него изменений). Но почему Form2.ShowModal стоит перед сохранением измененного файла? Получается дали команду на появление второй формы и тут же файл в ней сохранили? Без изменений, до изменений. И я сейчас опять упрусь в необходимость сохранить файл с внесенными изменениями - именно это у меня и не получалось. Добавлено через 6 минут Не хочет работать. Даже вторая форма не появляется.
0
|
|
|
|
|
| 03.07.2017, 20:48 | |
|
я привел код прямо "с экрана" так что все работает
ShowModal Открывает форму и не выходит, пока форма не закрыта соответственно когда вы наиграетесь, оно сохранит результат стартовая форма Form1. На ней кнопка. При нажатии на кнопку открывается Form2 и не продолжит, пока не закроется Form2 при открытии читает в контейнер файл 111.docx и открывает его на редактирование при закрытии Form2 содержимое контейнера сохраняется в файл 333.doc
0
|
|
|
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 28
|
|
| 04.07.2017, 05:44 [ТС] | |
|
все что я имею - на картинке
Добавлено через 1 час 17 минут Я не смог победить Olecontainer. Но проблему я решил. Тупо и не изящно, но решил. Вызываю пустой файл Word, вставляю в него таблицу (копирую), и качаю значения из ячеек таблицы в программу, в Comboboxы. При закрывании программы файл будет убит - он больше не нужен. Не получается только одно - при вызове Wordа пустой документ открывается за моей программой, пару вариантов на сайтах нашел - они не срабатывают. Завтра разберемся. Добавлено через 5 часов 50 минут Ничего не получилось. Пишет Access violation in adress 0000000000. Плюнул и сделал попроще. Из программы открываю чистый лист Word. Без Ole. напрямую. Кидаю (копирую) на него нужную мне таблицу. А уж из таблицы из документа вытащить значения ячеек - даже я умею. Неизящно. Но результат - все работает. Осталось научиться открывать Word перед формой программы. Упирается. Прячется.
0
|
|
|
|
|
| 04.07.2017, 06:49 | |
|
то-есть сделать готовую программу из четырех строк по образцу не удалось и мы уже вот-вот перейдем к тому варианту, который я предлагал с самого начала.
ввести все нужные данные в программе, потом закинуть их в файл...
0
|
|
| 04.07.2017, 06:49 | |
|
Помогаю со студенческими работами здесь
17
OleContainer OleContainer OleContainer и менюшка OleContainer и его сохранение Вывести Excel в OleContainer Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|