26.06.2006, 17:28 | #1 |
Участник
|
Удаление группы строк из Excel?
Может есть у кого нить метод для удаления группы строк из Excel для ComExcelDocument_RU.
Вызывать excelDocument.deleteRow(i) столько раз сколько нужно удалить строк не хотелось бы. Может у кого примерчик метода есть для класса ComExcelDocument_RU? Спасибо! |
|
26.06.2006, 17:37 | #2 |
Участник
|
Добавьте метод в указанный класс
PHP код:
|
|
|
За это сообщение автора поблагодарили: Hidden (1). |
26.06.2006, 19:08 | #3 |
Участник
|
а можно просто выделить нужный диапазн, и удалить его:
X++: void deleteRange(MSOfficeBookMark_RU _bookMark) { COM comRange; comRange = this.findRange(_bookMark); if (comRange) { comRange.delete(); } } |
|
26.06.2006, 22:00 | #4 |
Moderator
|
(сейчас под рукой Аксапты нет, чтобы проверить - рискну по памяти! завтра по-любому уточню)
Если предположить, что rng - любой известный Вам диапазон на том листе, где Вы хотите удалить строки, то можно действовать примерно следующим образом: X++: COM rng; // Range COM wks; // Worksheet COM rows; // Worksheet.Rows ........... rng = this.findRange(...); // например, так нам известен некий Range на нужном листе ........... wks = rng.Parent(); // получили ссылку на рабочий лист rows = wks.Rows(); // получили ссылку на все строки этого листа COM::createFromVariant( rows.Item('101:200') ).Delete(); // т.е. удаляем одним махом строки с 101-й по 200-ю ........... X++: static void Test_DeleteRows(Args _args) { COM xlApp; COM wbks, wbk; COM wkss, wks1, wks; COM rows, rng; ; xlApp = new COM('Excel.Application'); xlApp.Visible(true); wbks = xlApp.Workbooks(); wbk = wbks.Add(); wkss = wbk.Worksheets(); wks1 = wkss.Item(1); rng = wks1.Range('F19'); // допустим так нам известен объект Range // wks добавлен для примера (можно было бы и через wks1) wks = rng.Parent(); // получили ссылку на рабочий лист rows = wks.Rows(); // получили ссылку на все строки этого листа COM::createFromObject( wks.Range('A10') ).Value2('Это строка перед удаляемыми'); COM::createFromVariant( rows.Item('11:99') ).Formula('=ROW()'); COM::createFromObject( wks.Range('A100') ).Value2('Это строка после удаляемых'); // можно закоментировать строку ниже, чтобы убедиться в начальном существовании строк 11-99 COM::createFromVariant( rows.Item('11:99') ).Delete(); // т.е. удаляем одним махом строки с 11-й по 99-ю } Последний раз редактировалось Gustav; 27.06.2006 в 09:23. |
|
|
За это сообщение автора поблагодарили: Hans (1). |
28.06.2006, 10:19 | #5 |
Участник
|
Всем спасибо! Всё получилось.
|
|
28.06.2006, 10:38 | #6 |
Moderator
|
Цитата:
Сообщение от Hidden
Всё получилось.
P.S.Forward Цитата:
Сообщение от Hidden
Вывожу данные в эксель...
Последний раз редактировалось Gustav; 28.06.2006 в 14:06. |
|
28.06.2006, 13:04 | #7 |
Участник
|
Цитата:
Сообщение от Gustav
Ну, и славно. Hidden, если не секрет, с какой целью удаляете? Мне любопытно в принципе. У меня стереотип такой, что я воспринимаю Excel как "окончательный приемник" выводимых данных. Можно, допустим, слегка подправить форматирование по окончании вывода всех данных, но сами, скажем так, "блоки информации" готовятся в Аксапте и потом выводятся "потоком" в нужные места эксельного sheet-а. А что-то вывести, чтобы потом удалять... не совсем понимаю... Или я слишком узок в своем стереотипе?
|
|
16.06.2010, 11:37 | #8 |
Участник
|
Я пытаюсь использовать excel.deleteRange(1,1,2,2,0);
но у меня он ошибку выдаёт (объект Com) Метод "item" в COM-объекте класса "Sheets" возвратил код ошибки 0x8002000B (<неизвестно>), который означает: <неизвестно>. Невозможно создать рабочую книгу Microsoft Office Excel. не могу понять Да удалить надо именно диапазон а не строки какое значение может принимать Shift (послед. параметр) З Ы excel.RangeCopy(18,8,33,9,2,row+vlog,17,row+vlog+1); такая штука работает выше Последний раз редактировалось Pudd; 16.06.2010 в 11:40. |
|
16.06.2010, 12:08 | #9 |
Moderator
|
Цитата:
А про параметр Shift фирменного метода Range.Delete можно почитать в MSDN: http://msdn.microsoft.com/en-us/libr...ffice.12).aspx |
|
16.06.2010, 13:25 | #10 |
Участник
|
Метод стандартный класса ComExcelDocument_RU
X++: void deleteRange(int _firstCol, int _firstRow, int _secCol, int _secRow, int _shift, int _workSheet = activeWorkSheetIdx) { MSOfficeBookMark_RU bookMark = ComExcelDocument_RU::numToNameCell(_firstCol, _firstRow) + ':' + ComExcelDocument_RU::numToNameCell(_secCol, _secRow); COM comRange = this.findRange(bookMark, _workSheet); ; if(comRange) comRange.delete(_shift); } удалось заменить его на deleteCol |
|
16.06.2010, 14:23 | #11 |
Moderator
|
Ну, наверное, про Shift вам уже всё понятно из моей предыдущей ссылки на MSDN. Грубо говоря, Shift - это две первые опции из четырех на рисунке (диалог вызван правой кнопкой мыши и далее пунктом "Удалить"):
Если выбрать четыре опции по очереди, то макрорекордер запишет такой код VBA: Код: Range("B3:C7").Select Selection.Delete Shift:=xlToLeft Selection.Delete Shift:=xlUp Selection.EntireRow.Delete Selection.EntireColumn.Delete |
|
12.07.2010, 09:28 | #12 |
Участник
|
Вот возник опять вопрос по поводу Shift DeleteRange Какие значения туда подставлять?
-4159 и -4162 выдают ошибку PS Dax 2009 |
|
12.07.2010, 09:56 | #13 |
Moderator
|
|
|
12.07.2010, 10:04 | #14 |
Участник
|
ну
на этой строке excel.deleteRange(4,1,5,2,-4162); на месте -4162 я пробывал и -4159 и без "-" ошибка такая Метод "item" в COM-объекте класса "Sheets" возвратил код ошибки 0x8002000B (<неизвестно>), который означает: <неизвестно>. |
|
12.07.2010, 12:12 | #15 |
Moderator
|
Запустите у себя вот такой джобик:
X++: static void Job1(Args _args) { COM rng = sysExcelApplication::construct().workbooks().add().worksheets().itemFromNum(1).cells().range('A1:C3').comObject(); COM xlApp = rng.Application(); Array arr = new Array(Types::String); ; arr.value(1, '1'); arr.value(2, '2'); arr.value(3, '3'); rng.value2(arr); // вставка в диапазон A1:C3 - размер 3 х 3 rng = rng.Resize(2,2); // переопределение диапазона в A1:B2 rng.Delete(-4159); // и удаление диапазона A1:B2 xlApp.Visible(true); } |
|
12.07.2010, 18:03 | #16 |
Пенсионер
|
Вообще-то в MSDN написано: "Shift Optional Variant" и мне кажется надо параметр Shift передавать как COMVariant.
__________________
Законы природы еще никто не отменял! А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
Теги |
excel |
|
|