09.07.2010, 16:43 | #1 |
Участник
|
Ошибка времени выполнения в ComExcelDocument_RU.findRange()
DAX 2009 и Excel 2007.
При вызове метода insertRows класса ComExcelDocument_RU, по непонятным мне причинам, на одних и тех же данных время от времени вываливается ошибка времени выполнения "неправильные типы аргументов в операции присвоения значения переменной" на 18 строке метода findRange X++: comApplication = m_comDocument.application(); метод insertRows X++: void insertRows(int _fromRow, int _toRow, int _fromWorkSheet = 1, int _offset = 1, int _numOfCopies = 1, // CIT_MSOfficeReport, kirp --> /* int _toWorkSheet = 1) */ int _toWorkSheet = 1, MSOfficeBookMark_RU _copyFromBookmark = "") // CIT_MSOfficeReport, kirp <-- { COM comRows, comWorkSheet, comRow, comRowTarget, selection; COMVariant comRowVariant, selVariant; ; if (_numOfCopies <= 0) return; if (! m_comDocument) throw error(strfmt("@GEE6401", this.getApplicationName())); // CIT_MSOfficeReport, kirp --> if (_copyFromBookmark) { comRow = this.findRange(_copyFromBookmark, _fromWorkSheet); comRow.copy(); } else { // CIT_MSOfficeReport, kirp <-- comRow = this.findRange(strFmt("%1:%2", _fromRow, _toRow), _fromWorkSheet); comRow.copy(); // CIT_MSOfficeReport, kirp --> } // CIT_MSOfficeReport, kirp <-- comRowTarget = this.findRange(strFmt("%1:%2", _fromRow + _offset, _fromRow + _offset + (_toRow - _fromRow + 1) * _numOfCopies - 1), _toWorkSheet); comRowTarget.select(); comRowTarget.insert(); comWorkSheet = this.getWorkSheet(_toWorkSheet); comRows = comWorkSheet.cells(); comRows = COM::createFromVariant(comRows.item(1)); comRows.select(); m_comApplication.cutCopyMode(false); } X++: // Creates object range type named the same way as Excel bookmark // bookMark -> Excel bookmark name // CIT_MSOfficeReport, ilso --> /* protected COM findRange(MSOfficeBookMark_RU bookMark, int _workSheet = 1) */ public COM findRange(MSOfficeBookMark_RU bookMark, int _workSheet = 1) // CIT_MSOfficeReport, ilso <-- { COM comRange, comWorkSheet; COM comApplication; ; if (m_comDocument) { comWorkSheet = this.getWorkSheet(_workSheet); comApplication = m_comDocument.application(); comWorkSheet.activate(); if (comWorkSheet && comApplication) { comRange = comApplication.range(bookMark); } } return comRange; } Подскажите, пожалуйста, в чем может быть дело. PS. В поиске ничего не нашел. |
|
Теги |
com-объект, excel, thread, асинхронный com, ошибка |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|