如何将一张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数据库?的主要内容,如果未能解决你的问题,请参考以下文章

C语言如何将外部数据导入?

将文件夹中的所有文件(所有 excel 文件)导入到 access 数据库中的单个表中

Access2007将Excel表导入至Access2007的当中一张已存在的表之中

如何批量导入数据到Sqlite数据库

如何在从 Excel 导入的表中的 Access 中分配外键

将一张excel表中的数据全部粘贴到txt文本文件中,如何做