Показать сообщение отдельно
Старый 23.09.2006, 11:05   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
gl00mie, спасибо, что развиваете тему в "обратном направлении", т.е. Axapta <= Excel.
В очередной раз подумал, не пора ли затевать аналогичный "коллективный эксперимент"...

По классу - пара пожеланий.
Код:
itemId   = excelImp.getFieldValue(0); 
itemName = excelImp.getNamedFieldValue('Название'); 
price    = excelImp.getFieldValue(2, false);
Первое. Я бы объединил методы getFieldValue и getNamedFieldValue в один универсальный getFieldValue. И плюс к этому нумерацию полей начал бы с единицы, невзирая на то, что в самом ADO первое поле - 0. Понимаю, что вопрос концептуально-идеологический. Я сам метался между 0 и 1, но в конце концов остановился на 1. Ну и что, что лишняя операция вычитания, зато получается нормальный наглядный натуральный ряд (блин, ненавижу циклы от 0 до Count-1).

У меня в "инструментальном ящичке" в некотором классе есть противоположный метод - 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);
}
Второе пожелание. В методе getRecordCount я бы не торопился возвращать -1 в случае невозможности определения кол-ва записей через ADO. Всё же класс посвящен Excel'ю, а он нам не чужой. Можно, например, воспользоваться в Excel методом Range.CurrentRegion и далее Rows.Count минус первая заголовочная строка (если она есть). Ну, как-то так...

Ну, и еще раз спасибо!
За это сообщение автора поблагодарили: gl00mie (2).