AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.04.2006, 14:46   #1  
Zeratul is offline
Zeratul
Участник
 
75 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Минск
? Получение данных из файла Excel

Застрял на элементарной задаче: есть какой-либо xls-файл, надо в переменную str прочитать его ячейку, ну, например, "A1". В ComExcelDocument_RU такого метода нету (get...). Может кто подскажет метод?!
Через COM делать неохото.
Возможно это уже обсуждалось, но я не смог найти...
Старый 21.04.2006, 15:05   #2  
abv2703 is offline
abv2703
Участник
 
92 / 22 (1) +++
Регистрация: 05.12.2003
Адрес: Санкт-Петербург, улица Бухарестсткая
X++:
str strValue(int _row, int _col)
{
    COM         c = this.cell(_row, _col);
    COMVariant  cv = c.value();

    switch (cv.variantType())
    {
        case COMVariantType::VT_BSTR: return cv.bStr();
        case COMVariantType::VT_R8:   return num2str(cv.double(),-1,0,0,0);
    }
    return '';
}
Старый 21.04.2006, 15:08   #3  
abv2703 is offline
abv2703
Участник
 
92 / 22 (1) +++
Регистрация: 05.12.2003
Адрес: Санкт-Петербург, улица Бухарестсткая
X++:
COM cell(int _row, int _col)
{
    int ii;
    COM     cellValue;
    ;
    cellValue = worksheet.cells();
     ii = 0;
    SysCOM::variant2COM(cellValue, cellValue.item(_row, _col));
    return cellValue;
}
Старый 21.04.2006, 15:15   #4  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Вот ссылка котороя помогла мне в этом разобратся.
Axapta программирует Excel на VBA
За это сообщение автора поблагодарили: Gustav (1).
Старый 21.04.2006, 15:18   #5  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от Zeratul
...
Через COM делать неохото.
...
Вариант использования классов SysExcel* (они используются в штатном механизме импорта из файлов Excel, включая создание шаблонов) вы рассматриваете?
__________________
С уважением,
glibs®
Старый 21.04.2006, 15:20   #6  
Zeratul is offline
Zeratul
Участник
 
75 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Минск
Цитата:
Сообщение от abv2703
COM cell(int _row, int _col)
{
int ii;
COM cellValue;
;
cellValue = worksheet.cells();
ii = 0;
SysCOM::variant2COM(cellValue, cellValue.item(_row, _col));
return cellValue;
}
Ругается на cellValue = worksheet.cells() - таблица не содержит это поле.
Старый 21.04.2006, 15:30   #7  
abv2703 is offline
abv2703
Участник
 
92 / 22 (1) +++
Регистрация: 05.12.2003
Адрес: Санкт-Петербург, улица Бухарестсткая
X++:
public class ReadFromExcelFile
{
    COM   worksheet;
}

void loadFromFile(Filename _fileName)
{
    ComExcelDocument_RU exl = new ComExcelDocument_RU();
    ;
    if (! exl.open(_fileName)) throw error('?????? ??? ???????? ????? ' + _fileName);
    exl.visible(false);
    worksheet   = exl.getWorkSheet(1);
}
Нямножко можно и самому пошерстить
Старый 21.04.2006, 16:02   #8  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Можно через ODBC.

Объясните начинающему как загрузить данные из Excel? Смотрел форум, но не нашел.

Я выкладывал подробный пример.

С Уважением,
Георгий
Старый 21.04.2006, 23:41   #9  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а еще можно через CSV и класс CommaIO
Старый 26.04.2006, 14:17   #10  
Hans is offline
Hans
Участник
Аватар для Hans
 
108 / 22 (1) +++
Регистрация: 20.10.2005
Тоже работает, месяц назад думал над этим
X++:
fileName = fileNameControl.text();
        fileNameControl.text(fileNameTrim(fileName));
        excel = new COM('Excel.Application');
        wbs = excel.workbooks();
        wb = wbs.open(fileName);
        wss = wb.WorkSheets();
        ws  = wss.Item("Акт");
        while(cycleFlag == "zyclus")
        {
    //cell A
            r               = ws.range("A"+int2str(counter1));
            temp            = r.value2();
            if(temp.toString() != "VT_EMPTY")
                numPos      = temp.double();
            else
            {
                cycleFlag   = "nicht zyclus";
                break;
            }
        }
Старый 27.04.2006, 10:23   #11  
mit is offline
mit
Участник
Аватар для mit
 
386 / 36 (2) +++
Регистрация: 15.01.2003
Адрес: Moscow
лучше и быстрее чем через одбс не получится.
через ком бывают проблемы(последний раз наблюдалось в 2.5, потом не смотрел) вываливается через определенное кол-во загруженных строк - но позволяет выбрать файл
Старый 27.04.2006, 15:00   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ну, "до кучи". Импорт из EXCEL через буфер обмена

PHP код:
static void Imort_from_Excel(Args _args)
{
    
FileName                fileName "C:\\Моя директория\\Мой файл.xls";

    
COMExcelDocument_RU     excel;
    
TextBuffer                         textBuffer;
    
MSOfficeBookMark_RU     bookMark;
    
TransDate                        nextDate;
    
COM                                workRange;
    ;

    
excel = new ComExcelDocument_RU();
    
excel.newFile(fileName,false);

    
// В диапазон включаем только ячейки одного столбца
    
bookMark "A1:A20";

    
// Копируем содержимое диапазона в буфер обмена
    
workRange   excel.findRange(bookMark);
    
workRange.copy();
    
textBuffer  = new TextBuffer();
    
textBuffer.fromClipboard();
    
// Если необходимо выбрать из диапазона только НЕ пустые значения, то
    
while (textBuffer.nextToken())
    {
        
info(textBuffer.token());
    }

    
// Если необходимо выбрать из диапазона ВСЕ значения, включая пустые, то
    
textBuffer.fromClipboard();
    while (
textBuffer.nextToken(false,"\n"))
    {
        
info(strRem(textBuffer.token(),"\r"));
    }


Достоинства - высокая скорость
Недостатки - буфер обмена возвращает данные только в символьном виде. Переводить в нужный тип данных придется вручную
За это сообщение автора поблагодарили: konopello (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Быстрый способ вывода данных в Excel с картинками Zlojbarsuk DAX: Программирование 10 23.10.2008 20:13
Excel, группировки: как программно изменить расположение итоговых данных? CDan DAX: Программирование 5 29.08.2008 18:14
зкспорт данных в Excel exodus DAX: Программирование 3 25.10.2007 05:10
Чтение данных за пределами файла, временная таблица zemlyn DAX: Программирование 0 05.12.2005 18:32

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:22.