21.06.2011, 18:42 | #1 |
Участник
|
Пропадание табуляции при выводе в Excel
Не сталкивался ли кто-нибудь? При выводе текста из TextBuffer в Excel пропадает табуляция. То есть весь текст выводится в первую колонку строки, а не переходит в следующие колонки. Перевод на следующую строку не пропадает, работает. Не работает табуляция ни через '\t, ни через num2char(9). Файл сначала создается копированием шаблона Excel посредством WinApi::CopyFile, затем для работы с ним используется класс sysExcelApplication.
|
|
21.06.2011, 18:53 | #2 |
Участник
|
А если не в Excel вставлять, а в блокнот, к примеру, табуляция сохраняется или пропадает?
Вывод через буфер обмена, привильно понимаю?
__________________
Axapta v.3.0 sp5 kr2 |
|
21.06.2011, 19:05 | #3 |
Участник
|
Цитата:
В текстовом файле табуляция есть. В Экселе нет. Да, вывод через буфер обмена: X++: TextBuffer.toClipboard();
sysExcelWorkSheet.range(ComExcelDocument_RU::numToNameCell(3, 1)).select();
sysExcelWorkSheet.pasteSpecial(1); |
|
21.06.2011, 19:28 | #4 |
Участник
|
Цитата:
Если его (клипбоард) не чистите после вставки в Excel, то просто через CTRL+V
__________________
Axapta v.3.0 sp5 kr2 |
|
21.06.2011, 19:37 | #5 |
Участник
|
Цитата:
Такое ощущение, что в ячейке Экселя табуляция заменяется непонятным числом пробелов (непонятно - так как везде разное число пробелов, от 1 до 8, но в основном от 5 до 8). Последний раз редактировалось Zabr; 21.06.2011 в 19:43. |
|
21.06.2011, 20:03 | #6 |
Участник
|
Есть объединенные ячейки в Excel там, где должна быть вставка? Вообще, есть какое-то специфическое форматирование этих ячеек?
И еще, если после вставки буфер не чистить и также через Ctrl+V сделать вставку в Excel? Опять табуляторы пропадут? |
|
21.06.2011, 20:26 | #7 |
Участник
|
Если зайти в Excel, дважды щелкнуть по ячейке левой клавишей мыши, то Вы можете вводить/изменять данные непосредственно в ячейке Excel. Если в этом режиме сделать вставку текста, содержащего табуляторы, то все табуляторы будут заменены на некоторое количество пробелов. Т.е. вопрос сводится к тому, каким образом (какой командой) был осуществлен перевод фокуса в ячейку Excel?
Что у Вас написано в методе SysExcelRange.Select() ? Ведь метод sysExcelWorkSheet.range() вернет ссылку на класс SysExcelRange. Каким образом происходит позиционировние на ячейку Excel? |
|
21.06.2011, 21:13 | #8 |
----------------
|
У Excel-функции "Текст по столбцам" есть одна особенность - она запоминает последние настройки и в последствии при вставке любого текста в документ пытается сразу их применить.
Может у вас по коду она где-то использовалась перед вставкой данных? Но все равно, она не умеет заменять табуляцию на "непонятное количество пробелов"... видимо данные "портятся" еще на стадии попадания в буфер обмена. А насчет "непонятного количества", то оно вполне понятно, так как табуляция (что в аксапте, что в блокноте) занимается выравниванием начала текста по позициям кратным 8 [+1]. |
|
22.06.2011, 09:35 | #9 |
Axapta Retail User
|
В общем, разобрались.
Шаблон 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, буфер обмена |
|
|