将Excel导入Access,动态获取列标题

时间:2016-01-22 21:50:24

标签: excel vba ms-access

我目前正在创建一个脚本,它将指定文件夹中的所有Excel工作表导入Microsoft访问中的唯一表。现在,事情是这个过程应该是每月或每两个月进行一次,这些excel表上的标题经常变化。我试图使用DoCmd.Transferspreadsheet方法,但我遇到的问题是字段与目标表不匹配。现在,我不能只使用适当的字段名称创建一个表,然后导入到该表中,因为正如我所说,excel文件的标题经常更改。

我想要一种方法将excel表格导入新表格,表格应该自动采用excel表格的字段,无论它们是什么。所以基本上每次导入时,都应该用适当的字段创建一个新表。

我唯一的解决方法是每次导入并遍历excel文件的第一行时创建一个新表,以查​​找字段的名称,然后在创建表时使用这些字段。

但这是一个混乱的解决方法。我知道可以使用microsoft access UI导入到全新的表中。只需点击几下,然后就可以了。

我想要一个程序化的解决方案。

.videobg {
margin:0;
padding:0;
width:100%; 
height:100%;
position: static;
z-index: -100;
min-height: 250px;
max-height: 423px;
}

.videoheader {
    margin:0;
    padding:0;
    width:100%;
    height:100%;

}

@media (max-width: 767px) {
    .videobg {
        background: url('images/home/header.jpg') center center / cover no-repeat;
        height:266px;
    }

    .videoheader {
        display: none;
    }
}


@media(max-width:768px){
.videobg {
height:266px;
     }
}

@media (max-width: 884px) {
    .videobg {
        height:280px;
    }
}


@media (max-width: 1000px) {
    .videobg {
        height:347px;
    }
}

2 个答案:

答案 0 :(得分:2)

一种可能的解决方案可能是使用“动态”链接到Excel数据,例如,

CurrentDb.Execute _
        "SELECT * INTO myNewTable " & _
        "FROM [Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=C:\Users\Gord\Desktop\foo.xlsx].[Sheet1$]", _
        dbFailOnError

或者,正如Parfait在上面的评论中所说,这似乎也有效......

DoCmd.TransferSpreadsheet _
        TransferType:=acImport, _
        SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _
        TableName:="myNewTable", _
        FileName:="C:\Users\Gord\Desktop\foo.xlsx", _
        HasFieldNames:=True

...其中[myNewTable]尚不存在。

答案 1 :(得分:1)

链接电子表格并阅读标题:

DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, "xlsTable1" , strPathFile, True 

然后,您可以循环链接表的字段以读取字段名称。