|
![]() |
#1 |
Участник
|
Excel: не грузятся копейки
Не смогла найти тему
Вот что пишу X++: Amount = str2int(global::strReplace(excelDocument.getCellValue(ComExcelDocument_RU::numToNameCell(5,_excelRow), workSheet),',','.')); |
|
![]() |
#2 |
Участник
|
![]() Возможно виновата функция str2int? Попробуйте str2num ![]() |
|
![]() |
#3 |
Участник
|
Спасибо, я функции перепутала. А можно все же обойтись без таких сложностей и что-то придумать в Экеле, чтобы раздиителем была точка, а не запятая.
|
|
![]() |
#4 |
MCTS
|
Панель управления // Язык и рег-е стандарты // Рег-е параметры - Кнопка Настройка
__________________
farlander.ru |
|
![]() |
#5 |
Участник
|
это я понимаю, но боюсь за другие программы, вдруг они не рассчитаны на точку или все должно быть хорошо?
|
|
![]() |
#6 |
MCTS
|
Цитата:
![]()
__________________
farlander.ru |
|
![]() |
#7 |
Участник
|
Цитата:
Если в региональных настройках системы в качестве разделителя целой и дробной части указана точка, а не запятая, то при попытке создать Com-объект экземпляра Excel 2003 возникнет сообщение об ошибке вроде "Не хватает памяти". Хотя сам Com-объект и загрузится. Хотя в самом Excel 2003 уже появилась возможность "локальных" настроек. Сервис \ Параметры \ закладка "Международные" \ снять птичку "Использовать системные разделители" и настроить свои символы. Но вообще-то, лучше этого не делать, а для передачи чисел в Excel использовать функцию StrFmt() X++: strFmt("%1",123.45) |
|
![]() |
#8 |
Программатор
|
А если попробовать считать в какую то строковую переменную, а потом в ней заменить точку на запятую, и тока потом переводить в деньги. Я как то так извращался, мне помогло.
|
|
![]() |
#9 |
Участник
|
Цитата:
Там еще бывает проблема с разделителем тысяч. Если он является пробелом, то str2int может глючить - при переводе учитывать только цифры до первого пробела, так что несколько миллионов могут легко превратиться в не сколько единиц. |
|
![]() |
#10 |
Программатор
|
Что то типа
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. |
|
![]() |
#11 |
Участник
|
Может имеет смысл положить в глобал такую функцию ?
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; } |
|