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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.04.2008, 15:00   #1  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Как изменить формат ячейки в EXCEL
Доброго всем времени суток!
Сразу прошу прощения, за глуповатый вопрос, но разобраться сам не могу. Я выгружаю данные в EXCEL из справочника номенклатуры, нужно взять штрих-код. В EXCEL ШК визуализируется в виде числа. Подскажите пожалуйста как изменить из АХ формат выводимой ячейки, что бы ШК отображался нужным образом.
Старый 14.04.2008, 15:23   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Выгружайте в Excel через ADO. Там можно явно задавать форматы ячеек и скорость приличная. На форуме много примеров.
Старый 14.04.2008, 15:31   #3  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
А не поделитесь ссылками?
Старый 14.04.2008, 15:32   #4  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Да. А как же быть с форматированием заголовков таблицы, ну там жирным выделить
Старый 14.04.2008, 15:54   #5  
xenikk is offline
xenikk
Axapta Retail User
Аватар для xenikk
Axapta Retail User
 
30 / 10 (1) +
Регистрация: 20.06.2007
Адрес: Moscow
ох, уж этот Excel....
Много вариантов.... Каким способом выводите данные?
Сколько строк примерно...
__________________
Романтик..
Старый 14.04.2008, 15:56   #6  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Немного "допишите" класс ComExcelDocument_RU:

Форматирование столбца:
X++:
void formatColumn(int _workSheet, int _column, str _format)
{
    COM         comWorkSheet;
    COM         comColumns;
    COM         comColumn;
    COMVariant  comColumnVariant;
    ;

    comWorkSheet        = this.getWorkSheet(_workSheet);
    comColumns          = comWorkSheet.Columns();
    comColumnVariant    = comColumns.item(_column);
    comColumn           = COM::createFromVariant(comColumnVariant);
    comColumn.NumberFormat(_format);
}
В качестве формата (_format) можно устанавливать форматы:
#,##0.000$ - денежный
[$-FC19]dd mmmm yyyy г/;@ - дата
h:mm;@ - время
0.00% - проценты
# ??/?? - простые дроби 21/25
[<=9999999]###-####;(###) ###-#### - номер телефона
@ - текстовый формат

Подробнее о форматах можно узнать в самом Excel-е, записав макрос со сменой формата ячейки, и посмотрев в нем значение, которое будет предаваться в метод "NumberFormat".

Аналогично для ячеек:
X++:
void formatCells(BookMark _bookMark, str _format, int _workSheet = 1)
{
    COM     comRange;
    ;

    comRange = this.findRange(_bookMark, _workSheet);
    comRange.NumberFormat(_format);
}

Выделение жирным шрифтом:
X++:
void setBold(BookMark _bookMark, int _workSheet = 1)
{
    COM     comRange;
    COM     comFont;
    ;

    comRange = this.findRange(_bookMark, _workSheet);
    comFont  = comRange.Font();
    comFont.Bold(true);
}
где _bookMark - это область, шрифт которой Вы хотите сделать жирным.
За это сообщение автора поблагодарили: Poleax (1), demon46 (1), alex55 (1), ZornFire (1).
Старый 14.04.2008, 16:12   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
По-моему, тема эта была полностью раскрыта в коллективном эксперименте по выгрузке в Excel
Поиск сразу ее найдет - там масса примеров с использованием различных методик
За это сообщение автора поблагодарили: demon46 (1).
Старый 14.04.2008, 18:28   #8  
demon46 is offline
demon46
Участник
 
78 / 12 (1) ++
Регистрация: 26.06.2006
Огромнейшее спасибо за очередное раъяснение. Получилось.
Старый 03.12.2009, 12:30   #9  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
Цитата:
Сообщение от PMS Посмотреть сообщение
Аналогично для ячеек:
X++:
void formatCells(BookMark _bookMark, str _format, int _workSheet = 1)
{
    COM     comRange;
    ;

    comRange = this.findRange(_bookMark, _workSheet);
    comRange.NumberFormat(_format);
}
для 2003 экселя это работает, в 2007 вылетает ошибка.
Есть ли какой-то способ для 2007 экселя, точнее для того и другого сразу
Изображения
 
