VB如何将Excel中的数据批量导入到Access中?

作者&投稿:不祥 (若有异议请与网页底部的电邮联系)
C#中如何将Excel中的数据批量导入到sql server?~

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;//每次传输的行数
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相同的效果了。

我知道两个方法。
1、如果EXCEL数据不多可以用这个方法。workbooks.open(“路径")打开EXCEL,再逐个的用INSERT语句导入到ACCESS里面。
2、就是EXCEL本身也是一个数据库,第一行是字段,用连接数据库的方式连接EXCEL直接一条SQL导入到SQL。这对格式有点要求,就是第一行必须是字段,数据比较整齐。

Option Explicit

Dim data As New ADODB.Connection

Dim db As New ADODB.Recordset

Dim xlsApp As Excel.Application

Dim xlsBook As Excel.Workbook

Dim xlsSheet As Excel.Worksheet


Private Sub Command1_Click()

On Error GoTo ErrHandler

CommonDialog1.DialogTitle = "Open files"

CommonDialog1.Filter = "mdb files(*.mdb)|*.mdb"

CommonDialog1.Flags = 4  '取消 “以只读方式打开” 复选框

CommonDialog1.ShowOpen

CommonDialog1.CancelError = True

If Len(CommonDialog1.FileName) <= 4 Then

    Exit Sub

Else

    Text1.Text = CommonDialog1.FileName

End If


ErrHandler:

    Exit Sub

End Sub


Private Sub Command2_Click()

Dim NoExistF As New FileSystemObject

Dim i, j, k As Double

'Excel行i 列j,从第二行开始,去掉标题行

i = 2

j = 1

k = 1  'Access列号,第0列留着放主键


If NoExistF.FileExists(Text1.Text) = False Or NoExistF.FileExists(Text2.Text) = False Then

    MsgBox "文件不存在!", 16, "错误提示"

    Exit Sub

Else

    '打开Access数据库

    data.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Text1.Text & ";Persist Security Info=False"

    db.Open "select * From sheet", data, adOpenKeyset, adLockOptimistic  '数据库表的名字sheet

    '打开Excel数据表

    Set xlsApp = CreateObject("Excel.Application")   '创建EXCEL对象

    Set xlsBook = xlsApp.Workbooks.Open(Text2.Text)  '打开已经存在的EXCEL工件簿文件

    Set xlsSheet = xlsBook.Worksheets("Sheet1")      '设置活动工作表

    Do

        If xlsSheet.Cells(i, j) = "" Then    '姓名=空 的时候,结束循环

            Exit Do

        End If

        db.AddNew

        db.Fields(k) = xlsSheet.Cells(i, j)

        db.Fields(k + 1) = xlsSheet.Cells(i, j + 1)

        db.Fields(k + 2) = xlsSheet.Cells(i, j + 2)

        db.MoveNext

        i = i + 1

    Loop

End If

db.MovePrevious

db.Update

db.Close

data.Close

MsgBox "数据传输完毕!", , "提示"

Set xlsSheet = Nothing

xlsBook.Close

Set xlsBook = Nothing

xlsApp.Quit

Set xlsApp = Nothing

End Sub


Private Sub Command3_Click()

On Error GoTo ErrHandler

CommonDialog1.DialogTitle = "Open files"

CommonDialog1.Filter = "xls files(*.xls)|*.xls"

CommonDialog1.Flags = 4  '取消 “以只读方式打开” 复选框

CommonDialog1.ShowOpen

CommonDialog1.CancelError = True

If Len(CommonDialog1.FileName) <= 4 Then

    Exit Sub

Else

    Text2.Text = CommonDialog1.FileName

End If


ErrHandler:

    Exit Sub

End Sub


Private Sub Form_Load()

Text1.Text = ""

Text2.Text = ""

End Sub



Access数据表有主键吗?

需要私信我

我可以帮你写


Excel表格中如何将B、C、D等单元格数值小于A列数值时,用红色显示。如...
这个需要用到条件格式的公式选项,而且要用到相对引用和绝对引用 第一行是标题,对吧 选择BCDE整列,格式-条件格式,左侧选公式,右侧输入 =AND(ROW(1:1)<>1,B1<$A1)设置格式即可 这样公式会自动套用

2007excel表格的基本操作:如何将B列数据随A列数据的变化曲线图画出来...
全选A\/B数据-工具栏插入-图表-XY散点图-无数据平滑线散点图;单击下一步(这儿可设置系列,就是说你做的图是“A随B变化图”)-下一步(这儿可设置表的名称、X、y轴的名称)-完成;进去之后,你要使图表变得更加合理、好看,就需要设置背景颜色、X、Y轴的数据间隔等,比如你要把X轴的刻度改写...

如何将excel中含“北京”的数据求和?
要对Excel中包含特定字词如“北京”的内容求和,首先了解数据格式。假设有A列为公司名称,目标是检查A列文本是否包含“北京”这两个字。步骤一,选中B列的第二个单元格B2,输入计算公式:=FIND("北京", A2)。如果“北京”在A2的文本中出现,此公式将返回1,表明位置从第一个字符开始。接着,为了...

在Excel中如何将B列的数据提取到A列中来
当时主要的推广重点是:购买合集比单独购买要省很多钱。最初的Office版本包含Word、Excel和PowerPoint。“专业版”包含Microsoft Access,Microsoft Outlook 当时不存在。随着时间的改变,Office应用程序逐渐集成,共享特性,例如:拼写和语法检查、OLE数据集成和VBA脚本语言。微软目前将Office延伸作为一个开发平台,...

EXCEL中A列被隐藏后,如何恢复?
2、这时候选中B列,然后鼠标右键单击一下出现选项,找到取消隐藏列选中鼠标左键单击一下如下图所示: 3、最后我们惊奇的发现A列出来了,如下图所示: 扩展资料 Excel表格怎么隐藏列 1、首先打开excel表格选中要隐藏的列,这里以B列为例,然后右击一下出来选项,如下图所示: 2、选中隐藏列,鼠标左键单击一下如下图: ...

如何将microsoft office excel表格里 B单元里的数字自动乘以C单元,_百...
输入完一个后,将鼠标移至单元格右下角,有个黑色的方点,下拉即可。

excel表格中如何将两个单元格的内容建立对应关系
1、在A列和D列单元格输入一组匹配的基础数据,需要根据E列的数据填充到B列中,形成对应关系。2、在B2单元格中点击“fx”图标,打开插入函数窗口选择“vlookup”函数。3、然后针对A2单元格进行匹配D列到E列的数据,返回值填入“2”,转换成公式为:=VLOOKUP(A2,$D$2:$E$8,2,0)。4、点击确定...

excel如何字母变数字,并将字母加减得出数字结果? 例如:定义A=8,B=...
不是单元格的话 只能用 宏了 好象

如何将多个单元格内容合并成一个?
在Excel中,将数据合并并用逗号相隔,可以通过以下几种方法实现:方法一:使用连接符“&”1. 假设需要合并A列和B列的数据,在C列的第一个单元格(如C1)中输入公式“=A1&","&B1”。2. 按下回车键,即可将A1和B1单元格的数据合并,并在两者之间添加逗号。3. 将C1单元格的公式向下拖动填充柄,...

如何将一excel中的内容复制到另一个excel表格中相对应位置?
1、在表B的C2单元格输入公式:=IFERROR(VLOOKUP($A2,表A!$A:$F,MATCH(C$1,表A!$1:$1,0),0),"") 回车;见图一 2、选中C2,横拉、下拉填充表格内的C、D、E、F列,实际结果:见图二 对公式的补充说明:1)此公式在表B中可以横拉、下拉不受限制,同时对标题排列也不受限制,如表B...

