Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

关于Excel 导入的表中有空行,如何导入时按上条数据自动填充

yuayua  发表于:2021-01-11 18:23:08  
复制

从其它软件导出一份销售明细,其中包含了主表与子明细表表,但是主表销售编号只显示一行,余下用空行来表示明细表属于哪个销售编号,现在想从主表选择部分字段,明细表选择部分字段导入到ACCESS的表中,同样就会出现空行,分别导入再合并,明细表又没有销售编号,在Excel 中手动填充的话几万条太费时间,请师傅们帮个忙想想指点下点击下载此附件,不胜感激!

 

Top
vious 发表于:2021-01-11 19:52:39

建议:

1.采用主、子表,主表导入A:Q列;子表导入A、R:X列;再采用外键查询即可;主表导入时判断R列是否有数据,无数据时表示主表导入完成。

2.只用一个表的话,循环中判断为空,即导入上面有数据的列即可;

以上均采用VBA实现



西出阳关无故人 发表于:2021-01-12 15:16:08

无论在excel端,还是在access端对数据进行处理(给每行都添加单据编号),都要用vba进行循环.貌似在excel端的代码更简单.

excel端代码

Private Sub CommandButton1_Click()
    Dim djbh
    For i = 3 To Me.UsedRange.Rows.Count
        If Cells(i, 1) <> "" Then
            djbh = Cells(i, 1)
        Else
            Cells(i, 1) = djbh
        End If
    Next i
End Sub

运行上述代码后,在access端进行导入.当然这种方式不适应经常经常从其他软件导出数据并导入access的情况.




西出阳关无故人 发表于:2021-01-12 16:05:48

在access端处理也不难,点击下载此附件:

一个窗体,一个按钮(Command0):

Private Sub Command0_Click()
    Dim pName
    With Application.FileDialog(3)
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Excel 文件", "*.xls*"
      '  .Filters.Add "所有", "*.*"
        If .Show Then
            For Each pName In .SelectedItems
                inputData pName
            Next
        End If
    End With
End Sub


Function inputData(pName)
    Dim Conn As New ADODB.Connection
    Dim Rec As New ADODB.Recordset 'Excel表记录集
    Dim Rst As New ADODB.Recordset 'acc表记录集
    Dim i
    Dim DJBH    '单据编号
    Dim DJRQ
    Dim KHQC
    Dim JSR
    Dim SKRQ
    Dim rows As Long    'Excel的行数,条件是Excel表格不能有空行.
    Conn.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;imex=1';data source=" & pName
    Rec.Open "select * from [销售出库单$]", Conn, adOpenStatic, adLockReadOnly
    rows = Rec.RecordCount
    Rec.Close
    Set Rec = New ADODB.Recordset
    Rec.Open "select * from [销售出库单$a2:au" & rows + 1 & "]", Conn, adOpenStatic, adLockReadOnly

    Rst.Open "select * from 销售明细", CurrentProject.Connection, adOpenStatic, adLockPessimistic
    For i = 1 To Rec.RecordCount
        With Rst
            .AddNew
            If Rec("单据编号") <> "" Then
                DJBH = Rec("单据编号")
                DJRQ = Rec("单据日期")
                KHQC = Rec("客户全称")
                JSR = Rec("经手人")
                SKRQ = Rec("收款日期")
            End If
            .Fields("单据编号") = DJBH
            .Fields("单据日期") = DJRQ
            .Fields("客户全称") = KHQC
            .Fields("经手人") = JSR
            .Fields("收款日期") = SKRQ
            .Fields("商品编号") = Rec("商品编号")
            .Fields("商品名称") = Rec("商品名称")
            .Fields("商品规格") = Rec("商品规格")
            .Fields("批号") = Rec("批号")
            .Fields("数量") = Rec("数量")
            .Fields("含税单价") = Rec("含税单价")
            .Fields("含税金额") = Rec("含税金额")
            .Update
        End With
        Rec.MoveNext
    Next i
    Rec.Close
    Rst.Close
    DoCmd.OpenTable "销售明细"
End Function




胡大威 发表于:2021-01-13 21:59:11
我觉得吧,这个还是把EXCEL做为连接表导入ACCESS后,然后用追加查询新增数据比较方便,写代码太麻烦。追加查询的时候加一个条件,限制为空值的时候不导入就行了。

总记录:4篇  页次:1/1 9 1 :