Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Метод Paste не работает для объединенных ячеек? / 10 сообщений из 10, страница 1 из 1
31.07.2007, 12:33:47
    #34695181
LiberalX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
Проблема такая, есть текст в Clipboard, нужно программным путем вызвать метод Paste и вставить его. Все работает, за исключением случая когда Range - это объединенные ячейки.
Делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 declare
    i_range = "это объект Range";
    v_name = "Ищем этот текст";
    v_Dummy = "Это временный объект" ;
    i_value = "новый текст, вместо искомого";
 begin
 ORDCOM.InitArg();
 ORDCOM.SetArg(v_name, 'BSTR');

 if ORDCOM.Invoke(i_range, 'Find', 1, v_Dummy) = 0 then
    if ORDCOM.Getproperty(v_Dummy, 'Text', 0, v_text) = 0 then
       pak_history.p_sys_event('Был текст в ячейке: '||v_text);
       v_text:=replace(v_text, v_name, i_value);
       sysutils.SetClipboard(v_text);
    else
       sysutils.SetClipboard(i_value);
    end if;
    ORDCOM.InitArg();
    ORDCOM.SetArg(v_Dummy, 'DISPATCH');
    i := ORDCOM.Invoke(ActiveSheetToken, 'Paste', 1, v_res);
    p_trace(ORDCOM.DestroyObject(v_res));
  end if;
 end;

Т.е. вызываю метод Paste и в качестве аргумента даю ему Range, который мне возвращает метод Find (т.е. объект v_Dummy). Когда простая ячейка, все работает, когда объединенная, облом. Метод Find ищет нормально в обоих случаях, т.е. после ORDCOM.Getproperty(v_Dummy, 'Text', 0, v_text) = 0 v_text - не пустой.
...
Рейтинг: 0 / 0
31.07.2007, 12:42:34
    #34695219
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
если range это объединенная ячейка, то вставлять надо в range.range("A1")
это в на дельфях что ли офис дрессируете ?
...
Рейтинг: 0 / 0
31.07.2007, 13:12:03
    #34695325
LiberalX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
big-dukeесли range это объединенная ячейка, то вставлять надо в range.range("A1")
это в на дельфях что ли офис дрессируете ?

Нет, это я в Oracle на PL/SQL. Попробовал, результат немного не тот что я ожидал. :)
Возник новый вопрос, что тогда возвращает метод Find ?
Опишу ситуацию: Есть изначальный регион i_range - это n-ное кол-во строк и столбцов.
В нем я ищу, допустим, такой текст "[ГРУЗООТПРАВИТЕЛЬ_ПОДРОБНЫЙ]". Этот текст находится в этом регионе, но в объединенной ячейке. Что возвращает метод Find в этом случае? Спрашиваю, потому как под Ораклом очень проблематично это все оттрассировать.
Попытался применить Paste к v_Dummy(то что вернул Find).range("A1") получил ошибку (Description:COM-0002: Invalid Token or no interface for token).

Тогда применил Paste к i_range.range("A1"). Вставка прошла, но в 1 ячейку изначального региона.
...
Рейтинг: 0 / 0
31.07.2007, 13:20:01
    #34695355
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
paste используется для Worksheet ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("D1:D5")
PasteSpecial для Range и Worksheet
В вашем случае - v_Dummy(то что вернул Find).range("A1") .pastespecial xlPasteAll
...
Рейтинг: 0 / 0
31.07.2007, 15:17:25
    #34695858
LiberalX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
big-dukepaste используется для Worksheet ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range("D1:D5")
Да, я знаю. Я имел ввиду, что в качестве Destination:=v_Dummy(то что вернул Find).range("A1"). Так не работает. Вообще, при попытке получить Range("A1") у v_Dummy(то что вернул Find) получаю ошибку. Т.е. по устройству этой Оракловой библиотеки, я сначала должен получить новый Range("A1"), а уже потом вызывать у него PasteSpecial. Уже 2 часа бъюсь головой об этот Range и не выходит. Что блин за Range, возвращает этот Find...
...
Рейтинг: 0 / 0
31.07.2007, 15:41:16
    #34695971
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
ну а так
set r = v_Dummy(то что вернул Find)
r.pastespecial xlpasteall
...
Рейтинг: 0 / 0
01.08.2007, 09:54:24
    #34697218
LiberalX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
С утра перепробовал все способы вставки текста (из Clipboard) в объединенные ячейки.
Метод Find возвращает мне ячейку, допустим с адресом $C$3 (она объединенная), назовем этот Range => X.
Итак, не работают такие способы:
1. Если взять Y = X.Range("$A$1")
2. Если взять Y = X.Cells(1,1)

и потом сделать
ActiveSheet.Paste (Destination := Y)

или
Y.Select
ActiveSheet.Paste

То же самое не работает если сделать Y.PasteSpecial.

Кто предложит еще какие-нибудь способы? К сожалению, избавиться от объединенных ячеек, никак нельзя. ((
...
Рейтинг: 0 / 0
01.08.2007, 11:37:58
    #34697490
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
Чё то не очень понятно!
Выложите пример (файл) какую ячейку в какую нужно скопировать!
Чё то вы по-моему не то делаете!
...
Рейтинг: 0 / 0
01.08.2007, 12:00:44
    #34697556
LiberalX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
Так, еще раз по-порядку алгоритма:
Есть изначальный Range, в котором ищется методом Find определенный текст,например, "[ГРУЗООТПРАВИТЕЛЬ_ПОДРОБНЫЙ]". Этот текст нужно заменить на текст находящийся в буфере обмена. Т.е. сделать Past в ячейку, где находится текст "[ГРУЗООТПРАВИТЕЛЬ_ПОДРОБНЫЙ]". Проблемы начинаются тогда, когда текст находится в объединенной ячейке. Метод Past в этом случае не работает.
Например, объединены ячейки "C3:M4". Метод Find возвращает мне Range с адресом "С3". Я всячески пытаюсь(как было описано выше) вставить текст в этот Range и Past не срабатывает. DisplayAlerts отключен, естественно. Но код ошибки я все равно получаю и текст не заменяется.
Дак вот, есть мысль делать UnMerge, затем Past в "C3", затем выделение "C3:M4" и снова Merge.
Проблема в том, что адрес региона, который вернул Find только "С3", как узнать что там "C3:M4" ?
Т.е. как узнать адрес объединенных ячеек, если есть только "C3"? Или какое-то менее геморройное решение...
...
Рейтинг: 0 / 0
01.08.2007, 13:46:57
    #34697965
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Paste не работает для объединенных ячеек?
Используйте вместо буфера переменную
тогда вставить можно будет так

Код: plaintext
Range("C3").Value = x

А если из буфера нужно в переменную, то так

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim x As String,
'A2 - необъединённая ячейка
Range("A2").Select
ActiveSheet.Paste
x = Range("A2").Value
Range("A2").ClearContents
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Метод Paste не работает для объединенных ячеек? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]