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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.01.2004, 14:02   #1  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Регистрация: 30.04.2003
Адрес: Москва
? формат числа в Excel (+с условием)
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...
Старый 26.01.2004, 17:37   #2  
bucken is offline
bucken
Участник
Аватар для bucken
 
259 / 12 (1) ++
Регистрация: 04.09.2003
Адрес: Москва
предложение..
Решение, корявое конечно, но все же:
Определяй, если случилась ошибка - то включай другой формат.
__________________
Уточните значение слов и вы избавите человечество от половины его заблуждений. (Рене Декарт) / Axapta 2.5
Старый 27.01.2004, 11:08   #3  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Регистрация: 30.04.2003
Адрес: Москва
->
Это-то понятно... Если выдаётся ошибка, такой метод работает. Но если просто вставляются неправильно сформатированные значения, а ошибки нет...

Пример: отправляю число 10000.55, вставляется что-то вроде 100.00. Такие вещи не отловишь. Разве что, вставив, тут же считать и сравнить с тем, что отослал - но файл-то ещё не сохранён - возьмётся ли значение? Да и пока хотелось бы попроще метод найти.

---
Ещё 10000 вёдер, и функциональный ключик у нас в кармане... (с) Дуремар
Старый 27.01.2004, 16:53   #4  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Регистрация: 30.04.2003
Адрес: Москва
Lightbulb
Вроде бы нашёл решение...

Делается с использованием 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...
Старый 21.04.2004, 12:32   #5  
lexx is offline
lexx
Участник
Аватар для lexx
 
20 / 10 (1) +
Регистрация: 03.02.2004
Адрес: Moscow
У меня нет такого класса DVP_ComExcelDocument_RU.
??
А нельзя этот десятичный разделитель брать прямо из самой аксапты?
тут же они тоже используются, а значит и определяются.
Старый 21.04.2004, 13:51   #6  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
PHP код:
WinAPI::getUserLocaleDecimalSeparator() 
Старый 18.05.2004, 09:12   #7  
NeveB is offline
NeveB
Участник
 
60 / 16 (1) ++
Регистрация: 14.11.2003
Адрес: Mosсow
Thumbs up ОГРОМНОЕ СПАСИБО
за найденное решение.
было сэкономлено несколько часов работы
Старый 18.05.2004, 11:33   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Функция strFmt() конвертирует число в строку, используя региональные настройки операционной системы.

PHP код:
info(strFmt('%1',123456.78)) 
Т.е. если ты экспортируешь такую строку в Excel, то она будет воспринята как число (!). По умолчанию, формата "# ###.00" Никаких проблем с точками и запятыми.

Если надо скрыть нули, то проще вообще не посылать значение в ячейку. Нет значения - нечего отображать.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Как изменить формат ячейки в EXCEL demon46 DAX: Программирование 21 27.01.2010 11:29
[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, время: 07:15.