Import From Excel To Lotus

xKlonx

Lotus team
10.09.2009
410
0
#1
Народ пытаюсь вытянуть некоторые данные из Excel в Лотус.Подключаюсь с помощью ODBC драйвера,в панель управления->администрирование ->Источники данных (ODBC) ->Пользовательский DSN добавляю настройки Microsoft Excel Driver(.xls).Пытаюсь приконектится:
Код:
Dim con As New ODBCConnection
Dim qry As New ODBCQuery
Dim result As New ODBCResultSet
Dim Session As New NotesSession
Dim Db As NotesDatabase
Dim COView As NotesView
Dim CODoc As NotesDocument
Dim BillDirectionDoc As NotesDocument
Dim Row As Integer
Dim BillDirection As String


Set Db = Session.CurrentDatabase
Set COView = Db.GetView(	"BillDirections:DirCode" )		

Set qry.Connection = con
Set result.Query = qry
con.ConnectTo( "STAT2" )
qry.SQL = "SELECT * FROM STAT2"
result.Execute

Do
result.NextRow
Row = Row + 1
.............................................
result.Execute вылетает ошибка:

Может кто-то знает как правильно настроить драйвер?Заранее благодарен
 

NetWood

Lotus team
17.04.2008
372
19
#2
Я мучился с ODBC - плюнул. Ну не работает, хоть тресни.
Все через COM делаю. Дешево и сердито.
Еще через DB2 можно.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#3
из екселя в лотус это не кошерно
сначала из екселя преобразовать в XML а уже потому DXML отработать на раз
обещаю что скорость минимум в 100 раз будет больше :)
 

xKlonx

Lotus team
10.09.2009
410
0
#4
ToxaRat
Тут скорость не нужна так как это единоразовый импорт,особо извращатся неохота
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#5
xRomax
Я тоже пытался вытянуть с ODBC... не понравилось и сделал так
Код:
Function ConnectToXLS As Variant
Dim ProfileDoc As NotesDocument
Dim ADOConnection As Variant


On Error GoTo OnErr

Set ProfileDoc = GetProfileDocument
If ProfileDoc Is Nothing Then
ConnectToXLS = "1"
Exit Function
End If	

Set ADOConnection = CreateObject("ADODB.Connection")

With ADOConnection
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source="+ ProfileDoc.ExcelDebet( 0 ) + ";Extended Properties=Excel 8.0;"
.Mode = 1
.Open
End With

Set ConnectToXLS = ADOConnection

Exit Function

OnErr:
Print Error
Set ConnectToXLS = Nothing
Set ADOConnection = Nothing
Resume Rez

Rez:

End Function
и так
Код:
	Set XLSConnection = ConnectToXLS

If XLSConnection Is Nothing Then
GoTo OnErr
End If

Set RecordSet = CreateObject("ADODB.Recordset")
RecordSet.LockType = 3
RecordSet.CursorType = 2
RecordSet.Open "Select * from [Sheet1$] where F2 <> '' " , XLSConnection

While RecordSet.EOF = False
..... делаем то что надо
Wend
и настраивать ничего не надо
 

xKlonx

Lotus team
10.09.2009
410
0
#6
NickProstoNick
"Microsoft JET Database Engine:обьект "STAT2" не найден ядром базы данных Microsoft Jet. Проверьте существование обьекта и правильность имени и пути"
Вылетает ошибка на строке выборки
Код:
	RecordSet.Open "Select * from STAT2 " , XLSConnection
Функция коннекта проходит нормально,получаю обжекты
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#7
STAT2 - это страница в xls-файле?
И вообще, покажи сам файл.
А вообще, попробуй написать [Sheet1$] или какая у тебя там страница
 

xKlonx

Lotus team
10.09.2009
410
0
#8
NickProstoNick
STAT2 - это страница в xls-файле?
И вообще, покажи сам файл
Да,страница,файл также называется.Файл не могу показать так как это телефонный справочник компании
 
K

Klido

#9
так как это телефонный справочник компании
коллеги, разовый экспорт из экселя в таком простом случае - просто импортнуть :) какой такой код??? в крайнем случае, сделать форму+вьюху и тупо импортнуть... плюс там есть такие .COL файлы - параметризируют импорт...
 

xKlonx

Lotus team
10.09.2009
410
0
#10
Klido
А можно конкретнее,так как етого не делал раньше?
 
