0 / 0 / 0
Регистрация: 07.08.2012
Сообщений: 11
|
|
1 | |
COM Объект "Word.Application" , копирование частей документа07.05.2013, 20:39. Показов 4455. Ответов 13
Метки нет (Все метки)
у меня в коде для размножения таблиц используются методы word Copy() и Paste(). Но эти методы работают с буфером, т.е берём два паралелно выполняющихся задания на одном компе от одного пользователя и вот первое заносит в буфер строку таблицы из своего документа и успевает вставить 3 строки их 5, и тут второе копирует в буфер свою строку из своего документа, на выходе получим нормальный второй документ а в первом 4 и 5 строки будут левыми скопированные из другого документа и ясен фиг с другими параметрами.
Кто-нить сталкивался и как тогда решал такой вопрос, а кто не сталкивался посоветуйте чем заменить эти методы ворда.
0
|
07.05.2013, 20:39 | |
Ответы с готовыми решениями:
13
Автоматическое копирование фрагментов в документе WORD и перенос их в таблицу документа WORD Объект Word Application Запрет на копирование документа Word? Выборочное копирование из документа Word |
Модератор
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 минуты может я не понял схему. так: создаете 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 секунд очень даже похоже на то что вы ищите, почему не прекручивается
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 |
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 |
почему же. как я понял у вас стоит машина делающая нечто. есть клиенты подключающиеся к этой машине. на машине открывается ворд и что то там молотит в буфер. причем ком настроен так что у всех пользователей один сеанс (ну, наверное ворд стартует от имени системы или админа или пользователь на все предприятие один). ясно что буфер заполняется сразу несколькими человеками. поэтому их надо разнести. как вариант - если коды клиентов редактируются можно попробовать приостанавливать их если сервер занят задачей другого пользователя.
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 | |
08.05.2013, 14:29 | |
Помогаю со студенческими работами здесь
14
Получить объект документа Word из Аттача Копирование ячеек из другого документа в формулу и копирование в формата документа, в который копируем (шрифт, размер) Объект Ole показывает только одну страницу документа Word Word.Application. Взаимодействие с word. Добавить общие шаблоны *.dot в папку appdata и в word На оборотной стороне документа word в правой части документа, текст съезжает за границу документа Создать объект Excel.Application: var Obj=Server.CreateObject('Excel.Application'); Создание документа Word из другого документа Word Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |