|
23.09.2006, 11:05 | #1 |
Moderator
|
gl00mie, спасибо, что развиваете тему в "обратном направлении", т.е. Axapta <= Excel.
В очередной раз подумал, не пора ли затевать аналогичный "коллективный эксперимент"... По классу - пара пожеланий. Код: itemId = excelImp.getFieldValue(0); itemName = excelImp.getNamedFieldValue('Название'); price = excelImp.getFieldValue(2, false); У меня в "инструментальном ящичке" в некотором классе есть противоположный метод - setFieldValue, привожу его в качестве подспорья-иллюстрации. Воспользуйтесь при желании. Код: void setFieldValue(anytype _fldName, anytype _fldValue, int _ordNum = 0) { // _fldName - можно текстовое имя, а можно числовое, начиная с 1 (!), а не 0 как в самом ADO // _ordNum - дополнительный способ нумерации, если используются текстовые названия полей (чисто для наглядности самого кода) anytype fldName; if (typeof(_fldName) == Types::Integer) { fldName = _fldName - 1; } else { fldName = _fldName; // текстовое представление поля } fld = flds.Item(fldName); fld.Value(_fldValue); } Ну, и еще раз спасибо! |
|
|
За это сообщение автора поблагодарили: gl00mie (2). |
25.09.2006, 13:59 | #2 |
Участник
|
Цитата:
Сообщение от Gustav
По классу - пара пожеланий. Первое. Я бы объединил методы getFieldValue и getNamedFieldValue в один универсальный getFieldValue. И плюс к этому нумерацию полей начал бы с единицы, невзирая на то, что в самом ADO первое поле - 0. Понимаю, что вопрос концептуально-идеологический. Я сам метался между 0 и 1, но в конце концов остановился на 1. Ну и что, что лишняя операция вычитания, зато получается нормальный наглядный натуральный ряд (блин, ненавижу циклы от 0 до Count-1).
Цитата:
У меня в "инструментальном ящичке" в некотором классе есть противоположный метод - setFieldValue, привожу его в качестве подспорья-иллюстрации. Воспользуйтесь при желании.
PHP код:
PHP код:
Цитата:
Второе пожелание. В методе getRecordCount я бы не торопился возвращать -1 в случае невозможности определения кол-ва записей через ADO. Всё же класс посвящен Excel'ю, а он нам не чужой. Можно, например, воспользоваться в Excel методом Range.CurrentRegion и далее Rows.Count минус первая заголовочная строка (если она есть). Ну, как-то так...
PHP код:
В общем, мне кажется, идеологически правильнее использовать для определения количества записей средства ADO, а не обходные маневры с использованием COM-интерфейсов Excel. Во вложении - тестовый job, использованный для измерения скорости. Обновленный класс можно найти в первом сообщении темы. Последний раз редактировалось gl00mie; 08.01.2007 в 23:45. |
|
|
За это сообщение автора поблагодарили: blokva (2), Hans (1), konopello (1), demon46 (1). |
25.09.2006, 14:43 | #3 |
Moderator
|
Цитата:
Это означает, что ПРИ ЖЕЛАНИИ в случае больших списков полей можно написать так: Код: setFieldValue('НужноеПоле' , valNeed , 1 ); setFieldValue('ОченьНужноеПоле' , valVeryNeed , 2 ); .............................................................. setFieldValue('НаинужнейшееПоле' , valNeedest , 56 ); setFieldValue('НеТакоеВажноеПоле', valNotSoImportant , 57 ); Код: setFieldValue('НужноеПоле' , valNeed ); // 1 setFieldValue('ОченьНужноеПоле' , valVeryNeed ); // 2 .............................................................. setFieldValue('НаинужнейшееПоле' , valNeedest ); // 56 setFieldValue('НеТакоеВажноеПоле', valNotSoImportant ); // 57 |
|