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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.06.2011, 18:42   #1  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Пропадание табуляции при выводе в Excel
Не сталкивался ли кто-нибудь? При выводе текста из TextBuffer в Excel пропадает табуляция. То есть весь текст выводится в первую колонку строки, а не переходит в следующие колонки. Перевод на следующую строку не пропадает, работает. Не работает табуляция ни через '\t, ни через num2char(9). Файл сначала создается копированием шаблона Excel посредством WinApi::CopyFile, затем для работы с ним используется класс sysExcelApplication.
Старый 21.06.2011, 18:53   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А если не в Excel вставлять, а в блокнот, к примеру, табуляция сохраняется или пропадает?

Вывод через буфер обмена, привильно понимаю?
__________________
Axapta v.3.0 sp5 kr2
Старый 21.06.2011, 19:05   #3  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
А если не в Excel вставлять, а в блокнот, к примеру, табуляция сохраняется или пропадает?

Вывод через буфер обмена, привильно понимаю?
Добавил параллельный вывод из того же TextBuffer в текстовый файл (через AsciiIo).
В текстовом файле табуляция есть. В Экселе нет.

Да, вывод через буфер обмена:
X++:
    TextBuffer.toClipboard();
    sysExcelWorkSheet.range(ComExcelDocument_RU::numToNameCell(3, 1)).select();
    sysExcelWorkSheet.pasteSpecial(1);
Пробовали вместо pasteSpecial просто paste, результат тот же.
Старый 21.06.2011, 19:28   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Zabr Посмотреть сообщение
Добавил параллельный вывод из того же TextBuffer в текстовый файл (через AsciiIo).
В текстовом файле табуляция есть. В Экселе нет.
Нет-нет. Именно попробовать вставить через буфер обмена.
Если его (клипбоард) не чистите после вставки в Excel, то просто через CTRL+V
__________________
Axapta v.3.0 sp5 kr2
Старый 21.06.2011, 19:37   #5  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от AndyD Посмотреть сообщение
Нет-нет. Именно попробовать вставить через буфер обмена.
Если его (клипбоард) не чистите после вставки в Excel, то просто через CTRL+V
Чистил конечно. Убрал чистку, после выгрузки в Эксель открыл блокнот и вставил клипборд через CTRL+V. В блокноте табуляция есть.

Такое ощущение, что в ячейке Экселя табуляция заменяется непонятным числом пробелов (непонятно - так как везде разное число пробелов, от 1 до 8, но в основном от 5 до 8).

Последний раз редактировалось Zabr; 21.06.2011 в 19:43.
Старый 21.06.2011, 20:03   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Есть объединенные ячейки в Excel там, где должна быть вставка? Вообще, есть какое-то специфическое форматирование этих ячеек?

И еще, если после вставки буфер не чистить и также через Ctrl+V сделать вставку в Excel? Опять табуляторы пропадут?
Старый 21.06.2011, 20:26   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если зайти в Excel, дважды щелкнуть по ячейке левой клавишей мыши, то Вы можете вводить/изменять данные непосредственно в ячейке Excel. Если в этом режиме сделать вставку текста, содержащего табуляторы, то все табуляторы будут заменены на некоторое количество пробелов. Т.е. вопрос сводится к тому, каким образом (какой командой) был осуществлен перевод фокуса в ячейку Excel?

Что у Вас написано в методе SysExcelRange.Select() ? Ведь метод sysExcelWorkSheet.range() вернет ссылку на класс SysExcelRange. Каким образом происходит позиционировние на ячейку Excel?
Старый 21.06.2011, 21:13   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
У Excel-функции "Текст по столбцам" есть одна особенность - она запоминает последние настройки и в последствии при вставке любого текста в документ пытается сразу их применить.
Может у вас по коду она где-то использовалась перед вставкой данных?

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

А насчет "непонятного количества", то оно вполне понятно, так как табуляция (что в аксапте, что в блокноте) занимается выравниванием начала текста по позициям кратным 8 [+1].
Старый 22.06.2011, 09:35   #9  
wolfstein is offline
wolfstein
Axapta Retail User
Axapta Retail User
 
51 / 91 (4) ++++
Регистрация: 05.07.2006
В общем, разобрались.
Шаблон Excel-файла для вставки в него текста через буфер обмена, открывался методом SysExcelWorkbooks_XP.open(...), в котором 4-м параметром идет формат разделителя, по умолчанию там стоит _format = 5 (без разделителя). Проблема разрешилась передачей _format =1 - в качестве разделителя используется символы табуляции.
X++:
public boolean open( str _fileName,
                     int _updateLinks = 0,                          // Specifies the way links in the file are updated.
                     boolean _readOnly = false,                     // True to open the workbook in read-only mode.
                     int _format = 5,                               // If Microsoft Excel is opening a text file, this argument specifies the delimiter character.
                     str _password = '',                            // A string that contains the password required to open a protected workbook.
                     str _writeResPassword = '',                    // A string that contains the password required to write to a write-reserved workbook.
                     boolean _ignoreReadOnlyRecommended = false,    // True to have Microsoft Excel not display the read-only recommended message.
                     int _origin = #xlWindows,                      // If the file is a text file, this argument indicates where it originated. See #Excel for modes.
                     str _delimiter = '',                           // If the file is a text file and the Format argument is 6, this argument is a string that specifies the character to be used as the delimiter.
                     boolean _editable = false,                     // If the file is a Microsoft Excel 4.0 add-in, this argument is True to open the add-in so that it’s a visible window.
                     boolean _notify = false,                       // If the file cannot be opened in read/write mode, this argument is True to add the file to the file notification list.
                     int _converter = 1,                            // The index of the first file converter to try when opening the file.
                     boolean _addToMru = false,                     // True to add this workbook to the list of recently used files.
                     boolean _local = false,                        // True saves files against the language of Microsoft Excel (including control panel settings).
                     int _corruptLoad = 1,                          // See Microsoft description.
                     boolean _openConflictDocument = false          // True to open the local conflict document.
                   )
{
...
}
За это сообщение автора поблагодарили: Zabr (8), Player1 (5).
Теги
excel, буфер обмена

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Sample Design Patterns: Microsoft Dynamics AX - Remedy for slow Microsoft Excel import Blog bot DAX Blogs 0 29.05.2011 17:13
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Свертка строк при выводе из Аксапты в Excel Zabr DAX: Программирование 20 21.02.2006 15:21
Подвисание Excel при выводе из Axapta Ser DAX: Функционал 4 24.07.2003 13:59

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

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

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