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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.05.2015, 17:51   #1  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Export excel Ctrl-E проблема с двойными кавычками
Всем доброго времени суток. Обнаружил проблему при выгрузке в Excel по средством Ctrl-E.
AX2009, Office 2007.

Оказывается, если в текстовом поле есть двойные кавычки " ,то открывающая кавычка почему то попадает в конец текста.

Например ООО "Петров", в excel попадает как ООО Петров"".
Определил, что проблема заключается в копировании данных аксаптой. То есть, если поставить брейкпоинт, после попадания в класс и вручную сделать Вставку получается ровно так же.

Посоветуйте можно ли что-то сделать с этим?
Старый 27.05.2015, 20:23   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
По кнопке Ctrl+E выполняется копирование содержимого в буфер обмена, после чего запускается статический метод класса SysGridExportToExcel:: performPushAndFormatting(), который открывает экземпляр Excel, форматирует его нужным образом, а затем "тупо" вставляет буфер обмена через worksheet.pasteSpecial().

Другими словами, со стороны Axapta просто нет никакой модификации данных, вставляемых в Excel. Вот в каком виде в буфер попали, в таком виде в Excel и будут вставлены.

Возможно, у Вас проблема на стороне Excel. Может, там настроена какая-то хитрая автозамена? Попробуйте набрать проблемный текст в Notepad (блокнот) или Word и через копирование/вставку вставить в Excel. Если проблема сохранится, то дела в настройках Excel, а не Axapta

Другой способ проверки, это в методе SysGridExportToExcel:: performPushAndFormatting() для целей отладки сделать так

X++:
public static void performPushAndFormatting(container _moneyColumns, container _columnAlignments, container _formatColumns, int _numberOfRows)
{
(...)
    TextBuffer TextBuffer;   // debug 
    ;

(...)
    for (retryCount = 1; retryCount <= 3; retryCount++)
    {
        try
        {
// debug -->
            TextBuffer = new TextBuffer();
            TextBuffer.fromClipboard();
            info(TextBuffer.getText());
// debug <--
            
            // Paste the data from the clipboard into cell A1 on the only sheet.
            currentSheet.pasteSpecial();

            break;
        }

(...)
В результате, Вы увидите, что же именно вставляется в Excel. В смысле, какой текст, и как там обстоят дела с кавычками... Если в буфере все хорошо - ищите проблему в Excel.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 27.05.2015, 20:44   #3  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Инфолог показывает корректные данные.
Но при выводе добавляются еще одни обрамляющие кавычки, в итоге в excel передается
"ООО "Петров""
И вот такой текст уже при копировании из нотепада дает такую кривую строку.
Вообще все поля передающиеся через буфер имеют обрамление в виде двойных кавычек. В этом и проблема

Последний раз редактировалось IvanS; 27.05.2015 в 21:39.
Старый 28.05.2015, 13:07   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
У меня инфолог показывает, что в буфере обмена кавычки удваиваются. Т.е. буфер содержит вот такой текст

Код:
"ООО ""Петров"""
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 28.05.2015, 13:09   #5  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Цитата:
Сообщение от IvanS Посмотреть сообщение
Вообще все поля передающиеся через буфер имеют обрамление в виде двойных кавычек. В этом и проблема
А какая у вас платформа? Я слышал что бывает различное поведение буфера под разными ОС. И еще бывает такие глюки при одновременном запуске Excel из 1С.

Вообще для Excel нормальное поведение если вначале строки стоит кавчка - убирать и следующую кавычку (именно следующую а не обрамляющие весь текст), это так задумано и полечить не удастся.
Т.е. при вставке строки - "О"ОО" "Сидоров" "ПП"ПП""
Вы в ячейке получите - ООО" "Сидоров" "ПП"ПП""

При одиночной вставке это можно исправить через всплывший значок буфера обмена, там "использовать мастер импорта текста".

Другой вопрос почему у вас в буфер вставляются данные дополнительно обрамляются кавычками. Вы абсолютно правы - надо копать в эту сторону.
Старый 28.05.2015, 13:47   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Craz Посмотреть сообщение
Другой вопрос почему у вас в буфер вставляются данные дополнительно обрамляются кавычками. Вы абсолютно правы - надо копать в эту сторону.
Так и должно быть! В противном случае невозможно будет отличить цифры, записанные в виде текста (ИНН) от реальных чисел.

Обрамляющие кавычки автоматически отбрасываются при вставке в ячейку. Это уже механизм Excel. Также как и замена задвоенных кавычек на одиночные.

А вот если задвоение кавычек при формировании буфера обмена не происходит, то и получится, то, что в описании проблемы. Excel "не понимает" где открывающая, а где закрывающая кавычка.

Т.е. если в буфере записано

Код:
"ООО "Петров""
то при вставке в Excel будут отброшены первые 2 одиночные кавычки как границы поля и останутся только две завершающие

Код:
ООО Петров""
Я не в курсе, где физически происходит формирование буфера обмена и почему там не происходит удвоение кавычек. Возможно, на этот счет где-нибудь есть какие-то настройки...
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 28.05.2015, 15:03   #7  
Craz is offline
Craz
Участник
 
56 / 19 (1) ++
Регистрация: 17.09.2009
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Так и должно быть!
...
Обрамляющие кавычки автоматически отбрасываются при вставке в ячейку. Это уже механизм Excel. Также как и замена задвоенных кавычек на одиночные.
Вы абсолютно правы, я не так выразился, извините.
Буфер обмена по идее действительно должен был задвоить все кавычки и обрамить.
Т.е. при строке - Союз "Информ ООО"
в буфере должно оказаться - "Союз ""Информ ООО"""
Старый 28.05.2015, 17:14   #8  
IvanS is offline
IvanS
Участник
Аватар для IvanS
 
241 / 44 (2) +++
Регистрация: 30.06.2006
Адрес: Екатеринбург
Докладываю.
В копипасте, каждое поле хранится как текст обрамленный двойными кавычками.
Чтобы при вставке ексель принимал правильно текст содержащий сам по себе двойные кавычки, их нужно задвоить, но это не должно касаться открывающий и закрывающих кавычек.

Изначально я сделал перебор всего буфера, переделав его в контейнер, где разделителем является табуляция ( '\t' ). И потом запаковывал этот контейнер обратно в буфер, Но на большом количестве данных перевод строки в контейнер занимает очень много времени, плюс обратный перевод контейнера в строку выдает строку в 100 символов. Поэтому нужно делать перебор буфера построчно.

Я же решил использовать буфер для создания массива с последующим экспортом в Excel.
За это сообщение автора поблагодарили: Logger (3).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
atinkerersnotebook: Using Export To Excel in Dynamics AX to Create Reporting Data Sources Blog bot DAX Blogs 1 12.10.2013 01:13
проблема использования Excel через clr Batuev Artem DAX: Программирование 8 22.08.2011 18:01
emeadaxsupport: Solving various issues when using Export to Excel feature in Chart of Accounts Form (Microsoft Dynamics AX 2009) Blog bot DAX Blogs 0 15.07.2010 20:08
emeadaxsupport: Export to Excel can fail on a Windows Terminal Server Blog bot DAX Blogs 0 27.01.2010 13:05
emeadaxsupport: How does the Export to Excel feature work under the hood? Blog bot DAX Blogs 0 07.09.2009 19:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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