Старый 03.12.2009, 12:59   #10  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Вы точно на одном и том же документе пробуете?
Возможно, что 2007 открыл документ только для чтения, поэтому попытки изменить формат не срабатывают. А так метод отлично работает в любой версии Excel.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 03.12.2009, 16:24   #11  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
да на одном и том же. вылетает ошибка у тех, у кого 2007 стоит
Старый 03.12.2009, 16:32   #12  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
А формат какой задаете, т.е. _format чему равен?
Service Pack офиса какой?
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 03.12.2009, 16:57   #13  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
X++:
  ExcelDocument.setCellFormat(bookmark,"# ##0.00");
MS Office excel 2007 SP1.
У меня стоит 2003 и 2007 все работает.
у тех у кого только 2007 вылетает эта ошибка
Старый 03.12.2009, 18:29   #14  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
По-моему, у тех пользователей, у кого стоит 2007, настроена русская системная локаль с разделителем целой и дробной частей - запятой.
В силу этого этот формат должен выглядеть как # ##0,00 - через запятую.
А у тех, у кого 2003 - английская(и у вас в том числе), так что формат с точкой - прокатывает.
Надо настроить единообразно разделитель либо проверять локаль.
Вообще кучеряво будет, если при формировании формата юзать WinAPI и определять текущий разделитель.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 03.12.2009 в 18:32.
За это сообщение автора поблагодарили: propeller (1).
Старый 04.12.2009, 11:54   #15  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Maximin Посмотреть сообщение
Вообще кучеряво будет, если при формировании формата юзать WinAPI и определять текущий разделитель.
Проще определять текущий разделитель через настройки собственно Excel через метод

m_comApplication.International()

Не знаю, сработает ли это в 2007, но для 2003 в классе ComExcelDocument_RU я добавил такой метод

X++:
// 1
// Возвращает указанную региональную настройку
// Поскольку различные региональные настройки имеют разный тип, то используется контейнер из одного элемента
// Возвожные значения параметра смотри в справке по Visual Basic в Excel на свойство International
// Наиболее нужные
/*
xlDecimalSeparator      = 3 - символ разделитель целой и дробной части
xlThousandsSeparator    = 4 - символ разделитель троек цифр
xlDateSeparator         = 17 - символ разделитель в датах
xlTimeSeparator         = 18 - символ разделитель часов и минут
xlGeneralFormatName     = 26 - строка имени основного формата данных (обычно General)
xl24HourClock           = 33 - true - если часы отображаются в 24 часовом формате, false - если в 12 часовом
xl4DigitYears           = 43 - true - если отображаются 4 знака года, false - если 2
xlDateOrder             = 32 - как отображается дата: 0 - месяц/день/год, 1 - день/месяц/год, 2 - год/месяц/день
*/
container getInternational(int _international)
{
    COMVariant  comInternational;
    container   con = connull();
    ;

    if (m_comApplication)
    {
        try
        {
            comInternational = m_comApplication.International(_international);
            switch (comInternational.variantType())
            {
                case COMVariantType::VT_BOOL:
                {
                    con = conIns(con,1,comInternational.boolean());
                    break;
                }
                case COMVariantType::VT_BSTR:
                {
                    con = conIns(con,1,comInternational.bStr());
                    break;
                }
                case COMVariantType::VT_DATE:
                {
                    con = conIns(con,1,comInternational.date());
                    break;
                }
                case COMVariantType::VT_DECIMAL:
                {
                    con = conIns(con,1,comInternational.decimal());
                    break;
                }
                case COMVariantType::VT_INT:
                {
                    con = conIns(con,1,comInternational.int());
                    break;
                }
            }    // switch (comInternational.variantType())

        }
        catch (Exception::Error || Exception::Internal)
        {
            throw error("Ошибка в функции " + funcname());
        }
    }    // if (m_comApplication)
    return con;
}
Т.е. в методе класса ExcelDocument.setCellFormat() делать анализ текущего символа-разделителя и заменять его в маске шаблона
За это сообщение автора поблагодарили: Maximin (1).
Старый 04.12.2009, 11:59   #16  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Тоже полезный способ.
Но имея уже свои созданные методы в WinAPI, не подумал, о том, что и в Excel тоже есть свои.
И работает не только в Excel.
Вообще, Excel жутко веселая штука, когда заходит речь о локализациях.
Взять хотя бы попытку найти функцию в ячейке из VBA.
Думаете, в русской версии там будет, к примеру, "=ИТОГИ"?
Ничего подобного - "=SUBTOTAL".
А если копнуть в сторону некоторых до сих пор полезных функций из Excel 4 - то там еще весепее.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...
Старый 04.12.2009, 12:08   #17  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Maximin Посмотреть сообщение
Тоже полезный способ.
Но имея уже свои созданные методы в WinAPI, не подумал, о том, что и в Excel тоже есть свои. И работает не только в Excel.
Дело не в этом, а в том, что Excel может перекрыть системные региональные настройки. Т.е., например, в Windows в качестве разделителя стоит точка, но Excel может указать в своих настройках в качестве разделителя запятую.

