从Lotus如何导出数据

hellodujiqiang 2011-12-01 08:05:52
对lotus了解很少,现在知道如何从lotus导出数据。我也在网上搜了一下,有很多都是类似于
On Error Goto errorhandler
Dim db As NotesDatabase
Dim session As New notessession
。。。
这样的代码,以下是我的问题:

1.我不知道这些代码是在哪里输入才能得到具体的数据,
2.而且我查的这些代码不是一致的,这样的一段代码是不是只能得到某一个form下的所有表单,如果想得到一个数据库下的所有数据应该怎么办?
3.lotus里面的数据是不是其实只有所有form的具体表单
4.还是先把数据导入到excel里面吧,在这里求把lotus的数据导入到excel里面的方法(可以不是代码)

我lotus实在不了解,希望能给我个傻瓜式指导,具体的步骤是什么,谢谢,如果能帮我彻底解决问题,可以多加分。
...全文
320 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cape114 2011-12-07
  • 打赏
  • 举报
回复
doc.域的值 不能自动显示 自己把域的名字写上就行了。

doc.SerialNo(0) 就可以了。 SerialNo 是doc表单中某个域的名字,你的表单里没这个域当然MSGBOX不出来啊。
cape114 2011-12-05
  • 打赏
  • 举报
回复
“希望能解释一下为什么没数据呢”

不可能没数据啊 我都试验过了的。

xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 2).Value = doc.SerialNo(0)
给EXCEL的第row行 第二列的表格赋值,列不够自己增加下就行啦。列也可以设置自增加,就是麻烦点,你自己研究以下吧。

“不过一个表单很可能有多个域,还有一个问题是这段代码应该是默认一个视图下的所有文档都是一个form的吧?

取视图里的文档啊 视图里有什么文档都取 跟Form名字没关系。取哪个域值你就doc.哪个域值就好了。
哪个值没取到 你先在前面MSGBOX 一下,看看表单的值取到没有。
hellodujiqiang 2011-12-05
  • 打赏
  • 举报
回复
刚刚看了你的这句话“取哪个域值你就doc.哪个域值就好了。”,让我明白了想去域的值需要自己一个一个的写代码,不是用某个代码都能写下来的。尝试了
xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 1).Value =doc.GetItemValue("POLICYNAME")(0)
这句话就给第row行第一个单元赋值了。‘哈哈 非常高兴

不过,我发现我输入了 doc. 后面自动显示出来的方法和属性没有SerialNo和DisStatus的方法,用MSGBOX显示doc.SerialNo(0)和doc.DisStatus(0)的值都是空,没有字符显示出来,怎么获得某个域的名字呢?

总之,非常感谢啦。
hellodujiqiang 2011-12-04
  • 打赏
  • 举报
回复
看来我还需要看看VB的东西,不过我想知道,这段代码为什么运行在我的lotusdesigner上却没有数据,我是在lotus的代理写的这段代码,数据库里有数据,我数据库里有2个视图,政策 和 Q&A 我把代码修改如下:

Sub Initialize

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument

Dim row
Dim xlsApp As Variant 'Excel对象

Set xlsApp = CreateObject("Excel.application")

If Not(xlsApp Is Nothing) Then
'在这个 Excel 文件当中添加一个 Sheet
xlsApp.Workbooks.Add
xlsApp.Visible = False ' 传值过程是否显示选择True则显示EXCEL,False则不显示。
row = 1
xlsApp.Workbooks(1).Worksheets( 1 ).Cells( 1 , 1).Value = "政策名" '第一行第一列,这里时给第一行的列加标题
xlsApp.Workbooks(1).Worksheets( 1 ).Cells( 1 , 2).Value = "BB" '第一行第二列
'xlsApp.Workbooks(1).Worksheets( 1 ).Cells( 1 , 3).Value = "CC"
'...................不够可以加行........................

' 导出数据至Excel
Set uidoc = ws.CurrentDocument
Set db = s.CurrentDatabase
Set view = db.GetView("政策")'文档所在的视图名字

'Dim dc As NotesDocumentCollection 这个是对视图中勾中的文档进行操作,并要把代理属性改成 all selected documents
'Set dc = db.UnprocessedDocuments
'Set doc = dc.GetFirstDocument

Set doc = view.GetFirstDocument

While Not(doc Is Nothing)

'循环给EXCEL表的两列赋值
row = row+1
xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 1).Value = doc.type(0)'type和SerialNo是要获取的表单中的某个域名字
xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 2).Value = doc.SerialNo(0)
'xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 3).Value = doc.DisStatus(0)

Set doc = view.GetNextDocument(doc)

Wend
xlsApp.ActiveWorkbook.SaveAs( "d:\xxxx.xls")'存放路径
'关闭资源
xlsApp.Quit
'资源释放
Set xlsApp = Nothing
'Msgbox("报表已经生成!")
'打开报表
ws.URLOpen("d:\xxxx.xls")
End If

Exit Sub

End Sub



希望能解释一下为什么没数据呢
fare2000 2011-12-04
  • 打赏
  • 举报
回复
建议了解一下Notes的基本概念,
Notes应用通常只是一个nsf文件,它包含了数据(就是文档),显示(Form,视图,...)及处理数据如何读取与保存的业务逻辑代码。也就是说:
Notes文档大致相当于关系数据库里的一条记录,
Form大致相当于程序的UI(比如,web应用程序的html页面)展示数据库用的,不同的是它也是定义文档数据字段的工具,说他是工具,是因为完全可以不用Form,独立地创建一个没有Form但包含字段的Notes文档。


1.我不知道这些代码是在哪里输入才能得到具体的数据,
你的电脑得安装了Notes,
然后你可以在Notes designer的写这些代码,并在Notes里运行,
也可以用VB写代码,运行在MS的产品里,比如Excel, Loutus Script语法和关键字基本上和标准的 VB Script兼容,写起来容易些,当然也可以用其他语言和工具,但是复杂。

hellodujiqiang 2011-12-03
  • 打赏
  • 举报
回复
我试验了这个代码,也基本都看懂了什么意思。但是我最后生成的excel只有一行两列,是手动添加的元素"AA"和"BB",某个视图下的文档里面的数据没有记录下来。

xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 1).Value = doc.type(0)
你注释的是:type和SerialNo是要获取的表单中的某个域名字
xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 2).Value = doc.SerialNo(0)
这句话是的作用是把这个域的对应值赋给这一行的第二个cell里面吗?

不过一个表单很可能有多个域,还有一个问题是这段代码应该是默认一个视图下的所有文档都是一个form的吧?
cape114 2011-12-02
  • 打赏
  • 举报
回复
你把上面的代码拷贝到你自己的代理里面,改改参数、视图名字什么的,就可以了。

Lotus 里的数据不只是只有表单。边实践边看书(多研究Designer的帮助)进步最快,我也新手,有问题大家多交流。
cape114 2011-12-02
  • 打赏
  • 举报
回复
http://blog.163.com/grace_xqf/blog/static/5343790200782895018660/

给你个链接,有导入EXCEL具体代码,代码什么意思,哪不明白,你看已查查Designer帮助或者先看看LotusScript语法就明白了,很简单的功能。
cape114 2011-12-02
  • 打赏
  • 举报
回复
你描述的代码是写在LotusScript里的,就是代理(Agent),你可以到网上找一段导出到Excel的代码(很多的),粘到你新建的代理里。

取整个数据库里的文档就用
Dim dc As NotesDocumentCollection
Set dc = db.UnprocessedDocuments'这条可以让你取到你勾中的文档(还需要修改代理设置),如果不需要可以不加。
Set doc = dc.GetFirstDocument
while not (doc is nothing)

"你的代码"
set doc = dc.getNextdocument(doc)

wend
如果时取某个视图里的就用

Dim view As NotesView
get view = db.GetView("视图名称")
Set doc = view.GetFirstDocument
后面一样了。
cape114 2011-12-02
  • 打赏
  • 举报
回复
最简单的 你研究以下吧 我试验过了可以用。
cape114 2011-12-02
  • 打赏
  • 举报
回复
Sub Initialize

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim s As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument

Dim row
Dim xlsApp As Variant 'Excel对象

Set xlsApp = CreateObject("Excel.application")

If Not(xlsApp Is Nothing) Then
'在这个 Excel 文件当中添加一个 Sheet
xlsApp.Workbooks.Add
xlsApp.Visible = False ' 传值过程是否显示选择True则显示EXCEL,False则不显示。
row = 1
xlsApp.Workbooks(1).Worksheets( 1 ).Cells( 1 , 1).Value = "AA" '第一行第一列,这里时给第一行的列加标题
xlsApp.Workbooks(1).Worksheets( 1 ).Cells( 1 , 2).Value = "BB" '第一行第二列
'xlsApp.Workbooks(1).Worksheets( 1 ).Cells( 1 , 3).Value = "CC"
'...................不够可以加行........................

' 导出数据至Excel
Set uidoc = ws.CurrentDocument
Set db = s.CurrentDatabase
Set view = db.GetView("vhDocNo")'文档所在的视图名字

'Dim dc As NotesDocumentCollection 这个是对视图中勾中的文档进行操作,并要把代理属性改成 all selected documents
'Set dc = db.UnprocessedDocuments
'Set doc = dc.GetFirstDocument

Set doc = view.GetFirstDocument

While Not(doc Is Nothing)

'循环给EXCEL表的两列赋值
row = row+1
xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 1).Value = doc.type(0)'type和SerialNo是要获取的表单中的某个域名字
xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 2).Value = doc.SerialNo(0)
'xlsApp.Workbooks(1).Worksheets( 1 ).Cells(row , 3).Value = doc.DisStatus(0)

Set doc = view.GetNextDocument(doc)

Wend
xlsApp.ActiveWorkbook.SaveAs( "d:\xxxx.xls")'存放路径
'关闭资源
xlsApp.Quit
'资源释放
Set xlsApp = Nothing
'Msgbox("报表已经生成!")
'打开报表
'ws.URLOpen("d:\xxxx.xls")
End If

Exit Sub

End Sub
hellodujiqiang 2011-12-02
  • 打赏
  • 举报
回复
我晚上可能晚一点在线 你可以先把你的版本发到我的QQ邮箱里 等我研究下后再请假你 谢谢啦
hellodujiqiang 2011-12-02
  • 打赏
  • 举报
回复
好的 不过你的QQ需要认证 问题是您的真实名字 要不你加我的QQ吧 745996495
cape114 2011-12-02
  • 打赏
  • 举报
回复
我在上班,现在没法给你改,你加我QQ:546651648 注明:csdn

晚上上网我发给你个简单版的,是我自己改的。
hellodujiqiang 2011-12-02
  • 打赏
  • 举报
回复
谢谢你给了这么多讲解,我把你给我的网址上的那整个代码考到一个代理中后出现了几个红的错误标示,我也不知道什么原因,我先把这几个代码行贴下来:
dbName=GetParaValue(docContext.Query_String_Decoded(0),"DbName","") '前十几行
printXML "OK" '后几行
ErrLog "删除文档|DeleteDocument" '后几行

代码中间有一些
'日期
xlApp.Range("H2").Select
xlApp.selection.Merge
xlApp.selection.font.size="10"
xlApp.selection.Font.Bold =True
xlApp.selection.HorizontalAlignment =3 '左右居中
xlApp.selection.VerticalAlignment=2 '上下居中
xlApp.selection.Font.name = "宋体" '字体
xlApp.selection.columnwidth="15"
xlApp.ActiveCell.FormulaR1C1 = "最后使用人"

这样的代码,是不是该的参数应该是 "最后使用人"?这个应该是form中的field? 但是每个form的field是不同的,难道都给写上?
我希望能给我个具体的,最好麻烦您给我改一下,哪些参数是需要修改的、
hellodujiqiang 2011-12-01
  • 打赏
  • 举报
回复
怎么没人给我点主意呢?帮我解决任何一个问题都有分的。。。
开发思路: 使用ADO通过ODBC链接进行Louts数据读取,在建立一个与SQL server数据库相连的ADO,将读取数据写入SQL server数据库。 安装环境: 首先安装lotus_notes853_win_SC(lotus客户端软件) 然后安装LOTUS_NOTES_SQL_853_W32_CIC6PEN(顺序好像有关系,win8.1安装64位不能正常使用,一定要安装32位的) 数据库连接: 先通过lotus客户端软件连接登陆成功,需要admin.id文件 通过ODBC 数据源(32 位) 添加 Lotus Notes SQL Driver(*.nsf)数据源,选择自己的loust数据库文件.nsf delphi ADO控件通过ODBC Drivers直接连接,本程序中用例名设置为LotusOA,每次连接需要输入lotus密码,其他开发这里就不在介绍可以看源代码 delphi ADO控件连接自己本地的SQL Server数据库,程序下载后自己修改 软件使用: 1、配置:通过config.ini修改LOTUSCONN,即LotusOA设置为自己的建立ODBC的名字,关系数据库修改DBCONN,本例中为SQLServer数据库 2、启动程序,点“数据源链接”,程序连接到lotus数据库和Sql server数据库 设置原始表名:通过lotus设计程序中的试图中可以看到,大部分是fm_Main,设置创建表名用于数据导出的表 3、获取表字段,会读处lotus数据的所有表名,自动目标生成表创建的sql语句,默认字段长度都是254,如需要可以自己修改 4、点“创建表”按钮,如果已创建了不要再点这个按钮 5、点“导出数据”,程序开始自动导出数据 如果目标数据库是其他类型数据库,可自己通过配置文件config.ini中的DBCONN进行修改 lotus导入关系数据库的资源一直很难找,自己的一点拙见,希望对大家有用。

535

社区成员

发帖
与我相关
我的任务
社区描述
企业开发 Exchange Server
社区管理员
  • 消息协作社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