Доброе время суток!
ОС: Window Server 2003 R2 Enterprise, Windows Server 2008 R2 Standart Office: ms Office Standart 2007 среда: Интерпритатор СЭД Docsvision
столкнулся с такой проблемой: Мне нужно скопировать группу ячеек из одной книги Excel в другую. Применяю следующий код:
Код | ... process.LogMessage("get last cells xls"); Cells = WorkSheetCSV.GetType().InvokeMember("Cells", BindingFlags.GetProperty, null, WorkSheetXLS, null); process.LogMessage("connect cells"); Range = Cells.GetType().InvokeMember("SpecialCells", BindingFlags.GetProperty, null, Cells, new object[]{11 /*xlCellTypeLastCell*/}); process.LogMessage("get last cells range"); int tmpIntXLS=Convert.ToInt32(Range.GetType().InvokeMember("Row", BindingFlags.GetProperty, null, Range, null))+1; process.LogMessage("Num row + 1: "+tmpIntXLS.ToString());
process.LogMessage("Copy cells"); int tmpIntCSVXLS = tmpIntXLS+tmpInt; process.LogMessage("get new last cells: "+tmpIntCSVXLS.ToString()); RangeXLS = WorkSheetXLS.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, WorkSheetXLS, new object[]{"A"+tmpIntXLS.ToString()+":V"+tmpIntCSVXLS.ToString()}); process.LogMessage("get full range xls"); Range = WorkSheetCSV.GetType().InvokeMember("Range", BindingFlags.GetProperty, null, WorkSheetCSV, new object[]{"A1:V"+tmpInt.ToString()}); process.LogMessage("Get range CSV"); Range.GetType().InvokeMember("Copy", BindingFlags.SetProperty, null, Range, new object[] { RangeXLS }); // <<<<--- тут ошибка ... |
вылетает ошибка: Exception has been thrown by the target of an invocation.: Нельзя установить свойство Copy класса Range
При этом код в VB с подобными аргументами срабатывает нормально:
Код | Dim Range1 As Range Dim Range2 As Range Set Range1 = Range("A1:A3") Set Range2 = Range("C1:C3") Range1.Copy Range2
|
реализация через copy и paste не подходит, т.к. система многопоточная и в это время может быть открыто несколько экземпляров Excel
Подскажите, что я делаю не так?
спасибо.
|