Как следствие, смотреть системные региональные настройки становится бессмысленно. Они не соответствуют настройкам среды Excel.

Цитата:
Сообщение от Maximin Посмотреть сообщение
Вообще, Excel жутко веселая штука, когда заходит речь о локализациях.
Взять хотя бы попытку найти функцию в ячейке из VBA.
Думаете, в русской версии там будет, к примеру, "=ИТОГИ"?
Ничего подобного - "=SUBTOTAL".
Вы делаете распространенную ошибку, считая что Excel при доступе из пользовательского интерфейса то же самое, что Excel при доступе через COM-интерфейс (VBA). Вообще-то, это, по сути, два разных приложения. Как минимум, разные методы и, соответственно, параметры методов.
Старый 04.12.2009, 12:27   #18  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
Цитата:
Дело не в этом, а в том, что Excel может перекрыть системные региональные настройки. Т.е., например, в Windows в качестве разделителя стоит точка, но Excel может указать в своих настройках в качестве разделителя запятую.

Как следствие, смотреть системные региональные настройки становится бессмысленно. Они не соответствуют настройкам среды Excel.
Неправда ваша. Excel всегда правильно воспримет числа/форматы, введенные в текущей системной локали. Попробуйте. Другое дело, что его настройками можно настроить так, чтобы он понимал и формат с точкой, и формат с запятой. Отображаться будет так, как задано форматом. Но ошибки не будет.

Что же касается
Цитата:
по сути, два разных приложения
то расскажите это разработчикам Excel - они, думаю, будут благодарны за оценку их труда по представлению максимально непротиворечивого API. Не говоря уже о том, что, если разделить понятия, то Excel - это приложение, а вот его VBA(COM) API - лишь ИНТЕРФЕЙС к нему.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 04.12.2009 в 12:29.
Старый 04.12.2009, 12:50   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Maximin Посмотреть сообщение
Неправда ваша. Excel всегда правильно воспримет числа/форматы, введенные в текущей системной локали. Попробуйте.
Пробовл, причем не однократно. Почему-то у меня постоянные проблемы со слишком "умными" пользователями, которые меняют именно настройки Excel, не трогая региональных настроек. Может, у вас какие-то другие пользователи?
Старый 04.12.2009, 12:53   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Maximin Посмотреть сообщение
Вообще, Excel жутко веселая штука, когда заходит речь о локализациях.
Взять хотя бы попытку найти функцию в ячейке из VBA.
Думаете, в русской версии там будет, к примеру, "=ИТОГИ"?
Ничего подобного - "=SUBTOTAL".
Excel здесь не при чем
Строка в Excel
__________________
Axapta v.3.0 sp5 kr2
Теги
ado, excel, программно, форматирование

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Excel, группировки: как программно изменить расположение итоговых данных? CDan DAX: Программирование 5 29.08.2008 18:14
Выравнивание ячейки в excel tnv DAX: Программирование 10 27.09.2006 14:48
формат числа в Excel (+с условием) somebody DAX: Программирование 7 18.05.2004 11:33
Чтение Excel-ячейки в Аксапте (2.5) через COM AKIS DAX: Программирование 3 25.03.2004 20:18
Ячейки Excel YVAS DAX: Программирование 2 05.08.2003 10:00
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:52.