瓮安县18846405536: 如何将excel里的数据批量导入ACCESS,要用vb代码? -
闻段艾兰: 不用VB代码,手动导入可以用access的导入功能.方法:功能菜单->外部数据->Excel 然后按提示1、选择文件2、选择导入的Sheet名称3、首行是否包含标题4、选择索引5、添加主键6、导入到Access的表名7、完成

瓮安县18846405536: vb如何提取多个Excel文件中某个表格的某列数据到一个Excel表格里,如图,共有100多个表 -
闻段艾兰: 在工作表标签上击右键,查看代码.在VBE窗口中,点“插入”,模块.将以下代码粘贴到模块代码窗格中,ALT+F8运行该宏,就行了.附件中有样本.Sub 数据提取() For i = 2 To Worksheets.Count Sheets(1).Cells(Sheets(1).[a65536].End(3).Row + 1, 1) = Sheets(i).[D3] Sheets(1).Cells(Sheets(1).[b65536].End(3).Row + 1, 2) = Sheets(i).[e6] Next End Sub

瓮安县18846405536: VB 把Excel中的内容批量导入SQL数据库 -
闻段艾兰: strSQL = "INSERT INTO Family (字段一,字段二,字段三,...) SELECT (字段一,字段二,字段三,...) FROM OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=Yes;database=" & CommonDialog1.FileName & " ;','select * from [Sheet1$] ')" 把数据库中的除了 image 的其他字段都列出来.应该就可以了

