Цитата:
Сообщение от
zZ_TOP_Zz
to Gustav без обид:
Абсолютно. Я ж сразу предупредил - ничего личного. Мы просто делаем тихую революцию
Цитата:
Сообщение от
zZ_TOP_Zz
Можно было конечно рассказать о существовании вывода в Ексель через механизмы прямого обращения через COM, используя операции с текстовым буфером и вставкой всех данных за раз, но за чем.
Вот это точно незачем, потому что вопрос был не про вывод, а про конкретную операцию уже внутри Excel. А что мы там делаем и как туда попали в задачке не говорится и не спрашивается.
Цитата:
Сообщение от
zZ_TOP_Zz
скажу честно пользовался Вашими советами
Спасибо, очень приятно
Цитата:
Сообщение от
zZ_TOP_Zz
но для примера и начала разбора с механизмами подойдет способ предложенный ice и простенький метод копирования.
Увы, он уже сразу не совсем простенький, потому что получен превращением кода макрорекордера, который операцию копирования (выделения типа Range.Select не учитываем) раскладывает на: копирование "от имени" range и последующую вставку от имени worksheet. К слову сказать, при выполнении Вашего метода еще, наверное, останется пунктирная рамка выделения, которую надо снимать операцией типа Application.CutCopyMode(false). Т.е. еще как минимум одна строка должна появиться.
Ну вот и смотрит человек и видит, аналогично как и в других методах этого класса, что чтобы выполнить простую операцию надо эвона сколько строк понаписать. Они все правильные - иначе ж бы не работало. Но они - лишние... Вот как уже достаточно (бог с ними пока с букмарками):
X++:
void copy(MSOfficeBookMark_RU bookMark1, MSOfficeBookMark_RU bookMark2, int _workSheet = 1)
{
Com range1,range2;
if (m_comDocument)
{
range1 = this.findRange(bookMark1, _workSheet);
range2 = this.findRange(bookMark2, _workSheet);
range1.copy(range2);
}
}
А я предлагаю вот как (уже без букмарков и, заметьте, отпала необходимость в параметре worksheet, потому что range сам знает, с какого он worksheet'а и из какого он workbook'а):
X++:
void copy(COM range1, COM range2)
{
if (m_comDocument)
{
range1.copy(range2);
}
}
Ну и как-то уже и метод вроде не нужен в таком элементарном виде (но об этом я написал выше).
Цитата:
Сообщение от
zZ_TOP_Zz
Далее он сам все найдет. Мы же не сразу со знаниями рождаемся, а приобретаем их по ходу жизни.
Иех, четвертый год я на форуме, время от времени возникаю с этой темой. А все равно, как ни вопрос по Excel, так очередной ответ с методом для ComExcelDocument_RU - и c теми же букмарками, с теми же проверками, с теми же findRange... А новичков учить-то, наверное, надо сразу правильно, чтобы потом мучительно не переучиваться.
Цитата:
Сообщение от
zZ_TOP_Zz
А вообще Вы как всегда правы в своем посте.
Спасибо еще раз и простите, что еще раз тут повыступал.