0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
1

COM Объект "Word.Application" , копирование частей документа

07.05.2013, 20:39. Показов 4455. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
у меня в коде для размножения таблиц используются методы word Copy() и Paste(). Но эти методы работают с буфером, т.е берём два паралелно выполняющихся задания на одном компе от одного пользователя и вот первое заносит в буфер строку таблицы из своего документа и успевает вставить 3 строки их 5, и тут второе копирует в буфер свою строку из своего документа, на выходе получим нормальный второй документ а в первом 4 и 5 строки будут левыми скопированные из другого документа и ясен фиг с другими параметрами.

Кто-нить сталкивался и как тогда решал такой вопрос, а кто не сталкивался посоветуйте чем заменить эти методы ворда.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2013, 20:39
Ответы с готовыми решениями:

Автоматическое копирование фрагментов в документе WORD и перенос их в таблицу документа WORD
Доброго времени суток, дорогие форумчане! На работе образовалась весьма тривиальная задача...

Объект Word Application
В чем может быть причина того, что объект Word.Application не запускается из asp...

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

Выборочное копирование из документа Word
Всем привет, разбираюсь с POI дошёл до import org.apache.poi.xwpf.extractor.XWPFWordExtractor; в...

13
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
08.05.2013, 11:50 2
если там просто текст - не перебрасывайте его через буфер - вместо этого запоминайте его в своей переменной.
если нет - можно попробовать покрутить WinAPI Open/CloseClipboard Get/SetClipboardData
0
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
08.05.2013, 12:19  [ТС] 3
Да даже если и просто текст, надо чтобы сохранялось его форматирование, я за ранее не знаю что будет копироваться, то есть в ворде делаются спец отметки по которым определяется копируемый диапозон

Добавлено через 3 минуты
Так то у меня мечта обойтись вообще без буфера.
Я так посмотрел про WinApi Clipboard, если я его открою в коде то ворд не сможет в него скопировать при вызове метода области Copy так как буфер типа уже занят для ворда окажеться.
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
08.05.2013, 12:33 4
excel позволяет копировать напрямую из приемника в назначение. word судя по беглому просмотру документации - нет. то есть даже в пределах одного макроса вы можете попасть на чужие данные (пользователь успел что то скопировать пока программа шла от Copy до Paste). если все это осложнено неизвестностью в отношении типа содержимого буфера нужно искать способ блокировать копирование до тех пор пока не произойдет Paste (полагаю в WinAPI) либо еще раз прочесывать документацию на word

Добавлено через 2 минуты
Цитата Сообщение от alexei366 Посмотреть сообщение
если я его открою в коде
может я не понял схему. так: создаете COM word, что-то выделяете, вызываете метод копирования, делаете вставку куда-то... да, выходит word не доскребется до блокированного буфера...

Добавлено через 2 минуты
...в любом случае даже если мы предохраним данные word мы просто убьем данные пользователя

Добавлено через 7 минут
мб поставить свой перехватчик и задерживать сообщения о копировании?
0
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
08.05.2013, 12:36  [ТС] 5
Пользователь у нас это юзер от которой запускается серверная служба приложения, ну типа сотрудник жмакает кнопку а выполнение происходит на сервере приложения, и ворд тама же запускается (а то вдруг у юзера ворд древний или вообще нет), получается в теории данные пользователя мы не убиваем как-бы с одной стороны, а с другой одновременные запросы нескольких сотрудников делает аналогичную ситуевину.

Добавлено через 1 минуту
Чтото близкое по сути я на msdn нашёл, но походу корректно использовать для моей ситуации не получиться.
http://msdn.microsoft.com/ru-r... gment.aspx
http://msdn.microsoft.com/ru-r... tfile.aspx
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
08.05.2013, 12:39 6
запускать каждому пользователю свой сеанс?

Добавлено через 48 секунд
Цитата Сообщение от alexei366 Посмотреть сообщение
Чтото близкое по сути
очень даже похоже на то что вы ищите, почему не прекручивается
0
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
08.05.2013, 12:56  [ТС] 7
Ну смотри, есть документ ворда, в нем объявлены параметры для подстановки в виде текста заключенного в {}, для объявления множественной части я использую к примеру <Строка> (в первой колонке) и <Строка/> (в последней), а через эти методы мне какимто образом надо будет удалисть всё кроме нашего копируемого участка, сохранить это как другой документ и уже всталять его.
Чот такая затея не сильно радует, да и я уже подозреваю на сколько это увеличит время выполнения.

