设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 3501|回复: 13
打印 上一主题 下一主题

[模块/函数] 如何用代码实现导入功能?

[复制链接]
跳转到指定楼层
1#
发表于 2010-12-11 23:21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何用代码实现图中导入功能?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2010-12-12 09:33:15 | 只看该作者
docmd.RunCommand acCmdImport
3#
 楼主| 发表于 2010-12-12 15:35:19 | 只看该作者
本帖最后由 sxgaobo 于 2010-12-12 15:51 编辑

谢谢站长!!!
可以加参数吗?
比如我要将:C盘,A文件夹中的B.xls中Sheet1中的数据导如表1中,如何设置啊?
麻烦各位了!!!
4#
发表于 2010-12-12 19:54:03 | 只看该作者
本帖最后由 todaynew 于 2010-12-12 19:57 编辑
sxgaobo 发表于 2010-12-12 15:35
谢谢站长!!!
可以加参数吗?
比如我要将:C盘,A文件夹中的B.xls中Sheet1中的数据导如表1中 ...


可直接调用内置的导入窗体进行设置,请参见《链接和导入管理器》一文。



也可自己编写一个导入导出窗体,可参见《数据导入导出》一文。

5#
 楼主| 发表于 2010-12-13 10:50:02 | 只看该作者
谢谢版主!
我那Excel表格式和存放位置是固定的,如何能做成一键将其导入到指定的表中?
6#
发表于 2010-12-13 12:34:09 | 只看该作者
sxgaobo 发表于 2010-12-13 10:50
谢谢版主!
我那Excel表格式和存放位置是固定的,如何能做成一键将其导入到指定的表中?

TransferSpreadsheet 方法
参阅参阅参阅参阅在 Visual Basic 中,TransferSpreadsheet 方法执行 TransferSpreadsheet 操作。

expression.TransferSpreadsheet(TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range, UseOA)
expression      必需。返回“应用于”列表中的一个对象的表达式。

TransferType   可选 AcDataTransferType。

AcDataTransferType 可以是下列 AcDataTransferType 常量之一:
acExport
acImport 默认
acLink
如果将该参数留空,将采用默认常量 (acImport)。


SpreadsheetType   可选 AcSpreadSheetType。

AcSpreadSheetType 可以是这些 AcSpreadSheetType 常量之一:
acSpreadsheetTypeExcel3
acSpreadsheetTypeExcel4
acSpreadsheetTypeExcel5
acSpreadsheetTypeExcel7
acSpreadsheetTypeExcel8 默认
acSpreadsheetTypeExcel9 默认
acSpreadsheetTypeLotusWJ2 - 仅适用于日文版
acSpreadsheetTypeLotusWK1
acSpreadsheetTypeLotusWK3
acSpreadsheetTypeLotusWK4
注释  可以链接 Lotus 1-2-3 电子表文件中的数据,但是这些数据在 Microsoft Access 中是只读的。可以导入和链接 Lotus .WK4 文件,但是不能将 Microsoft Access 数据导出到此电子表格式中。而且,Microsoft Access 不再支持使用此方法导入、导出或链接 Lotus .WKS 或 Microsoft Excel 2.0 电子表中的数据。

如果将该参数留空,将采用默认常量 (acSpreadsheetTypeExcel8)。


TableName     可选 Variant 型。字符串表达式,表示要向其中导入电子表格数据、从中导出电子表格数据或链接电子表格数据的 Microsoft Access 表的名称,或要将其结果导出到电子表格的 Microsoft Access 选择查询的名称。

FileName     可选 Variant 型。字符串表达式,表示要从其中导入、导出到或链接到的电子表格的名称与路径。

HasFieldNames     可选 Variant 型。使用 True (-1) 可以在导入或链接时,将电子表格中的第一行用作字段名。使用 False (0) 可以将数据表第一行看成普通数据。如果将该参数留空,则采用默认值 (False)。在将 Microsoft Access 表或选择查询数据导出到电子表格中时,无论为该参数输入了何值,字段名称都将插入到电子表格的第一行中。

