乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 如何将excel里的数据批量导入ACCESS-access自动导入excel,access导入excel 是否

如何将excel里的数据批量导入ACCESS-access自动导入excel,access导入excel 是否

作者:乔山办公网日期:

返回目录:excel表格制作


1.本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要4.5秒。
2.代码如下:
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
//测试,将excel中的sheet1导入到sqlserver中
string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master";
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
TransferData(fd.FileName, "sheet1", connString);
}
}

public void TransferData(string excelFile, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}$]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);

//如果目标表不存在则创建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
foreach (System.Data.DataColumn c in ds.Tables[0].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";

using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize = 100;//每次传输7a686964616fe78988e69d83362的行数
bcp.NotifyAfter = 100;//进度提示的行数
bcp.DestinationTableName = sheetName;//目标表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}

//进度显示
void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
{
this.Text = e.RowsCopied.ToString();
this.Update();
}
}
}
3.上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。

三种VBA:
方法一:在eccel VBA编辑器编写代码,使用FOR循环导入:
Sub 利用Excel的VBA将数据写入Access()
'定义ADODB 连接Access数据库
Dim Cnn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim strCon As String
Dim strFileName As String '数据库文件名
strFileName = InputBox("请输入文件路径及文件名:", "Excel传递数据至Access", "E:\ExcelTest\Staff.mdb")
'连接字符串,我这里是Access2010,所提供者参数为:Provider=Microsoft.ACE.OLEDB.12.0;
'如果此参数不能使用,根据自己的电脑修改这个字符串
'至于连接至的数据库名7a64e59b9ee7ad94365,根据自己的电脑修改,或用一个对话框或其他方式将此值传递进程序
strCon = "provider=Microsoft.jet.OLEDB.4.0;" _
& "Data Source=" & strFileName & ";"
Cnn.Open strCon
Rs.ActiveConnection = Cnn
Rs.LockType = adLockOptimistic
Rs.Open "Employee" '假设表为Employee
'定义Excel表中的数据区域以写入Access
Dim Sht As Worksheet
Dim Rn As Long
Dim Cn As Long
Set Sht = ThisWorkbook.Sheets("Sheet1")
'假设将 Sheet1 表的 2-6行的1、2、3列写入Access表
For Rn = 2 To 6
Rs.AddNew
Rs!num = Sht.Cells(Rn, 1) ’num,name,department是数据库中指定表的字段
Rs!Name = Sht.Cells(Rn, 2)
Rs!department = Sht.Cells(Rn, 3)
Rs.Update
Next Rn
MsgBox "完成!"
Rs.Close
Cnn.Close
Set Rs = Nothing
Set Cnn = Nothing
Set Sht = Nothing
End sub
一、直接导入法

1.启动Access,新建一数据库文件。
2.在“表”选项中,执行“文件→获取外部数据→导入”命令,打开“导入”对话框。

3.按“文件类型”右侧的下拉按钮,选中“MicrosoftExcel(.xls)”选项,再定位到需要转换的工作簿文件所在的文件夹,选中相应的工作簿,按下“导入”按钮,进入“导入数据表向导”对话框(图1)。

4.选中需要导入的工作表(如“工程数据”),多次按“下一步”按钮作进一步的设置后,按“完成”按钮。
注意:如果没有特别要求,在e799bee5baa6e4b893e5b19e364上一步的操作中直接按“完成”按钮就行了。
5.此时系统会弹出一个导入完成的对话框,按“确定”按钮。
至此,数据就从Excel中导入到Access中。

二、建立链接法

1.启动Access,新建一数据库文件。

2.在“表”选项中,执行“文件→获取外部数据→链接表”命令,打开“链接”对话框。

3.以下操作基本与上述“直接导入法”相似,在此不再赘述,请大家自行操练。
注意:“直接导入法”和“建立链接法”均可以将Excel数据转换到Access中,两者除了在Access中显示的图标不同外,最大的不同是:前者转换过来的数据与数据源脱离了联系,而后者转换过来的数据会随数据源的变化而自动随时更新。
河南新华网络运营协会

1.在Access中创建对Excel工作簿的链接:在Access中选择“外部数据——导入——Excel”。
2.在“获取外部数据”对话框中选择“通过创建链接表来链接到数据源”。
必须为每个Excel工作簿重复该过程直到将它们都链接到数据库。结果如下图所示。

3.在SQL视图中开始新的查询,单击“创建——其他——查询设计”。

4.选择“查询工具-设计”中的“SQL视图”

5.在SQL视图中,为所有链接的Excel表输入Select语句,在每个Select语句间使用Union操作符,在SQL视图中输入选择查询语句。

6.运行查询后,结果将是包含从所有链接的文件中获取并合并后的数据。
只要链接的Excel文件在相同的位置,每次打开数据库时Access将自动刷新链接以获取最新数据。这意味着只需设置一次,然后在每次需要重新组合Excel文件时运行联合查询。
然而,默认情况下,UNION操作符会移除数zd据中的任何重复行。如果知道数据中有重复行,并且想保留它们,那么需要使用UNION ALL,以允许传递重复行。

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网