如何将一张excel文件导入access数据库?
Posted
技术标签:
【中文标题】如何将一张excel文件导入access数据库?【英文标题】:how to import a sheet of an excel file into the access database? 【发布时间】:2017-05-23 11:59:21 【问题描述】:我想将一张excel文件导入access数据库
Private Sub Commande9_Click()
Dim filepath As String
filepath = "C:\Users\TXZG6067\Desktop\com.xlsx"
DoCmd.TransferSpreadsheet acImport, , "ImportFromExcel", filepath, True
End Sub
我需要你的帮助,谢谢。
【问题讨论】:
什么没有发生/正在发生什么? 我有一个包含多张工作表的 excel 文件,我只想导入一张工作表 然后添加一个要导入的范围。查看TransferSpreadsheet的帮助msdn.microsoft.com/en-us/library/office/ff844793.aspx 【参考方案1】:要将 Excel 文件或其一张表导入数据库,您必须执行以下步骤:
1) 将该工作表/文件转换为逗号分隔符。使用Save as
选项进行转换。
2) 使用StreamReader
类读取此文件。验证列长度和每列包含的数据。
3) 使用StringBuilder
类(推荐)创建查询,但您也可以使用string
。如:
StringBuilder Sb = new StringBuilder("Insert Into table_name Values(");
foreach(row in dt.rows)
sb = null;
int j = 1;
for(int i=0; i<columns_Count-1 ; i++) //Column count minus one to handle last column data
Sb.Append("'"+row[0][i]+"',");
j++;
if(j == columns_Count) //last column appends data without comma
Sb.Append("'"+row[0][columns_Count]+"'");
Sb.Append(")");
//execute insert query here
【讨论】:
这可能有效,但过于复杂。 Access 具有导入 Excel 文件的功能。不必先更改文件类型,然后再导入更改的文件。此外,Access 还具有导入您未使用的 CSV 文件的内置功能。您正在重新发明***两次(尽管它可能是一个更强大的***)。应关注 DoCmd.TransferSpreadsheet 中的特定错误并修复它。【参考方案2】:您可以在 Excel VBA (ADO) 中尝试此操作,假设您的数据位于 A 到 C 列等等。
Dim dbpath as String, _
x as long, _
rs As ADODB.Recordset, _
cn As ADODB.Connection
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
dbPath = /your db path
cn.Open "Provider=Microsoft.ace.OLEDB.12.0;Data Source=" & dbPath
rs.Open "Consolidated", cn, adOpenKeyset, adLockOptimistic, adCmdTable
For x = 2 To LastRow
rs.AddNew
rs.Fields("Fieldnm1") = Range("A" & x).value
rs.Fields("Fieldnm2") = Range("B" & x).value
rs.Fields("Fieldnm3") = Range("C" & x).value
rs.Update
Next x
rs.Close
Set cn = Nothing
Set rs = Nothing
【讨论】:
【参考方案3】:指定工作表名称:
DoCmd.TransferSpreadsheet acImport, , "ImportFromExcel", filepath, True, "WorksheetName$"
或:
DoCmd.TransferSpreadsheet acImport, , "ImportFromExcel", filepath, True, "WorksheetName!"
【讨论】:
我在答案中添加了另一个选项。 错误执行'3011'【参考方案4】:DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9 , _
"TableOrQuery","YourExcelPath", _
True, "TheNameofTheSheetYouWant"
【讨论】:
来自审核队列:我可以请求您在源代码周围添加一些上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。 @RBT 我只是想编辑以给出解释,但已经有 3 个答案有足够的解释,所以我没有......但我现在会注意到! :)【参考方案5】:语法:
expression .TransferSpreadsheet(TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range, UseOA)
例子:
DoCmd.TransferSpreadsheet acImport, 3, _
"Employees","C:\Lotus\Newemps.wk3", True, "A1:G12"
你必须给它SpreadsheetType,有关SpreadsheetType
的详细信息请参见下面的链接:
https://msdn.microsoft.com/en-us/library/office/ff196017.aspx
【讨论】:
能不能给我写我不太明白的代码以上是关于如何将一张excel文件导入access数据库?的主要内容,如果未能解决你的问题,请参考以下文章
将文件夹中的所有文件(所有 excel 文件)导入到 access 数据库中的单个表中
Access2007将Excel表导入至Access2007的当中一张已存在的表之中