Range     可选 Variant 型。字符串表达式,表示电子表格中单元格的有效范围或范围名称。该参数仅可用于导入。若要导入整个电子表格,请将该参数留空。导出到电子表格时,必须将该参数留空。如果输入了一个范围,导出将失败。

UseOA     可选 Variant 型。

说明
有关该操作及其参数如何使用的详细信息,请参阅该操作的主题。

语法中的可选参数允许留空,但是必须包含参数的逗号。如果将位于末端的参数留空,则在指定的最后一个参数后面不需使用逗号。


注释  还可以通过使用 Recordset 对象的 ActiveConnection 属性,来使用 ActiveX 数据对象 (ADO) 创建链接。


示例
下面的示例在 Lotus 电子表格 Newemps.wk3 的指定范围内将表导入到 Microsoft Access 的“Employees”表,并用电子表格中的第一行作为字段名。

DoCmd.TransferSpreadsheet acImport, 3, _
    "Employees","C:\Lotus\Newemps.wk3", True, "A1:G12"
               
7#
 楼主| 发表于 2010-12-13 16:22:58 | 只看该作者
谢谢版主!
DoCmd.TransferSpreadsheet acImport, 8, "abc", "D:\a\b.xls", True, ""
应该是这样,我想将b.xls中不同的工作表(如:Sheet1、Sheet2)导入到不同的表中,该如何设置啊?
8#
发表于 2010-12-13 16:33:59 | 只看该作者
下面是我写的一个导入,导到固定的表里面。
Dim xlsApplication As New Excel.Application
Dim xlsWorkBook As New Excel.Workbook
Dim xlsWorkSheet As New Excel.Worksheet
Dim xlsFileSearch As FileSearch
Dim strExcelFile As String
Dim lngExcelRowCount As Long
Dim lngExcelColumnCount As Long
Dim lngRowIndex As Long
Dim lngColumnIndex As Long
Dim strExcelArray(6) As String
Dim dlgOpenExcel As FileDialog
Dim cnn As New ADODB.Connection
Dim cmm As New ADODB.Command
Set cnn = CurrentProject.Connection
Set cmm.ActiveConnection = cnn


'首先判断是否符合导入条件-->新增记录,有订单单号
If IsNull(Me.月份) = True Or Me.月份 = "" Then
    MsgBox "--请输入导入的月份--", vbInformation, "提示"
    Exit Sub
ElseIf Me.N_房租水电作业单身.Form.Recordset.RecordCount > 0 Then
    MsgBox "此单已有资料不可以再次导入!", vbInformation, "提示"
    Exit Sub
