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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.04.2012, 16:34   #1  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Значение в ячейке Excel
Здравствуйте уважаемые участники форума!
Сразу к вопросу: Формирую отчёт в Excel с помощью буфера и временной таблицы.
Одно из полей таблицы содержит текст проводки. Текст проводок во всех строках практически одинаков, только вот последние 3 строки "ведут себя не корректно" - надпись растягивается по всем следующим столбцам, и создается чувство что в тексте есть какой то символ который заставляет выводить данные из следующих полей с новой строки!
Кто чем может помочь??? Буду очень благодарен, а то уже не один день пытаюсь решить этот вопрос!
Старый 24.04.2012, 16:54   #2  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
На всякий случай приведу конец строки: "от 01.11.10 за период с 26.10.2011-25.11.2011"
После этого Excel начинает выводить значение из следующего поля с новой строки!
Старый 24.04.2012, 17:21   #3  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Проверьте строку на спецсимволы, вероятно в конце строки есть ".
За это сообщение автора поблагодарили: JuniorAx (1).
Старый 25.04.2012, 10:19   #4  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от raz Посмотреть сообщение
Проверьте строку на спецсимволы, вероятно в конце строки есть ".
Причём когда в Windows XP открываешь форму проводок и ищешь записи с такими символами (возврат каретки, горизонтальная табуляция и т.д.) в тексте проводки, то эти символы хорошо заметны - отображаются в виде непонятных квадратиков. А в Windows 7 они просто не отображаются и человек сидит и не понимает в чём же дело. У него даже нет возможности удалить такие символы из поля, приходится за помощью обращаться к пользователям Windows XP.
__________________
Дмитрий
За это сообщение автора поблагодарили: JuniorAx (1).
Старый 25.04.2012, 10:30   #5  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Добрый день! Спасибо raz и Damn!
Вчера проверил строку на спец символы, и действительно ни чего не нашёл (Win 7), а сегодня СЛУЧАЙНО сделал то же самое на компьютере с Win XP и о чудо :-) вижу в конце строки некий квадратик! Зашёл сюда чтобы сказать спасибо за совет raz и вижу сообщение от Damn, вообщем огромное вам спасибо!
Я правильно понимаю что теперь мне надо составить некий список спец символов и искать такие в конце строки, и если появляются, удалять их? Где можн овзять полный список этих спец символов?
Старый 25.04.2012, 10:59   #6  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Где можн овзять полный список этих спец символов?
Думаю что полный список можно взять здесь http://ascii.org.ru/ascii.pdf
А вот где взять именно ту часть этого списка, которая не отображается в Windows 7, я не знаю.
__________________
Дмитрий
Старый 25.04.2012, 11:18   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Я правильно понимаю что теперь мне надо составить некий список спец символов и искать такие в конце строки, и если появляются, удалять их?
Можно наоборот, составить список корректных символов и оставлять только их
X++:
#Evat_NL
strkeep(myStr, #ISO8859_1);
За это сообщение автора поблагодарили: Damn (3), JuniorAx (1).
Старый 25.04.2012, 11:38   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Полный список Вам и не нужен. Вам нужна проверка на 3 возможных спец.символа.

- Перевод строки (\n)
- Возврат каретки (\r)
- Табуляция (\t)

При вставке через буфер обмена они имеют следующий смысл

Перевод строки (\n) - перейти на следующую строку Excel
Табуляция (\t) - перейти на следующий столбец Excel
Возврат каретки (\r) - в теории, перейти на следующую строку внутри одной ячейки. Но на практике - реузультат малопредсказуемый.

Соответственно, необходимо сделать замену этих символов на пробел. Примерно так

X++:
static void Job_Test(Args _args)
{
    str    strValue = "1\n2\r3\t4";
    ;

    print strValue;

    // Замена спец.символов на пробелы
    strValue = global::strReplace(strValue,"\n"," ");
    strValue = global::strReplace(strValue,"\r"," ");
    strValue = global::strReplace(strValue,"\t"," ");
    print strValue;
    pause;
}

Наиболее вероятно, наличие символа перевода строки, если текст проводки формируется вручную и этот текст отображается в несколько строк. Просто случайно нажали на Enter при вводе.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: JuniorAx (1).
Старый 25.04.2012, 11:55   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
При вставке через буфер обмена они имеют следующий смысл

Перевод строки (\n) - перейти на следующую строку Excel
Табуляция (\t) - перейти на следующий столбец Excel
Возврат каретки (\r) - в теории, перейти на следующую строку внутри одной ячейки. Но на практике - реузультат малопредсказуемый.

Соответственно, необходимо сделать замену этих символов на пробел.
Хм... так тогда же буфер не сможет разбиться по ячейкам... или я чего-то не понял? Обработка на "плохие символы" нужна ДО экспорта или ПОСЛЕ?
Старый 25.04.2012, 12:04   #10  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо вам большое! Использовал вариант Владимира Максимова.
Возникло несколько вопросов:
Где можно посмотреть информацию по классу Global, т.к. я не увидел используемую функцию в System Documentation, а в классе очень много функций!?
И по поводу варианта с мокросом - у меня он не сработал, видимо из-за 3 версии Аксапты!?
Старый 25.04.2012, 12:08   #11  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
to Gustav: Сначала select'ом выбираем нужные записи из таблицы, затем удаляем лишние символы и вставляем обработанный текст в поле временной таблицы, затем буфер заполняется из этой временной таблицы. Сейчас всё работает и перевода строки в Excel не происходит.
За это сообщение автора поблагодарили: Gustav (1).
Старый 25.04.2012, 12:09   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Gustav Посмотреть сообщение
Хм... так тогда же буфер не сможет разбиться по ячейкам... или я чего-то не понял? Обработка на "плохие символы" нужна ДО экспорта или ПОСЛЕ?
Речь идет о "плохих символах" в одном конкретном поле. В данном случае, в тексте проводки. Вот содержимое этого поля и надо проверить перед тем, как вставить его в буфер обмена.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: Gustav (1).
Старый 25.04.2012, 12:36   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,654 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
Где можно посмотреть информацию по классу Global, т.к. я не увидел используемую функцию в System Documentation, а в классе очень много функций!?
Нигде. Только "ручной" разбор кода.

System Documetation - это документация по объектам ядра системы, которые невозможно модифицировать через AOT.

Класс Global относится к "Application Documentaion". Фактически, это "пользовательский" класс, который может быть изменен в любой момент. Поэтому по нему и нет документации. Можно сказать, что класс Global - это набор "своих" функций, которые "расширяют" набор стандартных функций Axapta.

Цитата:
Сообщение от JuniorAx Посмотреть сообщение
И по поводу варианта с мокросом - у меня он не сработал, видимо из-за 3 версии Аксапты!?
Нет. Не поэтому. Макросы работают по всех версиях. Вопрос только в том, а существует ли указанный макрос в Вашей версии. Ну, и содержимое этого макроса надо проверить, а также почитать справку по функции strKeep().

Впрочем, можно удалить плохие символы через strRem(), но это имеет смысл только в случае, если плохие символы всегда находятся в конце содержимого поля, а не в середине. Сравните.

X++:
static void Job_Test(Args _args)
{
    #define.BadSymbols("\n\r\t")
    str    strValue = "1\n2\r3\t4";
    ;

    print strValue;
    print "strRem     = " + strRem(strValue,#BadSymbols);

    // Замена
    strValue = strReplace(strValue,"\n"," ");
    strValue = strReplace(strValue,"\r"," ");
    strValue = strReplace(strValue,"\t"," ");
    print "strReplace = " + strValue;
    pause;
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 26.04.2012, 10:25   #14  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо! Я хотел бы определить такой макрос у нас в системе, могли бы вы со мной поделиться, если это не трудно?
Просто хочу попробовать вариант S.Kuskov с оставлением только корректных символов, потому что с переводм строки скрытыми символами, я решил задачу. Но в некоторых проводках есть еще какие-то символы которые не дают переводить каретку в следующей столбец Excel => значения из двух соседних столбцов выводятся в одной ячейке.
И т.к. они появляются разные и в разных местах, не хотелось бы каждую строку отчета проверять на каждый спецсимвол!
Старый 26.04.2012, 10:31   #15  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
X++:
#define.charfrom032to063(' !\"#$%&\'(*+,-./0123456789:;<=>?')
#define.charfrom064to095('@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_')
#define.charfrom096to127('`abcdefghijklmnopqrstuvwxyz{|}~')
#define.charfrom160to191(' ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿')
#define.charfrom192to223('ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß')
#define.charfrom224to255('àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ')
#define.ISO8859_1(#charfrom032to063 +  #charfrom064to095 + #charfrom096to127 + #charfrom160to191 + #charfrom192to223 + #charfrom224to255)
Возможно весь набор ISO8859_1 вам и ненужен. Можете сами собрать строковую константу, содержащую только необходимые символы.
Старый 26.04.2012, 12:06   #16  
JuniorAx is offline
JuniorAx
Участник
 
134 / 20 (1) +++
Регистрация: 20.07.2011
Адрес: Санкт-Петербург
Спасибо! Я догадываюсь что в переменной #define.charfrom224to255('àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ') содержатся русские буквы (судя по кодам) и у вас они не корректно скопировались из-за раскладки клавиатуры?Поменяю у себя, благо теперь понял как его составить.
А что за макрос #Evat_NL???
Старый 26.04.2012, 12:15   #17  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от JuniorAx Посмотреть сообщение
А что за макрос #Evat_NL???
Именно в нём содержатся приведённые мной константы. Видимо для какого-то нидерландского функционала делалось . Наткнулся на них, когда искал пример использования strKeep() для ответа на ваш вопрос.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Сумма прописью (RU): Axapta, VBA и Excel (в одной ячейке!) Blog bot DAX Blogs 0 13.03.2012 16:11
Sample Design Patterns: Microsoft Dynamics AX - Remedy for slow Microsoft Excel import Blog bot DAX Blogs 0 29.05.2011 17:13
Excel. Узнать по именованной ячейке на каком она листе? Poleax DAX: Программирование 10 30.12.2008 13:48
Как вставить значение из Аксапты в Excel Андре DAX: Программирование 17 09.02.2005 18:13
как считать значение из Excel - файла Miktel DAX: Программирование 5 01.10.2004 10:24

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:32.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.