27.05.2015, 17:51 | #1 |
Участник
|
Export excel Ctrl-E проблема с двойными кавычками
Всем доброго времени суток. Обнаружил проблему при выгрузке в Excel по средством Ctrl-E.
AX2009, Office 2007. Оказывается, если в текстовом поле есть двойные кавычки " ,то открывающая кавычка почему то попадает в конец текста. Например ООО "Петров", в excel попадает как ООО Петров"". Определил, что проблема заключается в копировании данных аксаптой. То есть, если поставить брейкпоинт, после попадания в класс и вручную сделать Вставку получается ровно так же. Посоветуйте можно ли что-то сделать с этим? |
|
27.05.2015, 20:23 | #2 |
Участник
|
По кнопке 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; } (...)
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
27.05.2015, 20:44 | #3 |
Участник
|
Инфолог показывает корректные данные.
Но при выводе добавляются еще одни обрамляющие кавычки, в итоге в excel передается "ООО "Петров"" И вот такой текст уже при копировании из нотепада дает такую кривую строку. Вообще все поля передающиеся через буфер имеют обрамление в виде двойных кавычек. В этом и проблема Последний раз редактировалось IvanS; 27.05.2015 в 21:39. |
|
28.05.2015, 13:07 | #4 |
Участник
|
У меня инфолог показывает, что в буфере обмена кавычки удваиваются. Т.е. буфер содержит вот такой текст
Код: "ООО ""Петров"""
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
28.05.2015, 13:09 | #5 |
Участник
|
Цитата:
Вообще для Excel нормальное поведение если вначале строки стоит кавчка - убирать и следующую кавычку (именно следующую а не обрамляющие весь текст), это так задумано и полечить не удастся. Т.е. при вставке строки - "О"ОО" "Сидоров" "ПП"ПП"" Вы в ячейке получите - ООО" "Сидоров" "ПП"ПП"" При одиночной вставке это можно исправить через всплывший значок буфера обмена, там "использовать мастер импорта текста". Другой вопрос почему у вас в буфер вставляются данные дополнительно обрамляются кавычками. Вы абсолютно правы - надо копать в эту сторону. |
|
28.05.2015, 13:47 | #6 |
Участник
|
Цитата:
Обрамляющие кавычки автоматически отбрасываются при вставке в ячейку. Это уже механизм Excel. Также как и замена задвоенных кавычек на одиночные. А вот если задвоение кавычек при формировании буфера обмена не происходит, то и получится, то, что в описании проблемы. Excel "не понимает" где открывающая, а где закрывающая кавычка. Т.е. если в буфере записано Код: "ООО "Петров"" Код: ООО Петров""
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
28.05.2015, 15:03 | #7 |
Участник
|
Цитата:
Буфер обмена по идее действительно должен был задвоить все кавычки и обрамить. Т.е. при строке - Союз "Информ ООО" в буфере должно оказаться - "Союз ""Информ ООО""" |
|
28.05.2015, 17:14 | #8 |
Участник
|
Докладываю.
В копипасте, каждое поле хранится как текст обрамленный двойными кавычками. Чтобы при вставке ексель принимал правильно текст содержащий сам по себе двойные кавычки, их нужно задвоить, но это не должно касаться открывающий и закрывающих кавычек. Изначально я сделал перебор всего буфера, переделав его в контейнер, где разделителем является табуляция ( '\t' ). И потом запаковывал этот контейнер обратно в буфер, Но на большом количестве данных перевод строки в контейнер занимает очень много времени, плюс обратный перевод контейнера в строку выдает строку в 100 символов. Поэтому нужно делать перебор буфера построчно. Я же решил использовать буфер для создания массива с последующим экспортом в Excel. |
|
|
За это сообщение автора поблагодарили: Logger (3). |
|
|