End If
'打开Excel文件
Set dlgOpenExcel = Application.FileDialog(msoFileDialogOpen)
With dlgOpenExcel
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Microsoft Excel 文件", "*.xls"
    .FilterIndex = 1
    If .Show = -1 Then
        strExcelFile = dlgOpenExcel.SelectedItems(1)
        '判断所要打开的Excel文件是否存在
        Set xlsFileSearch = Application.FileSearch
        With xlsFileSearch
            .NewSearch
            .LookIn = Left(strExcelFile, InStrRev(strExcelFile, "\") - 1)
            .FileName = Right(strExcelFile, Len(strExcelFile) - InStrRev(strExcelFile, "\"))
            If .Execute > 0 Then '文件存在
                '初始化数据源(Excel)
                xlsApplication.Workbooks.Open strExcelFile
                Set xlsWorkBook = xlsApplication.Workbooks(.FileName)
                Set xlsWorkSheet = xlsWorkBook.Worksheets(1)
                xlsWorkSheet.Activate
               
                lngExcelRowCount = xlsWorkSheet.UsedRange.Rows.Count '记录行数
                lngExcelColumnCount = xlsWorkSheet.UsedRange.Columns.Count '记录列数
               
                If lngExcelRowCount > 1 And lngExcelColumnCount > 1 Then
                    SysCmd acSysCmdClearStatus
                    For lngRowIndex = 2 To lngExcelRowCount '第一行为表列名
                        For lngColumnIndex = 1 To lngExcelColumnCount
                            strExcelArray(lngColumnIndex) = xlsWorkSheet.Cells(lngRowIndex, lngColumnIndex).Value
                        Next lngColumnIndex
                        
                            cmm.CommandText = "Insert [N-房租水电单身] (年度,月份,员工代号,水电,姓名,部门代号) " & _
                                                "Values ('" & Me.年度 & "','" & Me.月份 & "','" & strExcelArray(1) & "','" & Round(strExcelArray(2), 1) & "'," & _
                                                        "'" & DLookup("姓名", "N-基本资料单头", "[员工代号]='" & strExcelArray(1) & "'") & "'," & _
                                                        "'" & DLookup("部门别", "N-基本资料单头", "[员工代号]='" & strExcelArray(1) & "'") & "')"
                            cmm.Execute
                            SysCmd acSysCmdSetStatus, "成功导入:" & lngRowIndex - 1 & " / " & lngExcelRowCount - 1
                    Next lngRowIndex
               
                    Me.N_房租水电作业单身.Form.Refresh
            
                    MsgBox "导入成功!", vbInformation
                    SysCmd acSysCmdClearStatus
                Else
                    MsgBox "您所打开的Excel文件中,没有任何记录!", vbExclamation
                End If
            Else '文件不存在
                MsgBox "文件不存在!" & vbCrLf & strExcelFile, vbExclamation
            End If
        End With
    End If
End With

Err_Handler_Command29:
    cnn.Close
    Set cnn = Nothing
    Set dlgOpenExcel = Nothing
    Set xlsFileSearch = Nothing
    Set xlsWorkSheet = Nothing
   
    xlsWorkBook.Close False
    Set xlsWorkBook = Nothing
    xlsApplication.DisplayAlerts = False
    xlsApplication.Quit
   
    Set xlsApplication = Nothing
If Err.number <> 0 Then
    MsgBox Err.Description, vbExclamation
End If
9#
发表于 2010-12-13 17:05:06 | 只看该作者
本帖最后由 todaynew 于 2010-12-13 17:13 编辑
sxgaobo 发表于 2010-12-13 16:22
谢谢版主!
DoCmd.TransferSpreadsheet acImport, 8, "abc", "D:\a\b.xls", True, ""
应该是这样,我想将 ...

可以设置导入范围:
DoCmd.TransferSpreadsheet acImport, 8,"表1","D:\a\b.xls", True, "Sheet1"
DoCmd.TransferSpreadsheet acImport, 8,"表2","D:\a\b.xls", True, "Sheet2"
DoCmd.TransferSpreadsheet acImport, 8,"表3","D:\a\b.xls", True, "Sheet3"
DoCmd.TransferSpreadsheet acImport, 8,"表4","D:\a\b.xls", True, "Sheet4"

红尘如烟的玩法是这样:

DoCmd.RunSQL "Insert INTO 表1 Select * FROM [Excel 8.0;DATABASE=D:\a\b.xls].[Sheet1$]"
DoCmd.RunSQL "Insert INTO 表2 Select * FROM [Excel 8.0;DATABASE=D:\a\b.xls].[Sheet2$]"
DoCmd.RunSQL "Insert INTO 表3 Select * FROM [Excel 8.0;DATABASE=D:\a\b.xls].[Sheet3$]"
DoCmd.RunSQL "Insert INTO 表4 Select * FROM [Excel 8.0;DATABASE=D:\a\b.xls].[Sheet4$]"

10#
 楼主| 发表于 2010-12-13 21:51:46 | 只看该作者
谢谢版主!
第2种方法可以,
DoCmd.TransferSpreadsheet acImport, 8,"表1","D:\a\b.xls", True, "Sheet1"
不知道为什么报错,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-17 00:04 , Processed in 0.091658 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表