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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.01.2013, 12:04   #1  
Andrux is offline
Andrux
Участник
Axapta Retail User
 
263 / 17 (1) ++
Регистрация: 29.05.2007
Сделайте в Excel замену в цифровых ячейках символа "." на символ "," (ctrl+H). Установите формат ячеек - Общий. И читайте по типам: bStr, double, int
Старый 25.01.2013, 12:08   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Попробуйте принудительно "дернуть" значение ячейки после наложения на нее формата "Текстовый" (выражаюсь на VBA):

Range("A1").Value2 = "'" & Range("A1").Value2 (это известная операция добавление ведущего апострофа)

или так

Range("A1").Value2 = Range("A1").Value2 & "" (здесь просто пустая строка добавляется)

Во всяком случае, функция СУММ реагирует на такие изменения.

Ещё у ячейки есть свойство Range("A1").Text, но с ним надо осторожно, так как оно зависит от настроек отображения, например, от текущей ширины колонки.

Последний раз редактировалось Gustav; 25.01.2013 в 12:11.
За это сообщение автора поблагодарили: mazzy (2).
Старый 25.01.2013, 13:50   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Gustav Посмотреть сообщение
Попробуйте принудительно "дернуть" значение ячейки после наложения на нее формата "Текстовый" (выражаюсь на VBA):

Range("A1").Value2 = "'" & Range("A1").Value2 (это известная операция добавление ведущего апострофа)

или так

Range("A1").Value2 = Range("A1").Value2 & "" (здесь просто пустая строка добавляется)
Если это делать на стороне аксапты, то получается что в качестве аргумента функции COM.Value2() я должен передать результат конкатенации его же значения с апострофом или пустой строкой, которое я и немогу получить. Замкнутый круг получается
"Чтобы продать что-нибудь ненужное, нужно сначала купить что-нибудь ненужное, а у нас денег нет"

Цитата:
Сообщение от Gustav Посмотреть сообщение
Ещё у ячейки есть свойство Range("A1").Text, но с ним надо осторожно, так как оно зависит от настроек отображения, например, от текущей ширины колонки.
К сожалению и это свойство не работает если фактически тип у ячейки значения COMVariantType::VT_R8

На самом деле непонятно откуда Excel берёт информацию о типе ячейки, потому что отображает он её корректно в текстовом виде, а хранит получается что как число
Старый 25.01.2013, 14:18   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Если это делать на стороне аксапты, то получается что в качестве аргумента функции COM.Value2() я должен передать результат конкатенации его же значения с апострофом или пустой строкой, которое я и немогу получить. Замкнутый круг получается
Да, пожалуй... А попробуйте сделать это через MS Script Control ( Поговорим об MS Script Control ). Это получится так же, как и на VBA в самом Excel. И можно даже и саму строку получить уже как настоящую строку из Script Control'а.
Старый 25.01.2013, 16:40   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
На самом деле непонятно откуда Excel берёт информацию о типе ячейки, потому что отображает он её корректно в текстовом виде, а хранит получается что как число
Там все хитро, но суть в том, что строковые значения хранятся в отдельной от ячеек области - Shared Strings. В самих же ячейках, при этом, сохраняется ссылка на значение в этой области (по факту - индекс в массиве строк)

Нестроковые значения хранятся непосредственно в ячейках и их тип определяется самими данными.

Когда меняется формат ячейки, значение в ней хранящееся не переносится в эту область, а остается в ячейке (по сути, меняется лишь отображение этих данных, что хорошо видно на примере дат).

Если тип ячейки текстовый или указан перед данными апостроф, то вносимое значение всегда будет сохраняться в разделяемой области.

PS
Для получения текстового значения ячейки независимо от типа хранимых в ней данных можно пользоваться функцией Text() вместо Value() или Value2()
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (10).
Старый 25.01.2013, 17:41   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
про .Text()
Цитата:
Сообщение от AndyD Посмотреть сообщение
Для получения текстового значения ячейки независимо от типа хранимых в ней данных можно пользоваться функцией Text() вместо Value() или Value2()
Цитата:
Сообщение от Gustav Посмотреть сообщение
Ещё у ячейки есть свойство Range("A1").Text, но с ним надо осторожно, так как оно зависит от настроек отображения, например, от текущей ширины колонки.
http://www.excelworld.ru/forum/3-48-27402-16-1349248973
За это сообщение автора поблагодарили: mikki_messer (1).
Старый 25.01.2013, 20:28   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Цитата:
Увеличить ширину колонки перед считыванием.
И нехай подавится
__________________
Axapta v.3.0 sp5 kr2
Старый 25.01.2013, 12:10   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Andrux Посмотреть сообщение
Сделайте в Excel замену в цифровых ячейках символа "." на символ "," (ctrl+H).
Не надо!
Если уж корежить исходник, то добавьте апостроф перед текстом.
В Экселе апостроф в самом начале строки означает, что дальше пойдет текст.

но лучше исходник не корежить.
Теги
excel, импорт, импорт из excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Чтение ИЗ Excel (а не запись в него) Mechanizm DAX: Программирование 10 04.07.2004 11:50
Чтение Excel-ячейки в Аксапте (2.5) через COM AKIS DAX: Программирование 3 25.03.2004 20:18

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

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

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