【问题标题】:how to import a sheet of an excel file into the access database?如何将一张excel文件导入access数据库?
【发布时间】: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

我需要你的帮助,谢谢。

【问题讨论】:

标签: sql excel ms-access vba


【解决方案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

    【讨论】:

    • 能不能给我写我不太明白的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2018-12-12
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多