Hello clalist,
всемогущий и милостивейший
(С55EE(G); WinXP,98; ExcelXP,2000)
==================================================
1. Объясните вещь, плиз:
Почему
?OLE{'Cells(' & i & ',' & j+1 & ').NumberFormat'} = '"@"'
! это текстовый формат ячейки
работает, а
?OLE{'Cells(' & i & ',' & j+1 & ').NumberFormat'} = '"General"'
или
?OLE{'Cells(' & i & ',' & j+1 & ').NumberFormat'} = '"0.00"'
выдает ошибку:
OLE Automation Error
"Нельзя установить свойство NumberFormat класса Range"
==================================================
2. Я хочу записать в ячейку дробное число
если делаю просто
?OLE{'Cells(' & i & ',' & j+1 & ').Value'} = YVol[m#,j]
то иногда число преобразуется в дату
вопрос - как отключить?
==================================================
3. Я хочу записать в ячейку дробное число
?OLE{'Cells(' & i & ',' & j+1 & ').Value'} = YVol[m#,j]
как обеспечить распознавание числа ^^^^^^^^
как дробного числа с DecimalSeparator = "." и автоматического приведение его к DecimalSeparator, установленному в системе.
Т.е. чтобы из Clarion в Excel число записывалось именно как число и именно с тем DecimalSeparator, который установлен в системе
Вариант (ExcelXP)
?OLE{'Application.DecimalSeparator'} = '"."'
?OLE{'Application.UseSystemSeparators'} = FALSE
Не работает под Excel2000 (ну нет там таких свойств)
Пробую обойти это так:
?OLE{'Cells(' & i & ',' & j+1 & ').NumberFormat'} = '"@"'
?OLE{'Cells(' & i & ',' & j+1 & ').Value'} = YVol[m#,j]
?OLE{'Cells(' & i & ',' & j+1 & ').TextToColumns(DecimalSeparator=".")'}
?OLE{'Cells(' & i & ',' & j+1 & ').NumberFormat'} = '"General"'
но здесь проблема с NumberFormat (см. Выше) (оставить в том виде что есть (текстовом) нельзя, так как на его основе не строятся ChartObjects)
Посоветуйте, плиз: как надо правильно записывать в ячейки Excel дробные числа независимо от настроек системы
СПАСИБО
--
Best regards,
Ivan mailto:shkmail@inbox.ru
Написал: ClaList(2)
[OLE] [Excel] Установка формата ячейки
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
елки-палки
ну ответьте хоть что-нибудь по теме
Ведь знаете, а молчите (
--
Best regards,
Ivan
ГОСПОДА КЛАРИОНИСТЫ!
Если не поможете, начну о вас плохо думать!!!
помогите, плиз...
--
Best regards,
Ivan
(Добавление)
Добрый день!
Раз никто не отвечает, то либо лениво писать, либо некогда. Зачем сразу "плохо думать"
От себя: Конкретно ручками писать работу с Excel через OLE не писал.
Сразу стал писать используя OfficeTemplate. Там это без проблем, например:
MSExcelStatistics.SetNumberFormat('#,##0.00')
С уважением Мартюшев Леонид
mailto:leonid@opfr.komi.com
---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Написал: ClaList(2)
ну ответьте хоть что-нибудь по теме
Ведь знаете, а молчите (
--
Best regards,
Ivan
ГОСПОДА КЛАРИОНИСТЫ!
Если не поможете, начну о вас плохо думать!!!
помогите, плиз...
--
Best regards,
Ivan
(Добавление)
Добрый день!
Раз никто не отвечает, то либо лениво писать, либо некогда. Зачем сразу "плохо думать"
От себя: Конкретно ручками писать работу с Excel через OLE не писал.
Сразу стал писать используя OfficeTemplate. Там это без проблем, например:
MSExcelStatistics.SetNumberFormat('#,##0.00')
С уважением Мартюшев Леонид
mailto:leonid@opfr.komi.com
Ой, как страшно .... Глянь в MSDN функцию GetLocaleInfo.Если не поможете, начну о вас плохо думать!!!
---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Написал: ClaList(2)
Да при чем тут это?Глянь в MSDN функцию GetLocaleInfo.
Мне не нужно менять установки в системе.
Мне нужно только
1. Правильно вывести число с десятичной точкой в Excel
2. Задать числовой формат ячейки в Excel
подробности - в предыдущих сообщениях
--
Best regards,
Ivan
Я не понял, что следующий код не работает?:
Selection.NumberFormat = "0.00"
С уважением, Ставич Олег
Укрсиббанк г.Харьков
oldstav@ukrsibbank.com
(Добавление)
Если правильно понял то проблема десятичной точки тогда
Format(FSN:SNMBR,@n5`2)
Меняет точку на запятую
Liudvikas Jagucanskis <lwj@wireless.lt>
Написал: ClaList(2)
СПАСИБО... информация ценнаяПроблем не было...пока
Только вот как тогда быть, если какой-то пользователь установил в качестве десятичного разделителя не запятую (по умолчанию), а точку?
В случае, когда в качестве системного десятичного разделителя установлена запятая.Selection.NumberFormat = "0.00"
НЕ работает вот что
?OLE{'Selection.NumberFormat'} = '"0.00"'
выдает ошибку:
OLE Automation Error
"Нельзя установить свойство NumberFormat класса Range"
и если делать:
Код: Выделить всё
?OLE{'Selection.NumberFormat'} = '"0,00"'
^^^^^^^
и наоборот: использовать "0,00", когда в системе разделителем является точка, тоже нельзя. Ошибки при работе нет, но вот данные в Excel искажаются.
то есть что получается: при записи NumberFormat необходимо еще и проверять: какой разделитель установлен в системе и ручками формировать либо "0,00", либо "0.00" ?
объясните, плиз, я все правильно понимаю????
СПАСИБО
Но ведь должно работать и через OLE!MSExcelStatistics.SetNumberFormat('#,##0.00')
А почему именно такая форма шаблона формата?
#,##0.00
ведь если в системе по умолчанию стоит в качестве десятичного разделителя запятая, то и формат определяется как
# ###0,00
а знака для разделителя тысяч в Excel вообще нет - пробел вместо него или же Ваш OfficeTemplate использует свой собственный формат, а потом всю "грязную работу" делает сам - подстраивается под настройки системы?
у Вас в настройках системы какой десятичный разделитель установлен?
(и еще если можно: какой Excel, какая Windows?)
--
Best regards,
Ivan
(Добавление)
Я тут покопался малость и вот что выяснил:
- в случае, когда в качестве системного десятичного разделителя установлена запятая.?OLE{'Cells(' & i & ',' & j+1 & ').NumberFormat'} = '"0.00"'
выдает ошибку:
OLE Automation Error
"Нельзя установить свойство NumberFormat класса Range"
Ошибки при работе нет, но вот данные в Excel искажаются.и если делать:
то все работает!!!!Код: Выделить всё
?OLE{'Cells(' & i & ',' & j+1 & ').NumberFormat'} = '"0,00"' ^^^^^^^
и наоборот: использовать "0,00", когда в системе разделителем является точка, тоже нельзя.
то есть что получается: при записи NumberFormat необходимо еще и проверять: какой разделитель установлен в системе и ручками формировать либо "0,00"
либо "0.00" ?????
объясните, плиз, я все правильно понимаю????
Тогда почему в коде VBA (в макросе Excel) стоит именно "0.00"????
Подскажите: как определить какой символ используется в качестве десятичного разделителя? Я так понимаю это через API делать надо?
Приведите пример вызова функции API в Clarion.
СПАСИБО
--
Best regards,
Ivan
Написал: ClaList(2)
Ну почему бы самому не написать 1 раз функцию, чтоб потом ее пользовать в каждом проекте?
format_str = '"0' & sys:get_decimal_divider & '00"'
--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836
дык я с удовольствием
знал бы я как к ней подступиться
это и имеется ввиду под функцией?
а почему "sys:" вначале?
--
Best regards,
Ivan
Ну что ребята, так сложно мс-дэ-эну почитать?
где конкретно тебя должно интересовать 4 поле сверху
Best regards,
Andrew Listiev
Work mailto:andrewl@inbox.lv
Home mailto:gidravlic@mhm.lv
ICQ UID: 169357390
MS Messenger: werdna_werdna@hotmail.com
О-о-о, сенкс, об этой функции не знал!
MSDN:
GetLocaleInfo
только я не знаю, который из этих двух нужен. вероятнее, второй:
LOCALE_SDECIMAL - Character(s) used as the decimal separator.
LOCALE_SMONDECIMALSEP - Character(s) used as the monetary decimal separator.
--
Best regards,
Maxim Yemelyanov
Написал: ClaList(2)
format_str = '"0' & sys:get_decimal_divider & '00"'
--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836
дык я с удовольствием
знал бы я как к ней подступиться
это что за выражение???format_str = '"0' & sys:get_decimal_divider & '00"'
это и имеется ввиду под функцией?
а почему "sys:" вначале?
--
Best regards,
Ivan
Ну что ребята, так сложно мс-дэ-эну почитать?
Код: Выделить всё
int GetNumberFormat(
LCID Locale, // locale
DWORD dwFlags, // options
LPCTSTR lpValue, // input number string
CONST NUMBERFMT *lpFormat, // formatting information
LPTSTR lpNumberStr, // output buffer
int cchNumber // size of output buffer
);
тебя должен интересовать lpFormat указатель на структуру
typedef struct _numberfmt {
UINT NumDigits;
UINT LeadingZero;
UINT Grouping;
LPTSTR lpDecimalSep;
LPTSTR lpThousandSep;
UINT NegativeOrder;
} NUMBERFMT, *LPNUMBERFMT;
Best regards,
Andrew Listiev
Work mailto:andrewl@inbox.lv
Home mailto:gidravlic@mhm.lv
ICQ UID: 169357390
MS Messenger: werdna_werdna@hotmail.com
О-о-о, сенкс, об этой функции не знал!
MSDN:
GetLocaleInfo
только я не знаю, который из этих двух нужен. вероятнее, второй:
LOCALE_SDECIMAL - Character(s) used as the decimal separator.
LOCALE_SMONDECIMALSEP - Character(s) used as the monetary decimal separator.
правило именования функций. sys: - имеющие прямое отношение к системе.а почему "sys:" вначале?
--
Best regards,
Maxim Yemelyanov
Написал: ClaList(2)