24.04.2012, 16:34 | #1 |
Участник
|
Значение в ячейке Excel
Здравствуйте уважаемые участники форума!
Сразу к вопросу: Формирую отчёт в Excel с помощью буфера и временной таблицы. Одно из полей таблицы содержит текст проводки. Текст проводок во всех строках практически одинаков, только вот последние 3 строки "ведут себя не корректно" - надпись растягивается по всем следующим столбцам, и создается чувство что в тексте есть какой то символ который заставляет выводить данные из следующих полей с новой строки! Кто чем может помочь??? Буду очень благодарен, а то уже не один день пытаюсь решить этот вопрос! |
|
24.04.2012, 16:54 | #2 |
Участник
|
На всякий случай приведу конец строки: "от 01.11.10 за период с 26.10.2011-25.11.2011"
После этого Excel начинает выводить значение из следующего поля с новой строки! |
|
24.04.2012, 17:21 | #3 |
NavAx
|
Проверьте строку на спецсимволы, вероятно в конце строки есть ".
|
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
25.04.2012, 10:19 | #4 |
Участник
|
Причём когда в Windows XP открываешь форму проводок и ищешь записи с такими символами (возврат каретки, горизонтальная табуляция и т.д.) в тексте проводки, то эти символы хорошо заметны - отображаются в виде непонятных квадратиков. А в Windows 7 они просто не отображаются и человек сидит и не понимает в чём же дело. У него даже нет возможности удалить такие символы из поля, приходится за помощью обращаться к пользователям Windows XP.
__________________
Дмитрий |
|
|
За это сообщение автора поблагодарили: JuniorAx (1). |
25.04.2012, 10:30 | #5 |
Участник
|
Добрый день! Спасибо raz и Damn!
Вчера проверил строку на спец символы, и действительно ни чего не нашёл (Win 7), а сегодня СЛУЧАЙНО сделал то же самое на компьютере с Win XP и о чудо :-) вижу в конце строки некий квадратик! Зашёл сюда чтобы сказать спасибо за совет raz и вижу сообщение от Damn, вообщем огромное вам спасибо! Я правильно понимаю что теперь мне надо составить некий список спец символов и искать такие в конце строки, и если появляются, удалять их? Где можн овзять полный список этих спец символов? |
|
25.04.2012, 10:59 | #6 |
Участник
|
Думаю что полный список можно взять здесь http://ascii.org.ru/ascii.pdf
А вот где взять именно ту часть этого списка, которая не отображается в Windows 7, я не знаю.
__________________
Дмитрий |
|
25.04.2012, 11:18 | #7 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Damn (3), JuniorAx (1). |
25.04.2012, 11:38 | #8 |
Участник
|
Полный список Вам и не нужен. Вам нужна проверка на 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 |
Moderator
|
Цитата:
Сообщение от Владимир Максимов
При вставке через буфер обмена они имеют следующий смысл
Перевод строки (\n) - перейти на следующую строку Excel Табуляция (\t) - перейти на следующий столбец Excel Возврат каретки (\r) - в теории, перейти на следующую строку внутри одной ячейки. Но на практике - реузультат малопредсказуемый. Соответственно, необходимо сделать замену этих символов на пробел. |
|
25.04.2012, 12:04 | #10 |
Участник
|
Спасибо вам большое! Использовал вариант Владимира Максимова.
Возникло несколько вопросов: Где можно посмотреть информацию по классу Global, т.к. я не увидел используемую функцию в System Documentation, а в классе очень много функций!? И по поводу варианта с мокросом - у меня он не сработал, видимо из-за 3 версии Аксапты!? |
|
25.04.2012, 12:08 | #11 |
Участник
|
to Gustav: Сначала select'ом выбираем нужные записи из таблицы, затем удаляем лишние символы и вставляем обработанный текст в поле временной таблицы, затем буфер заполняется из этой временной таблицы. Сейчас всё работает и перевода строки в Excel не происходит.
|
|
|
За это сообщение автора поблагодарили: Gustav (1). |
25.04.2012, 12:09 | #12 |
Участник
|
Речь идет о "плохих символах" в одном конкретном поле. В данном случае, в тексте проводки. Вот содержимое этого поля и надо проверить перед тем, как вставить его в буфер обмена.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Gustav (1). |
25.04.2012, 12:36 | #13 |
Участник
|
Цитата:
System Documetation - это документация по объектам ядра системы, которые невозможно модифицировать через AOT. Класс Global относится к "Application Documentaion". Фактически, это "пользовательский" класс, который может быть изменен в любой момент. Поэтому по нему и нет документации. Можно сказать, что класс Global - это набор "своих" функций, которые "расширяют" набор стандартных функций Axapta. Цитата:
Впрочем, можно удалить плохие символы через 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 |
Участник
|
Спасибо! Я хотел бы определить такой макрос у нас в системе, могли бы вы со мной поделиться, если это не трудно?
Просто хочу попробовать вариант S.Kuskov с оставлением только корректных символов, потому что с переводм строки скрытыми символами, я решил задачу. Но в некоторых проводках есть еще какие-то символы которые не дают переводить каретку в следующей столбец Excel => значения из двух соседних столбцов выводятся в одной ячейке. И т.к. они появляются разные и в разных местах, не хотелось бы каждую строку отчета проверять на каждый спецсимвол! |
|
26.04.2012, 10:31 | #15 |
Участник
|
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) |
|
26.04.2012, 12:06 | #16 |
Участник
|
Спасибо! Я догадываюсь что в переменной #define.charfrom224to255('àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ') содержатся русские буквы (судя по кодам) и у вас они не корректно скопировались из-за раскладки клавиатуры?Поменяю у себя, благо теперь понял как его составить.
А что за макрос #Evat_NL??? |
|
26.04.2012, 12:15 | #17 |
Участник
|
|
|
|
|