Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将excel文件的工作表导入access数据库?_Sql_Excel_Ms Access_Vba - Fatal编程技术网

Sql 如何将excel文件的工作表导入access数据库?

Sql 如何将excel文件的工作表导入access数据库?,sql,excel,ms-access,vba,Sql,Excel,Ms Access,Vba,我想将一张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 我需要你的帮助,谢谢 指定工作表名称: DoCmd.TransferSpreadsh

我想将一张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

我需要你的帮助,谢谢

指定工作表名称:

DoCmd.TransferSpreadsheet acImport, , "ImportFromExcel", filepath, True, "WorksheetName$"
或:


指定工作表名称:

DoCmd.TransferSpreadsheet acImport, , "ImportFromExcel", filepath, True, "WorksheetName$"
或:


要将Excel文件或其中一个工作表导入数据库,必须执行以下步骤:

1) 将该工作表/文件转换为逗号分隔符。使用
另存为
选项进行转换

2) 使用
StreamReader
class读取此文件。验证列长度和每列包含的数据

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
}
StringBuilder Sb=new StringBuilder(“插入表_名称值(”);
foreach(数据行中的行)
{
sb=null;
int j=1;

对于(int i=0;i要将Excel文件或其中一个工作表导入数据库,必须执行以下步骤:

1) 将该工作表/文件转换为逗号分隔符。使用
另存为
选项进行转换

2) 使用
StreamReader
class读取此文件。验证列长度和每列包含的数据

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
}
StringBuilder Sb=new StringBuilder(“插入表_名称值(”);
foreach(数据行中的行)
{
sb=null;
int j=1;

对于(int i=0;i您可以在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

您可以在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
语法:
expression.transferSpreadsheetType(TransferType、SpreadsheetType、TableName、FileName、HasFieldName、Range、UseOA)

例如:

DoCmd.TransferSpreadsheet acImport, 3, _ 
 "Employees","C:\Lotus\Newemps.wk3", True, "A1:G12"
您必须为其提供电子表格类型,有关
电子表格类型的详细信息,请参阅以下链接:

语法:
expression.transferSpreadsheetType(TransferType、SpreadsheetType、TableName、FileName、HasFieldName、Range、UseOA)

例如:

DoCmd.TransferSpreadsheet acImport, 3, _ 
 "Employees","C:\Lotus\Newemps.wk3", True, "A1:G12"
您必须为其提供电子表格类型,有关
电子表格类型的详细信息,请参阅以下链接:


什么没有发生/正在发生?我有一个包含多张工作表的excel文件,我只想导入一张工作表,然后添加一个要导入的范围。查看有关TransferSpreadsheet的帮助什么没有发生/正在发生?我有一个包含多张工作表的excel文件,我只想导入一张工作表添加一个要导入的范围。Look在TransferSpreadsheet帮助中,这可能会起作用,但不必要的复杂。Access具有导入Excel文件的功能。不必先更改文件类型,然后再导入更改后的文件。此外,Access还具有导入您未使用的CSV文件的内置功能。您正在发明wheel twice(尽管它可能是一个更坚固的轮子)。应将注意力集中在DoCmd.TransferSpreadsheet中的特定错误上,并进行修复。这可能可行,但不必要复杂。Access具有导入Excel文件的功能。无需先更改文件类型,然后再导入更改后的文件。此外,Access还具有导入CSV文件的内置功能你没有利用。你发明了两次轮子(尽管它可能是一个更坚固的轮子)。请注意DoCmd.TransferSpreadsheet中的具体错误并进行修复。我已在答案中添加了另一个选项。错误执行“3011”我已在答案中添加了另一个选项。错误执行“3011”是您可以为我编写的代码我不太懂请为我编写代码我不太懂请从审阅队列中选择:我可以要求您在源代码周围添加一些上下文吗?仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。@RBT我只是想编辑以给出解释,但已经有3个答案有足够的解释了所以我没有…但我现在会注意到的!:)来自审阅队列:我可以要求您在源代码周围添加一些上下文吗?仅代码的答案很难理解。如果您可以在您的帖子中添加更多信息,这将对提问者和未来的读者都有帮助。@RBT我只是想编辑以给出解释,但已经有3个答案,其中有足够的解释哦,我没有……但我现在会注意到的!:)