|  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 | 
| Участник | 
			
			это я понимаю, но боюсь за другие программы, вдруг они не рассчитаны на точку или все должно быть хорошо?
		 | 
|  | 
|  20.09.2007, 11:38 | #6 | 
| Программатор | 
			
			А если попробовать считать в какую то строковую переменную, а потом в ней заменить точку на запятую, и тока потом переводить в деньги. Я как то так извращался, мне помогло.
		 | 
|  | 
|  20.09.2007, 11:40 | #7 | 
| Программатор | 
			
			Что то типа 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, 11:01 | #8 | 
| MCTS | Цитата:  так что имхо такое решение не вариант... 
				__________________ farlander.ru | 
|  | 
|  25.09.2007, 14:11 | #9 | 
| Участник | Цитата: Если в региональных настройках системы в качестве разделителя целой и дробной части указана точка, а не запятая, то при попытке создать Com-объект экземпляра Excel 2003 возникнет сообщение об ошибке вроде "Не хватает памяти". Хотя сам Com-объект и загрузится. Хотя в самом Excel 2003 уже появилась возможность "локальных" настроек. Сервис \ Параметры \ закладка "Международные" \ снять птичку "Использовать системные разделители" и настроить свои символы. Но вообще-то, лучше этого не делать, а для передачи чисел в Excel использовать функцию StrFmt() X++: strFmt("%1",123.45) | 
|  | 
|  25.09.2007, 14:12 | #10 | 
| Участник | 
			
			Может  имеет смысл положить в глобал такую функцию ? 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; } | 
|  | 
|  25.09.2007, 14:59 | #11 | 
| Участник | Цитата: Там еще бывает проблема с разделителем тысяч. Если он является пробелом, то str2int может глючить - при переводе учитывать только цифры до первого пробела, так что несколько миллионов могут легко превратиться в не сколько единиц. | 
|  |