|
14.04.2008, 15:00 | #1 |
Участник
|
Как изменить формат ячейки в EXCEL
Доброго всем времени суток!
Сразу прошу прощения, за глуповатый вопрос, но разобраться сам не могу. Я выгружаю данные в EXCEL из справочника номенклатуры, нужно взять штрих-код. В EXCEL ШК визуализируется в виде числа. Подскажите пожалуйста как изменить из АХ формат выводимой ячейки, что бы ШК отображался нужным образом. |
|
14.04.2008, 15:23 | #2 |
Участник
|
Выгружайте в Excel через ADO. Там можно явно задавать форматы ячеек и скорость приличная. На форуме много примеров.
|
|
14.04.2008, 15:31 | #3 |
Участник
|
А не поделитесь ссылками?
|
|
14.04.2008, 15:32 | #4 |
Участник
|
Да. А как же быть с форматированием заголовков таблицы, ну там жирным выделить
|
|
14.04.2008, 15:54 | #5 |
Axapta Retail User
|
ох, уж этот Excel....
Много вариантов.... Каким способом выводите данные? Сколько строк примерно...
__________________
Романтик.. |
|
14.04.2008, 15:56 | #6 |
Участник
|
Немного "допишите" класс 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); } #,##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); } |
|
|
За это сообщение автора поблагодарили: Poleax (1), demon46 (1), alex55 (1), ZornFire (1). |
03.12.2009, 12:30 | #7 |
Участник
|
Цитата:
Есть ли какой-то способ для 2007 экселя, точнее для того и другого сразу |
|
14.04.2008, 16:12 | #8 |
Участник
|
По-моему, тема эта была полностью раскрыта в коллективном эксперименте по выгрузке в Excel
Поиск сразу ее найдет - там масса примеров с использованием различных методик |
|
|
За это сообщение автора поблагодарили: demon46 (1). |
14.04.2008, 18:28 | #9 |
Участник
|
Огромнейшее спасибо за очередное раъяснение. Получилось.
|
|
03.12.2009, 12:59 | #10 |
NavAx
|
Вы точно на одном и том же документе пробуете?
Возможно, что 2007 открыл документ только для чтения, поэтому попытки изменить формат не срабатывают. А так метод отлично работает в любой версии Excel.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
03.12.2009, 16:24 | #11 |
Участник
|
да на одном и том же. вылетает ошибка у тех, у кого 2007 стоит
|
|
03.12.2009, 16:32 | #12 |
NavAx
|
А формат какой задаете, т.е. _format чему равен?
Service Pack офиса какой?
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
03.12.2009, 16:57 | #13 |
Участник
|
X++: ExcelDocument.setCellFormat(bookmark,"# ##0.00"); У меня стоит 2003 и 2007 все работает. у тех у кого только 2007 вылетает эта ошибка |
|
03.12.2009, 18:29 | #14 |
NavAx
|
По-моему, у тех пользователей, у кого стоит 2007, настроена русская системная локаль с разделителем целой и дробной частей - запятой.
В силу этого этот формат должен выглядеть как # ##0,00 - через запятую. А у тех, у кого 2003 - английская(и у вас в том числе), так что формат с точкой - прокатывает. Надо настроить единообразно разделитель либо проверять локаль. Вообще кучеряво будет, если при формировании формата юзать WinAPI и определять текущий разделитель.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... Последний раз редактировалось Maximin; 03.12.2009 в 18:32. |
|
|
За это сообщение автора поблагодарили: propeller (1). |
04.12.2009, 11:54 | #15 |
Участник
|
Цитата:
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; } |
|
|
За это сообщение автора поблагодарили: Maximin (1). |
04.12.2009, 11:59 | #16 |
NavAx
|
Тоже полезный способ.
Но имея уже свои созданные методы в WinAPI, не подумал, о том, что и в Excel тоже есть свои. И работает не только в Excel. Вообще, Excel жутко веселая штука, когда заходит речь о локализациях. Взять хотя бы попытку найти функцию в ячейке из VBA. Думаете, в русской версии там будет, к примеру, "=ИТОГИ"? Ничего подобного - "=SUBTOTAL". А если копнуть в сторону некоторых до сих пор полезных функций из Excel 4 - то там еще весепее.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... |
|
04.12.2009, 12:08 | #17 |
Участник
|
Цитата:
Как следствие, смотреть системные региональные настройки становится бессмысленно. Они не соответствуют настройкам среды Excel. Вы делаете распространенную ошибку, считая что Excel при доступе из пользовательского интерфейса то же самое, что Excel при доступе через COM-интерфейс (VBA). Вообще-то, это, по сути, два разных приложения. Как минимум, разные методы и, соответственно, параметры методов. |
|
04.12.2009, 12:53 | #18 |
Участник
|
__________________
Axapta v.3.0 sp5 kr2 |
|
04.12.2009, 12:27 | #19 |
NavAx
|
Цитата:
Дело не в этом, а в том, что Excel может перекрыть системные региональные настройки. Т.е., например, в Windows в качестве разделителя стоит точка, но Excel может указать в своих настройках в качестве разделителя запятую.
Как следствие, смотреть системные региональные настройки становится бессмысленно. Они не соответствуют настройкам среды Excel. Что же касается Цитата:
по сути, два разных приложения
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты... Последний раз редактировалось Maximin; 04.12.2009 в 12:29. |
|
04.12.2009, 12:50 | #20 |
Участник
|
Пробовл, причем не однократно. Почему-то у меня постоянные проблемы со слишком "умными" пользователями, которые меняют именно настройки Excel, не трогая региональных настроек. Может, у вас какие-то другие пользователи?
|
|