瓮安县18846405536: VB中如何将EXCEL数据导入到内存 -
闻段艾兰: 要将数据从excel读入内存,就要把excel当成数据库.我一般用ado的方法.具体有四步:1、在工程->参考里将microsoft activex data object和microsoft excel xx.0 object library勾上2、连接数据库3、读取数据4、关闭连接 后面三步如下程序:...

瓮安县18846405536: 高分,怎样用vb把excel表中的数据导入数据库中 -
闻段艾兰: 以access 为例: 打开数据库, 找到【外部数据】 ,点击【excel】图标,选择文件即可导入!

瓮安县18846405536: 求通过excel文件批量导入vb自带数据库文件的代码,我只需要导入一列或者两列,希望有知道的能给个代码!! -
闻段艾兰: 如果是一次性的操作,直接用ACCESS打学习表.MDB,从EXCEL中直接把这两列数据复制、粘贴到表一中就行了,不用写代码这么麻烦.如果是经常性的操作,就需要写一个完整的程序.会比较复杂,需要操作数据库,还要操作EXCEL,这个建议你还是在网上找别人的源码,自己一点都没弄过的话会花不少时间.

瓮安县18846405536: vb怎么批量将excel文件导入到access(mdb)的表中? -
闻段艾兰: 我知道两个方法.1、如果EXCEL数据不多可以用这个方法.workbooks.open(“路径")打开EXCEL,再逐个的用INSERT语句导入到ACCESS里面.2、就是EXCEL本身也是一个数据库,第一行是字段,用连接数据库的方式连接EXCEL直接一条SQL导入到SQL.这对格式有点要求,就是第一行必须是字段,数据比较整齐.

瓮安县18846405536: 在VB中怎么把EXCEL中的数值传给数组 -
闻段艾兰: 你可以查阅一下有关VBA的库(此库在OFFICE的帮助文件中有详细说明和调用方法). 下面是推荐的方法,给你个参考: 我们写程序时,有很多的功能如果都要自己写会非常的麻烦,比如:我们调用打印和打印预览.如果自己写过的人都会明...

瓮安县18846405536: 求VB循环取excel表中的多个数据 -
闻段艾兰: 从你另外一个问题可以看出你的这个问题已经解决了. dim i() dim x,y as long y=1 x=1 '我觉得这里x应该为1,应为Cells(0,1)是不存在的 while y=1 if xlsheet.cells(x,1)="" then y=0 'x=x+1 '有点早了,后面的位置是对的 redim i(x-1) i(x-1)=xlsheet.cells(x,1) x=x+1 wend写EXCEL: y=1 for n=0 to x-1 xlsheet.cells(y,1)=i(n) y=y+1 next 这就对了

瓮安县18846405536: 把excel中的数据导入到VB中 -
闻段艾兰: 在VB中要想调用Excel,需要打开VB编程环境“工程”菜单中的“引用”项目,并选取项目中的“MicrosoftExcel 11.0 object library”项.由于你的Excel版本不同,所以这个选项的版本号也是不同的.因为EXCEL是以层次结构组织对象的,其...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网