Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Позднее связывание и Excel


Автор: Berserk 20.2.2007, 13:33
Необходимо вывести отчет в Excel 2000. Для Excel 2003 программа у меня есть(применяется раннее связывание, все работает). А вот с более ранними версиями раннее связывание не работает. 

Подключение Excel, получение ссылок на книги, страницы.... это получается, но мне интересно следующее:

Есть такой метод
Код

public object InvokeMember(string name, BindingFlags flags, Binder binder, object target, object[] args);
 
которым я и пользуюсь для позднего связывания.
>>Все возможные варианты name и их характеристики? Если можно то ссылочку.()

но главный вопрос в следующем: 
>>Из одного листа перенести данные на другой?



 

Автор: Yama 20.2.2007, 13:49
Вот тебе http://rsdn.ru/article/dotnet/ExcelNELateBinding.xml smile.

Добавлено @ 14:02 
Цитата(Berserk @  20.2.2007,  13:33 Найти цитируемый пост)
Из одного листа перенести данные на другой?

Если делал до сих пор для раннего связывания - принцип один и тот же - вычитываешь данные из нужных тебе ячеек 1го листа, делаешь новый объект как ссылку на 2й лист и заносишь эти данные на 2й лист.
Код

Microsoft.Office.Interop.Excel.Worksheet ws1 = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets.get_Item((Object)1);//Получаем ссылку на 1й лист
Microsoft.Office.Interop.Excel.Worksheet ws2 = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets.get_Item((Object)2);//Получаем ссылку на 2й лист
Microsoft.Office.Interop.Excel.Range r1=(Microsoft.Office.Interop.Excel.Range)ws1.Cells.get_Item((Object)(int)1, (Object)(int)1) ;//получаем ссылку на ячейку 1,1 1го листа
String textValue=(String)r1.Text;
Microsoft.Office.Interop.Excel.Range r2=(Microsoft.Office.Interop.Excel.Range)ws2.Cells.get_Item((Object)(int)1, (Object)(int)1) ;//получаем ссылку на ячейку 1,1 2го листа
r2.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault,(Object) textValue);//Вставляем нужные значения в ячейку 1,1 2го листа

Если это какя-либо плятежка, т.е. стандартная форма и никакой динамики - то проще всего захардкодить и все. если неопходимо динамическое занесение данных - тут уж, молодой человек, все зависит от постановки задачи.

З.Ы. С поздним связыванием я сам не работал, но по тексту статью все, в принцине, так же, только работать надо с классом Object, в который будут передаваться ссылки на нужные нам классы Exel"я и мороки больше.

Автор: Berserk 20.2.2007, 14:38
За ссылочку спасибо, но именно по ней я и пытаюсь писать свою прогу.

Автор: Yama 20.2.2007, 15:08
Как пример я привел алгоритм, каким образом можно из одного листа перенести данные на другой. Само собой разумеется, что при использовании позднего связывания этот код не применим. Но это лишь общий алгоритм для переноса данных между страницами...

Автор: Berserk 21.2.2007, 10:28
алгоритм я понимаю, все-таки сам писал для раннего связывания(а идея-то одна и таже). Мне интересен синтаксис копирования значений из ячеек в объект или наоборот, например.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)