K

Klido

#11
File-Import... ну и там далее... в хелпе про importing files - в клиентском и дизайнерском

насколько помню, если вьюха точно совпадает со столбцами экселя + форма нормальная - в 3 клика делается прекрасно импорт...
 

xKlonx

Lotus team
10.09.2009
410
0
#12
NickProstoNick
Я правильно понял что ProfileDoc.ExcelDebet( 0 ) - поле с путем к файлу?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 584
271
#13
Klido
поддерживаю

из-за одного раза устраивать такой гимор... - этож надо так себя не уважать :)
КОМ, ОДБЦ... - кто больше вспомнит МСпердуляторов усложняющих жисть? ;)

делаем CSV файл (экспорт из хехеля), переименовываем его в txt, составляем col файл (примеры в хэлпе нотусей)
импортим в нотуса (да хоть кодом) - стандартный пункт меню и соответ. собака
col файл для задания типа полей и разделителей
 
K

Klido

#14
lmike
ну я обычно ограничиваюсь вьюхой и формой - при импорте там сразу спрашивает что да как... вооще не вопрос - даже если что не так, то ctrl+a Del, поправил формовьюшку - и повтор... куда как быстрее код писать....
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 584
271
#15
ну я обычно ограничиваюсь вьюхой и формой - при импорте
у мя в кажной базе есть вьюшка ($All) - столбецы дата создания, модификации, форма, с возможностью сортировки
col файл позволяет отлавливать несоответ. типов и кол-ва данных (колонок)
 

xKlonx

Lotus team
10.09.2009
410
0
#16
Klido
Есть вьюха есть форма с полями,нажимаю импорт выбираю файл,выбираю форму нажимаю ок , результат: создается один пустой документ
 
K

Klido

#17
xRomax
ды кглянь в хелпе формат - в экселе должны столбцы называться как поля в форме.. ну и там галочками ещё потыцкать... при импорте
 

NetWood

Lotus team
17.04.2008
372
19
#18
Господа! Штож товорицца то. Надо человеку помочь решить разовую задачу. Все начали пальцы загибать. :)
В хелп тыкать. XML? DXL? И прочее. А нахрена спрашивается?


Код:
Sub ImportFromExcel

Dim session As New NotesSession
Dim ws As New NotesUIWorkspace

Set db = Session.currentdatabase

filename = Inputbox$ ("Drive\Path\FileName.xls for the docs будут загружены.", "Укажите расположение файла импорта " ,"c:\export.xls")
If filename = "" Then
Exit Sub
End If	

formname = Inputbox$ ("Форма для загрузки?", "Enter ... " ,"Topic")
If formname = "" Then
Exit Sub
End If	

Set xlApp = CreateObject("Excel.application")
Set ws = New NotesUIWorkspace	
' Установка видимости Excel -------------------------------------------------
Watch = "No"
If Watch = "Yes" Then YesNo = True Else YesNo = False 
xlApp.Visible = YesNo	
' открытие книги ------------------------------------------------------------

Call xlApp.Workbooks.Open(filename, 0, True) 
Set xlsheet = xlApp.Workbooks(1).Worksheets(1)
xlsheet.Activate

Dim RowName As String	
With xlsheet
i=1 '' начинаем со второй строчки
Do
RowName = Trim(Str(i + 1))
' ---------------------------------------------------------
' создать			
Set CurrDoc = New NotesDocument (db)
CurrDoc.Form=formname
CurrDoc.Category3=.Range("A" & RowName).Value '  
CurrDoc.Category2=.Range("B" & RowName).Value '  
CurrDoc.CatalogNumber=.Range("C" & RowName).Value '  Артикул
Call CurrDoc.ComputeWithForm(True, True)	
Call CurrDoc.Save(True, True)
' ---------------------------------------------------------
Print i			
i = i +1
Loop While (Trim(.Range("A" + RowName).Value)<>"") 	''пока колонка "A" Category непустое :)	
End With

xlapp.activeworkbook.close
xlapp.quit
Set xlapp = Nothing

Messagebox("Import file Excel " & FileName & " is complete. Всего создано " & i & " записей. ")
Call ws.ViewRefresh	

End Sub
By кто-то: "Мне не нужен совершенный код, мне нужен код который решает задачу..."