Показать сообщение отдельно
Старый 19.08.2013, 12:53   #7  
kair84 is offline
kair84
Участник
 
47 / 58 (2) ++++
Регистрация: 15.04.2010
Адрес: Belarus
Если нет кода нужного Вам, перекрываете на форме метод task(), добавляете точку останова, и ловите TaskID
X++:
#define.taskCopy(771)
#define.taskSelectAll(778)
Вот отличный пример вставки данных в Excel с пом. буфера обмена
X++:
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("Ошибка при копировании данных через буфер обмена.");
    }
}
а это упрощенный его вариант
X++:
public void pasteSpecialFromTextBuffer(BookMark _bookMark, TextBuffer _buffer, int _workSheet = 1)
{
   COM  XLSWorkSheet, XLSrange;
   ;

    if (! _buffer.size())
        return;

    if (! m_comDocument)
        throw error(strfmt("@GEE6401", this.getApplicationName()));

    XLSWorkSheet    = this.getWorkSheet(_workSheet);
    if (!XLSWorkSheet)
        throw error("@DIS6043");

    XLSrange                = this.findRange(_bookMark,_workSheet);
    if (!XLSrange)
        throw error("@SYS27391");

    XLSrange.select();

    _buffer.toClipboard();
    XLSrange.pasteSpecial(0);
}