Показать сообщение отдельно
Старый 30.03.2011, 11:30   #3  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Для 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("Ошибка при копировании данных через буфер обмена.");
    }
}
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.