Добавлено через 7 минут
Есть у меня идея такая, перед каждой вставкой (их обычно штуки 4) принудительно повторять метод копирования участка дока в буфер, а после вставки сравнивать области при помощи метода IsEqual, и если не получилося применить метод Undo (отмена последнего действия для документа) и повторно пробывать (ну установить к примеру раз 5 или 10 максимум, или цикл на 5 сек к примеру).
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
08.05.2013, 13:30 8
Цитата Сообщение от alexei366 Посмотреть сообщение
Ну смотри, есть документ ворда, в нем объявлены параметры для подстановки в виде текста заключенного в {}, для объявления множественной части я использую к примеру <Строка> (в первой колонке) и <Строка/> (в последней), а через эти методы мне какимто образом надо будет удалисть всё кроме нашего копируемого участка, сохранить это как другой документ и уже всталять его.
Чот такая затея не сильно радует, да и я уже подозреваю на сколько это увеличит время выполнения.
*пожимает плечами*
Цитата Сообщение от alexei366 Посмотреть сообщение
Есть у меня идея такая
на мой вкус - адова идея
0
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
08.05.2013, 13:46  [ТС] 9
Ну а ты бы как мне посоветовал сделать?
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
08.05.2013, 13:47 10
я бы попробовал надуть систему покопав в сторону запуска нового сеанса для каждого подключенного пользователя. буфера будут разные и соответственно разные пользователи не встретятся.
0
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
08.05.2013, 14:05  [ТС] 11
Я тебе щас открою страшную тайну, мое приложение это 1С:Предприятие в клиент-серверном варианте, тут не кого не надуешь. Просто у меня вопрос конкретно по ком объекту поэтому и подумал что и сюда написать можно (вариантов больше наверно).
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
08.05.2013, 14:12 12
Цитата Сообщение от alexei366 Посмотреть сообщение
тут не кого не надуешь
почему же. как я понял у вас стоит машина делающая нечто. есть клиенты подключающиеся к этой машине. на машине открывается ворд и что то там молотит в буфер. причем ком настроен так что у всех пользователей один сеанс (ну, наверное ворд стартует от имени системы или админа или пользователь на все предприятие один). ясно что буфер заполняется сразу несколькими человеками. поэтому их надо разнести. как вариант - если коды клиентов редактируются можно попробовать приостанавливать их если сервер занят задачей другого пользователя.
0
0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
08.05.2013, 14:27  [ТС] 13
На каждое нажатие кнопки на серваке стартует свой экземпляр ворда от одного и тогоже пользователя, ну и сеанс тотже наверно.
Ток не понял что ты имел ввиду "как вариант - если коды клиентов редактируются можно попробовать приостанавливать их если сервер занят задачей другого пользователя"
0
Модератор
3401 / 2172 / 353
Регистрация: 13.01.2012
Сообщений: 8,413
08.05.2013, 14:29 14
...надо полагать это был ап...
0
08.05.2013, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2013, 14:29
Помогаю со студенческими работами здесь

Получить объект документа Word из Аттача
Для получения оного, обычно использую: Set wObj = CreateObject(&quot;Word.Application&quot;) Set...

Копирование ячеек из другого документа в формулу и копирование в формата документа, в который копируем (шрифт, размер)
Добрый вечер. Ребят, возникла проблема при создании Макроса. Обрисовываю ситуацию. Размер и...

Объект Ole показывает только одну страницу документа Word
Моя задача состоит в том, разработать небольшое приложение. На одной из форм я должен разместить...

Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word
Добрый день! Подскажите, пожалуйста, возможно ли средствами делфи активировать кнопку &quot;Добавить&quot;...

На оборотной стороне документа word в правой части документа, текст съезжает за границу документа
Добрый вечер. Есть код, который формирует документ из шаблона. И все вроде бы, но происходит что...

Создать объект Excel.Application: var Obj=Server.CreateObject('Excel.Application');
мне нужно создать объект var Obj=Server.CreateObject('Excel.Application'); у меня стоит iis 4.0 ...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru