如何把access数据库的内容导出到work文档中
回答:如何用VB编写程序实现把access数据库的内容导出到work文档中进行编辑打印?
回答:VB数据库导出WORD
这里的数据库采用的是ACCESS生成的MDB数据库。考虑到在VB中画表等操作比较繁琐,所以采用了饮用模版的导出形式。仅供大家学习参考。
DimcnAsNewADODB.Connection‘定义数据库
DimrsAsNewADODB.Recordset
DimscanAsString‘存储查数据库
DimAppwordAsWord.Application’定义WORD模型变量
DimNewwordAsWord.Document
SetAppword=NewWord.Application
SetNewword=Appword.Documents.Add(App.Path "\stencil" "\stencil.doc")‘这里是打开模版文档。stencil是模板的意思。可根据自己的需要替换。
这里的数据库采用的是ACCESS生成的MDB数据库。考虑到在VB中画表等操作比较繁琐,所以采用了饮用模版的导出形式。仅供大家学习参考。
DimcnAsNewADODB.Connection‘定义数据库
DimrsAsNewADODB.Recordset
DimscanAsString‘存储查数据库
DimAppwordAsWord.Application’定义WORD模型变量
DimNewwordAsWord.Document
SetAppword=NewWord.Application
SetNewword=Appword.Documents.Add(App.Path "\stencil" "\stencil.doc")‘这里是打开模版文档。stencil是模板的意思。可根据自己的需要替换。
Appword.Visible=False‘隐藏WORD。导出时不在任务栏出现WORD文档。
Appword.WindowState=wdWindowStateMinimize
scan=text2(0).Text'按编号搜索需要导出word的记录,一次只能导出一条记录
rs.CursorLocation=adUseClient
ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" App.Path "\data.mdb;JetOLEDB:DatabasePassword=harry2000"
cn.OpenConnectionString
rs.Open"select*fromADMINwhere编号='"&scan&"'",cn,adOpenKeyset,adLockOptimistic‘查需要导出的记录
Ifrs.RecordCount=0Then’如果不存在该记录
MsgBox"请在左边选择需要导出的记录"
Appword.Documents.Close
Appword.Quit
ExitSub
Else‘如果存在记录则运行以下代码
Appword.WindowState=wdWindowStateMinimize
scan=text2(0).Text'按编号搜索需要导出word的记录,一次只能导出一条记录
rs.CursorLocation=adUseClient
ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" App.Path "\data.mdb;JetOLEDB:DatabasePassword=harry2000"
cn.OpenConnectionString
rs.Open"select*fromADMINwhere编号='"&scan&"'",cn,adOpenKeyset,adLockOptimistic‘查需要导出的记录
Ifrs.RecordCount=0Then’如果不存在该记录
MsgBox"请在左边选择需要导出的记录"
Appword.Documents.Close
Appword.Quit
ExitSub
Else‘如果存在记录则运行以下代码
WithNewword’设置模版表格和在表格中填入数据库内容。
.Tables(1).Cell(1,1).Range.Text=(Format(rs!日期,"yyyy年mm月dd日"))
.Tables(1).Cell(1,3).Range.Text="第"&rs!次数&"次到访"
.Tables(2).Cell(1,2).Range.Text=(rs!姓名)
.Tables(2).Cell(1,4).Range.Text=(rs!性别)
.Tables(2).Cell(1,6).Range.Text=(rs!年龄)
.Tables(2).Cell(2,2).Range.Text=(rs!所在单位&rs!所在职位)
.Tables(2).Cell(2,4).Range.Text=(rs!)
.Tables(2).Cell(3,2).Range.Text=(rs!领导)
.Tables(2).Cell(3,4).Range.Text=(rs!时间)'可以根据自己的需要设置填写内容。
EndWith
Appword.ChangeFileOpenDirectory(App.path "\导出WORD文件夹")
Appword.ActiveDocument.SaveAsFileName:=(App.path "\导出WORD文件夹\"&rs!姓名&Format(Now,"yyyy-mm-dd")&".doc"),FileFormat:=wdFormatDocument,LockComments:=False,Password:="",AddToRecentFiles:=True,WritePassword:="",ReadOnlyRecommended:=False,EmbedTrueTypeFonts:=False,SaveNativePictureFormat:=False,SaveFormsData:=False,SaveAsAOCELetter:=False
.Tables(1).Cell(1,1).Range.Text=(Format(rs!日期,"yyyy年mm月dd日"))
.Tables(1).Cell(1,3).Range.Text="第"&rs!次数&"次到访"
.Tables(2).Cell(1,2).Range.Text=(rs!姓名)
.Tables(2).Cell(1,4).Range.Text=(rs!性别)
.Tables(2).Cell(1,6).Range.Text=(rs!年龄)
.Tables(2).Cell(2,2).Range.Text=(rs!所在单位&rs!所在职位)
.Tables(2).Cell(2,4).Range.Text=(rs!)
.Tables(2).Cell(3,2).Range.Text=(rs!领导)
.Tables(2).Cell(3,4).Range.Text=(rs!时间)'可以根据自己的需要设置填写内容。
EndWith
Appword.ChangeFileOpenDirectory(App.path "\导出WORD文件夹")
Appword.ActiveDocument.SaveAsFileName:=(App.path "\导出WORD文件夹\"&rs!姓名&Format(Now,"yyyy-mm-dd")&".doc"),FileFormat:=wdFormatDocument,LockComments:=False,Password:="",AddToRecentFiles:=True,WritePassword:="",ReadOnlyRecommended:=False,EmbedTrueTypeFonts:=False,SaveNativePictureFormat:=False,SaveFormsData:=False,SaveAsAOCELetter:=False
Appword.Documents.Close
Appword.Quit
MsgBox"导出成功,"&rs!姓名&Format(Now,"yyyy-mm-dd")&"的资料保存于"&vbCrLf&vbCrLf&App.path "\导出WORD文件夹"
EndIf
SetAppword=Nothing‘交还控制权
SetNewword=Nothing
Newword.Close
rs.Close’关闭数据库
注意事项:
Appword.Quit
MsgBox"导出成功,"&rs!姓名&Format(Now,"yyyy-mm-dd")&"的资料保存于"&vbCrLf&vbCrLf&App.path "\导出WORD文件夹"
EndIf
SetAppword=Nothing‘交还控制权
SetNewword=Nothing
Newword.Close
rs.Close’关闭数据库
注意事项:
1以上是基本的操作,如果想在VB中对WORD操作。可以在WORD中录制宏看一下代码,然后复制过来稍作修改即可。
2上面的代码中用到的模版是之前设置好表格。
.Tables(1).Cell(1,1).Range.Text这个意思是在表格1中的第一个表格的内容
3导出完毕后主要交还控制权。
4这段代码运行时确保电脑中没有运行WORD程序,不然会弹出“由于应用程序忙。。。”所以在到处前应判断程序中是否运行WORD程序。
判断代码如下:
'在通用写入如下代码。
PrivateDeclareFunctionCreateToolhelp32SnapshotLib"kernel32"(ByValdwFlagsAsLong,ByValth32ProcessIDAsLong)AsLong
PrivateDeclareFunctionProcess32FirstLib"kernel32"(ByValhSnapshotAsLong,lppeAsPROCESSENTRY32)AsLong
PrivateDeclareFunctionProcess32NextLib"kernel32"(ByValhSnapshotAsLong,lppeAsPROCESSENTRY32)AsLong
PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong
PrivateDeclareFunctionOpenProcessLib"kernel32"(ByValdwDesiredAccessAsLong,ByValblnheritHandleAsLong,ByValdwAppProcessIdAsLong)AsLong
PrivateDeclareFunctionTerminateProcessLib"kernel32"(ByValApphProcessAsLong,ByValuExitCodeAsLong)AsLong
PrivateTypePROCESSENTRY32
dwSizeAsLong
cntUsageAsLong
th32ProcessIDAsLong
th32DefaultHeapIDAsLong
th32ModuleIDAsLong
cntThreadsAsLong
th32ParentProcessIDAsLong
pcPriClassBaseAsLong
dwFlagsAsLong
szExeFileAsString*1024
PrivateDeclareFunctionTerminateProcessLib"kernel32"(ByValApphProcessAsLong,ByValuExitCodeAsLong)AsLong
PrivateTypePROCESSENTRY32
dwSizeAsLong
cntUsageAsLong
th32ProcessIDAsLong
th32DefaultHeapIDAsLong
th32ModuleIDAsLong
cntThreadsAsLong
th32ParentProcessIDAsLong
pcPriClassBaseAsLong
dwFlagsAsLong
szExeFileAsString*1024
EndType
access数据库生成网页版ConstTH32CS_SNAPHEAPLIST=&H1
ConstTH32CS_SNAPPROCESS=&H2
ConstTH32CS_SNAPTHREAD=&H4
ConstTH32CS_SNAPMODULE=&H8
ConstTH32CS_SNAPALL=(TH32CS_SNAPHEAPLISTOrTH32CS_SNAPPROCESSOrTH32CS_SNAPTHREADOrTH32CS_SNAPMODULE)
ConstTH32CS_INHERIT=&H80000000
DimpidAsLong
PrivateSubCloseword()'关闭系统中运行的WORD
access数据库生成网页版ConstTH32CS_SNAPHEAPLIST=&H1
ConstTH32CS_SNAPPROCESS=&H2
ConstTH32CS_SNAPTHREAD=&H4
ConstTH32CS_SNAPMODULE=&H8
ConstTH32CS_SNAPALL=(TH32CS_SNAPHEAPLISTOrTH32CS_SNAPPROCESSOrTH32CS_SNAPTHREADOrTH32CS_SNAPMODULE)
ConstTH32CS_INHERIT=&H80000000
DimpidAsLong
PrivateSubCloseword()'关闭系统中运行的WORD
DimmyAsPROCESSENTRY32
DimlAsLong
Diml1AsLong
DimmNameAsString
DimiAsInteger
l=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)
IflThen
Y.dwSize=1060
If(Process32First(l,my))Then'遍历第一个进程
Do
i=InStr(1,my.szExeFile,Chr(0))
mName=LCase(Left(my.szExeFile,i-1))
IfTrim(mName)=""Then'这里填你调用的程序进程名
pid=my.th32ProcessID
DimmProcIDAsLong
DimlAsLong
Diml1AsLong
DimmNameAsString
DimiAsInteger
l=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)
IflThen
Y.dwSize=1060
If(Process32First(l,my))Then'遍历第一个进程
Do
i=InStr(1,my.szExeFile,Chr(0))
mName=LCase(Left(my.szExeFile,i-1))
IfTrim(mName)=""Then'这里填你调用的程序进程名
pid=my.th32ProcessID
DimmProcIDAsLong
mProcID=OpenProcess(1&,-1&,pid)
TerminateProcessmProcID,0&
ExitSub
EndIf
LoopUntil(Process32Next(l,my)<1)'遍历所有进程知道返回值为False
EndIf
l1=CloseHandle(l)
EndIf
EndSub
PrivateSubCommand1_Click()
DimoAsObject
Seto=GetObject(,"Word.Application")
IfoIsNothingThen
TerminateProcessmProcID,0&
ExitSub
EndIf
LoopUntil(Process32Next(l,my)<1)'遍历所有进程知道返回值为False
EndIf
l1=CloseHandle(l)
EndIf
EndSub
PrivateSubCommand1_Click()
DimoAsObject
Seto=GetObject(,"Word.Application")
IfoIsNothingThen
Seto=Nothing
Else
sc=MsgBox("程序检测到您的系统中正在运行着“word”程序,请先保存,按确定以后会自动关闭所有word程序!",vbOKCancel vbQuestion,提示)
Ifsc=1Then
Closeword
Else
ExitSub
EndIf
EndIf
......这里填写导出WORD的代码。
Endsub
Else
sc=MsgBox("程序检测到您的系统中正在运行着“word”程序,请先保存,按确定以后会自动关闭所有word程序!",vbOKCancel vbQuestion,提示)
Ifsc=1Then
Closeword
Else
ExitSub
EndIf
EndIf
......这里填写导出WORD的代码。
Endsub
回答:新建的Word和已有的Word的代码肯定是不一样的
这点LZ还需要指明
回答:代码很多,搜一下就行,不过1楼的已经很详细了,顶一下
回答:#2楼
回答:在ACCESS里面存的,都是表格的形式,一张张物理表。你要导出编辑,导出成EXCEL的不是更好??
如果用EXCEL的导出,就更加简单了。几行代码就搞定
如果用EXCEL的导出,就更加简单了。几行代码就搞定
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论