| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Hello All! 
		
		
		
		
		
		
		
	Форматирование числа в ячейке Excel из Аксапты... 1-я проблема в том, что если в Regional Options "десятичная точка" - символ запятой, то не работает формат, к примеру, "###0.00"; если же символ точки, не работает, соответственно, "###0,00". Выяснить, что у пользователя в кач-ве десятичной точки - проблематично. Не знаю, есть ли соотв. API-ф-ция. Другого рода проблема - с условным форматированием. Надо, к примеру, скрыть нули. Пишем формат "[=0]#;###0.00". Прекрасно работает c Excel 2000 (с правильно установленной дес. точкой), но возвращает ошибку в Excel XP... Версию Excel у пользователя узнать могу через .version(). Но что толку, если в самом Excel'е XP такой формат работает, а из Аксапты - нет! Знание того, русская ОС или нет, не поможет, т. к. Reg. Options можно корёжить как угодно, создавая самые дикие сочетания дес. точек, разделителей и т. п. Для работы с Excel использую COMExcelDocument_RU. Формат посылаю так: COM comRange; comRange = this.findRange(ComExcelDocument_RU::numToNameCell(col, row)); if (comRange) { try { comRange.numberFormat("#0.00"); ........... --- Waiting for an answer like a nightingale for the summer...  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			предложение..
			 
			
			Решение, корявое конечно, но все же: 
		
		
		
		
		
		
			Определяй, если случилась ошибка - то включай другой формат.  
		
				__________________ 
		
		
		
		
	Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Это-то понятно... Если выдаётся ошибка, такой метод работает. Но если просто вставляются неправильно сформатированные значения, а ошибки нет... 
		
		
		
		
		
		
		
	Пример: отправляю число 10000.55, вставляется что-то вроде 100.00. Такие вещи не отловишь. Разве что, вставив, тут же считать и сравнить с тем, что отослал - но файл-то ещё не сохранён - возьмётся ли значение? Да и пока хотелось бы попроще метод найти. --- Ещё 10000 вёдер, и функциональный ключик у нас в кармане... (с) Дуремар  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Вроде бы нашёл решение... 
		
		
		
		
		
		
		
	Делается с использованием International - свойства приложения Excel. International(3) - это как раз десятичная точка. См. помощь по VB. Пришлось, правда, использовать дополнительный класс DVP_ComExcelDocument_RU, где есть соотв. метод, и открывать пустой файл (только на время определения локальных установок). Я-то работаю с ComExcelDocument_RU, мне вышеупомянутый класс больше ни для чего не нужен (там нет других, нужных мне методов). Вот такую ф-цию накропал: #define.xlDecimalSeparator(3) // somebody, 27.01.04 // возвращает символ десятичной точки из локальных настроек (обычно точка или запятая) str decimalPointChar() { DVP_ComExcelDocument_RU dVP_ComExcelDocument_RU; str ret; ; dVP_ComExcelDocument_RU = new DVP_ComExcelDocument_RU(); dVP_ComExcelDocument_RU.newFile(""); dVP_ComExcelDocument_RU.visible(false); ret = dVP_ComExcelDocument_RU.international(#xlDecimalSeparator).bstr(); dVP_ComExcelDocument_RU.closeDocument(); return ret; } В принципе так можно вытащить любую рег. настройку. DVP_ComExcelDocument_RU возвращает m_comApplication.International(_parameter), где m_comApplication - это COM родительского класса ComOfficeDocument_RU. Видимо, можно сделать и грамотнее, чтобы не пугать пользователя появившимся на долю секунды пустым XLS-файлом (visible до инициализации, к сожалению, не вызовешь)... 2-й вариант решения - просто вбить соотв. форматы в шаблон. Но опять же - не факт, что сложный шаблон (с условиями, например) будет работать в другой версии Office или с другими рег. настройками. --- Axapta is my friend, but truth is more of value...  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У меня нет такого класса DVP_ComExcelDocument_RU. 
		
		
		
		
		
		
		
	?? А нельзя этот десятичный разделитель брать прямо из самой аксапты? тут же они тоже используются, а значит и определяются.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			за найденное решение.  
		
		
		
		
		
		
		
	было сэкономлено несколько часов работы  
		 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Функция strFmt() конвертирует число в строку, используя региональные настройки операционной системы. 
		
		
		
		
		
		
		
	PHP код: 
	
			
	Если надо скрыть нули, то проще вообще не посылать значение в ячейку. Нет значения - нечего отображать.  | 
| 
	
 |