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


Автор: Farkhod 11.5.2004, 12:56
На 6-ом vb для того чтобы сделать отчет по б/д я делаю так:

Dim xcl As Excel.Application
Set xcl = New Excel.Application
xcl.Workbooks.Add
With xcl.ActiveSheet.QueryTables.Add(Connection:="ODBC;DRIVER=SQL Server; SERVER=Servak; UID=sa; PWD=123; DATABASE=Northwind", Destination:=xcl.Range("A1"))
.CommandText = "SELECT * FROM Customers"
.Refresh BackgroundQuery:=False
End With
xcl.Visible = True


Но в vb.net этот код не пашет. Ругается на строку xcl.Workbooks.Add
говорит:

"An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in excel_report_2.exe
Additional information: Old format or invalid type library."

А мне надо все это сделать в vb.net. Пожалуйста подскажите как быть ?

P.S. Я пробовал в references добавить и 5 и 11 ёксел. не помогает.

Автор: Kurt 11.5.2004, 15:25
Если ты уберешь все строки ниже xcl.Workbooks.Add - тоже выдает ошибку?
Просто у меня все нормально. А ниже этой строки сейчас проверить не могу..

Автор: Farkhod 11.5.2004, 15:57
а пофигу. все равно таже ошибка
странно... notify.gif

Автор: Kurt 11.5.2004, 16:40
Погоди.. И ЭТОТ код выдает ошибку? (у меня все ОК..)
Код
Imports Excel

Module Module1

   Sub Main()
       Dim xcl As Excel.Application = New Excel.Application()
       xcl.Workbooks.Add()
     
       Console.WriteLine("Success!!!")
       Console.Read()
       Console.Read()

   End Sub

End Module

Автор: stron 11.5.2004, 17:33
Вопрос: А почему не хотите сделать через OLEDB?

Код

Dim DS As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim MyConnection As System.Data.OleDb.OleDbConnection

MyConnection = New System.Data.OleDb.OleDbConnection( _
     "provider=Microsoft.Jet.OLEDB.4.0; " & _
     "data source=C:\myData.XLS; " & _
     "Extended Properties=Excel 8.0;")
' Select the data from Sheet1 of the workbook.
MyCommand = New System.Data.OleDb.OleDbDataAdapter( _
     "select * from [Sheet1$]", MyConnection)

DS = New System.Data.DataSet()
MyCommand.Fill(DS)
MyConnection.Close()


ЗЫ: Это я так в MSDN'е нашел

Автор: Kurt 11.5.2004, 18:26
Через OLEDB?
Да. Согласен. smile.gif
Вот тока почему у товарища ЭТОТ код не работал?..
Или работает?..

Автор: stron 11.5.2004, 18:47
А у меня он тоже не работает! smile.gif

Но у меня не видит пространство имён Excel, а нужную DLL-ку я не нашел.
Правда, у меня .NET под другой операционкой, а там нет офиса.
Может в этом причина?
А как всё это работает?


Цитата

P.S. Я пробовал в references добавить и 5 и 11 ёксел. не помогает.

Честно говоря, не совсем понимаю зачем он это делал, т.к. на тип Excel.Application у него ничего не ругается.

Автор: Farkhod 12.5.2004, 08:21
проблема была в 2003 - офисе. Поставил 2000 и все ок.
А зачем делать через Oledb когда можно проще.
Цитата
Честно говоря, не совсем понимаю зачем он это делал, т.к. на тип Excel.Application у него ничего не ругается.

Именно ругался из за того что библиотека была от 11-офиса. А теперь я подключил 9-ый.
А можно и без подключения просто:
Dim xcl as Object
xcl=CreateObject("Excel.Application")

Автор: Kurt 12.5.2004, 18:51
Цитата

А у меня он тоже не работает! 

Но у меня не видит пространство имён Excel, а нужную DLL-ку я не нашел.
Правда, у меня .NET под другой операционкой, а там нет офиса.
Может в этом причина?
А как всё это работает?

Как я уже говорил, у меня все работает.
Правда для этого надо было сделать RCW и добавить ссылку в reference (в VS RCW создается автоматически..).
Честно говоря, без офиса не пробовал, хотя, ИМХО, оно и не должно работать без него - ведь ты фактически обращаешься к Excel.
Как все работает? Ты вызываешь COM-сервер Excel и фактически исполняешь его методы.
Сейчас вроде у всех продуктов MSOffice есть COM-доступ.

Свой код проверял под WinXP..

Автор: stron 12.5.2004, 21:17
Цитата

Как все работает? Ты вызываешь COM-сервер Excel и фактически исполняешь его методы.
Сейчас вроде у всех продуктов MSOffice есть COM-доступ.

Понятно, я просто думал, что у .NET есть своя(встроенная) библиотека для работы с excel'евскими файлами.

Автор: Kurt 12.5.2004, 21:25
Вроде как есть какая-то сборка под новый офис, но я не уверен..

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