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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2007, 19:11   #1  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Excel: не грузятся копейки
Не смогла найти тему

Вот что пишу
X++:
  Amount      =  str2int(global::strReplace(excelDocument.getCellValue(ComExcelDocument_RU::numToNameCell(5,_excelRow), workSheet),',','.'));
а копеек все равно нет. Ячейка отформатирована как число без разделителя.
Старый 19.09.2007, 19:30   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA

Возможно виновата функция str2int?
Попробуйте str2num
Старый 19.09.2007, 22:17   #3  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
Спасибо, я функции перепутала. А можно все же обойтись без таких сложностей и что-то придумать в Экеле, чтобы раздиителем была точка, а не запятая.
Старый 20.09.2007, 07:14   #4  
farlander is offline
farlander
MCTS
Аватар для farlander
MCBMSS
Ex AND Project
 
282 / 27 (1) +++
Регистрация: 27.10.2006
Адрес: Россия
Цитата:
Сообщение от Arahnid Посмотреть сообщение
чтобы раздиителем была точка, а не запятая.
Панель управления // Язык и рег-е стандарты // Рег-е параметры - Кнопка Настройка
__________________
farlander.ru
Старый 20.09.2007, 11:30   #5  
Arahnid is offline
Arahnid
Участник
 
880 / 60 (4) ++++
Регистрация: 09.08.2005
Адрес: Moscow
это я понимаю, но боюсь за другие программы, вдруг они не рассчитаны на точку или все должно быть хорошо?
Старый 25.09.2007, 11:01   #6  
farlander is offline
farlander
MCTS
Аватар для farlander
MCBMSS
Ex AND Project
 
282 / 27 (1) +++
Регистрация: 27.10.2006
Адрес: Россия
Цитата:
Сообщение от Arahnid Посмотреть сообщение
это я понимаю, но боюсь за другие программы, вдруг они не рассчитаны на точку или все должно быть хорошо?
Не знаю как другие программы... проблемы будут с файлами Экселя, сформированными с разделителем запятой... если у вас в настройках будет точка, то значения будут пониматься Экселей как строка так что имхо такое решение не вариант...
__________________
farlander.ru
Старый 25.09.2007, 14:11   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Arahnid Посмотреть сообщение
это я понимаю, но боюсь за другие программы, вдруг они не рассчитаны на точку или все должно быть хорошо?
Для справки.

Если в региональных настройках системы в качестве разделителя целой и дробной части указана точка, а не запятая, то при попытке создать Com-объект экземпляра Excel 2003 возникнет сообщение об ошибке вроде "Не хватает памяти". Хотя сам Com-объект и загрузится.

Хотя в самом Excel 2003 уже появилась возможность "локальных" настроек.

Сервис \ Параметры \ закладка "Международные" \ снять птичку "Использовать системные разделители" и настроить свои символы.


Но вообще-то, лучше этого не делать, а для передачи чисел в Excel использовать функцию StrFmt()

X++:
strFmt("%1",123.45)
Эта функция как раз использует системные настройки для преобразования любого типа в строку. Можно и дату так конвертировать.
Старый 20.09.2007, 11:38   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
А если попробовать считать в какую то строковую переменную, а потом в ней заменить точку на запятую, и тока потом переводить в деньги. Я как то так извращался, мне помогло.
Старый 25.09.2007, 14:59   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Sada Посмотреть сообщение
А если попробовать считать в какую то строковую переменную, а потом в ней заменить точку на запятую, и тока потом переводить в деньги. Я как то так извращался, мне помогло.

Там еще бывает проблема с разделителем тысяч. Если он является пробелом, то str2int может глючить - при переводе учитывать только цифры до первого пробела, так что несколько миллионов могут легко превратиться в не сколько единиц.
Старый 20.09.2007, 11:40   #10  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Что то типа
X++:
s = this.ReadValue(row, 3);
        s = strReplace(s, ',','.');
        Table.Qty             = str2Num(s);
X++:
str ReadValue(int  _row,
              int  _col)
{
    COM         cell    = new COM();
    COMVariant  x       = new COMVariant();
    ;
    cell    = COM::createFromVariant(cells.item(_row, _col));
    x       = cell.text();

    return x.bStr();
}
Естесна там много чего инициализируется и тд и тп, но это так сказать для общего пониманимания...

Последний раз редактировалось Sada; 20.09.2007 в 11:43.
Старый 25.09.2007, 14:12   #11  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Может имеет смысл положить в глобал такую функцию ?

X++:
  // стандартная функция str2num() криво обрабатывает строки с запятой в качестве
  // десятичной точки - просто отбрасывает дробную часть
  // видимо аксапта ожидает точку в качестве разделителя разрядов.

  // этот метод нормально справляется с запятой
static real GRD_Str2Num(str     s)
{
    int         pos;
    real        locAmount;
    #define.from(',')
    #define.to('.')
    ;

    pos = 0;
    do
    {
        pos = StrScan(s, #from , pos + 1, strlen(s));
        if (pos)
        {
            //s = StrDel(s, pos, strLen(#from));
            s = StrPoke(s, #to, pos);
        }

    } while(pos != 0);

    s = strRem(s, ' ');  // убрали еще всякие долбанные разделители, например пробелы, которые любит Excel ставить pkoz 27.02.2007

    locAmount = Str2Num(s);
    return locAmount;
}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47

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

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

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