Для Ax 2009 был случай вывода русский слов в не верной кодировке.
Вставка в Excel из TextBuffer. Кодировка
Ниже исправлена в коде исправлена одна строка на XLSWorkSheet.pasteSpecial(0);
Код:
public void insertText(BookMark _bookMark, TextBuffer _text, int _workSheet = 1)
{
COM XLSWorkSheet, XLSrange;
TextBuffer tempBuffer; // To store clipboard contents
int nextI,
maxI = 3;
;
// Если содержимое TextBuffer вообще не введено, то PastSpecial даст ошибку,
// а если заведена пустая строка, то нет смысла делать PastSpecial
if (! _text.size())
{
return;
}
// Initializing XLSWorkSheet object
XLSWorkSheet = this.getWorkSheet(_workSheet);
if (!XLSWorkSheet)
{
throw error("@DIS6043");
}
// Initializing XLSRange object
XLSrange = this.findRange(_bookMark,_workSheet);
if (!XLSrange)
{
throw error("@SYS27391");
}
XLSrange.select();
for (nextI = 1; nextI <= maxI; nextI++)
{
try
{
// Storing clipboard contents
tempBuffer = new TextBuffer();
tempBuffer.fromClipboard();
// Preparing text to be inserted
_text.toClipboard();
// Inserting text from clipboard
///ГЛЮК XLSWorkSheet.pasteSpecial(1); // 1 - "Text only" mode
XLSWorkSheet.pasteSpecial(0);
// Restoring clipboard contents
tempBuffer.toClipboard();
// В случае успеха, прерываю цикл
break;
}
catch(Exception::Error)
{
// в случае ошибки удаляю последнюю строку infolog,
// которая генерится автоматически ошибкой COM
if (infolog.line())
{
infolog.clear(infolog.line()-1);
}
// предпринимаю очередную попытку сделать вставку через буфер
}
} // for (nextI)
// Если выход из цикла for произошел "штатно", то значение счетчика будет больше максимально допустимого значения
if (nextI > maxI)
{
throw error("Ошибка при копировании данных через буфер обмена.");
}
}