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