excel格式文件怎么导入至mdb文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了excel格式文件怎么导入至mdb文件?相关的知识,希望对你有一定的参考价值。

参考技术A

思路很简单,就是先依次获取Excel中表的表名,然后再将Excel表的数据导入到内存以DataTable格式存在,最后再把dataTable数据导入到Mdb数据库文件中。最后实现的功能可以使Excel多表进行导入,如果Mdb数据库文件中已有新建的表,操作是先删除数据库中的已存在表,再重新创建表,导数据。

源码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Data.OleDb;
namespace TestK

public partial class Form1 : Form    
public Form1()

InitializeComponent();


public int tableNameNum = 0;   //记录Excel中所有表的数量        public OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\\\Users\\\\CES\\\\Desktop\\\\CES.mdb");
//建立与数据库文件CES.mdb的连接
//打开以.xls或者.xlsx结尾的文件        private void button1_Click(object sender, EventArgs e)

OpenFileDialog dlg = new OpenFileDialog();   //创建窗体            dlg.Filter = "Excel文件 (*.xls;*.xlsx)|*.xls;*.xlsx";    //浏览过滤出以.xls或者.xlsx结尾的文件            if(dlg.ShowDialog() ==  DialogResult.OK)

string filePath = dlg.FileName;  //获取打开文件的路径                this.textBox1.Text = filePath;



//获取Excel中所有表的表名        public string[] GetTableName(string excelFilename)

//建立与指定Excel文件的连接            string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Jet OLEDB:Engine Type=35;Extended Properties=Excel 8.0;Persist Security Info=False", excelFilename);
string[] tableName = new string[20]; //存储Excel中所有表的表名            string temp;  //中间变量
using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionString))

connection.Open();
//获取数据库架构信息,包括列、主键、表等信息                DataTable table = connection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
for (int i = 0; i < table.Rows.Count;i++ )

temp = table.Rows[i]["Table_Name"].ToString();  //获取Excel中的表名                    tableName[i] = temp.Replace("$", "");   //因为获取的表名最后会有$符号,所以要替换                
tableNameNum = table.Rows.Count;
connection.Close();

return tableName;



//获取Excel中每张表的数据,以datatable类型返回        public DataTable GetExcelTable(string excelFilename,string tableName)

//建立与指定Excel文件的连接            string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=0;Jet OLEDB:Engine Type=35;Extended Properties=Excel 8.0;Persist Security Info=False", excelFilename);
DataSet ds = new DataSet();  //数据集            //using中声明的对象connection,在using语句块结束后会自动释放            using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionString))

connection.Open();
//获取数据库架构信息,包括列、主键、表等信息                DataTable table = connection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);

string strExcel = "select * from " + "[" + tableName + "$]";
//打开数据链接,得到一个数据集                OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, connectionString);
//在数据集中查询表名为tableName的表,然后把其数据在装入数据集ds中                adapter.Fill(ds, tableName);

connection.Close();

return ds.Tables[tableName];//以datatable类型返回数据集ds中表名为tableName的表        

//判断在数据库中,指定表名的表是否存在        public bool TableExists(string table)

bool rythm;

connection.Open();
//读取表名为table的表的行数信息            rythm = connection.GetSchema("Tables", new string[4]  null, null, table, "TABLE" ).Rows.Count > 0;

connection.Close();

return rythm;


//如果在建表之前,数据库已经存在该表,那么首先要先删除此表        public void DeleteTable(string tableName)

string sql = "drop table "+tableName+";";

connection.Open();

OleDbCommand cmd = new OleDbCommand(sql, connection);

cmd.ExecuteNonQuery();

connection.Close();

//中间类型为dataTable的表数据转换到数据库mdb文件中        public bool dataTableToMdb(string excelPath,string tableName)

//获取Excel中表的数据            DataTable dt = GetExcelTable(excelPath,tableName);
//表中数据大于等于两行,数据转入格式才是正确的            if (dt.Rows.Count >= 2)

string[] cloumnName = new string[50];
//获取Excel中表的所有列名                for (int i = 0; i < dt.Columns.Count; i++)

cloumnName[i] = dt.Rows[0][i].ToString();

//在mdb数据库文件中创建表                string sql = "create table " + tableName + " (" + cloumnName[0] + " varchar null)";

connection.Open();

OleDbCommand cmd = new OleDbCommand(sql, connection);

cmd.ExecuteNonQuery();

//在mdb数据库文件中,给已创建好的表添加好所有列                    for (int i = 1; i < dt.Columns.Count; i++)

sql = "alter table " + tableName + " add " + cloumnName[i] + " varchar null";
cmd = new OleDbCommand(sql, connection);

cmd.ExecuteNonQuery();

//在mdb数据库文件中,给已创建好的表加入数据                            for (int t = 1; t < dt.Rows.Count; t++)

sql = "insert into " + tableName + " values('";

for (int k = 0; k < dt.Columns.Count; k++)

if (k != dt.Columns.Count - 1)

sql = sql + dt.Rows[t][k].ToString() + "','";

else                                    
sql = sql + dt.Rows[t][k].ToString() + "')";



cmd = new OleDbCommand(sql, connection);

cmd.ExecuteNonQuery();


connection.Close();

return true;


else            
MessageBox.Show("Excel中"+ tableName +"表的原始数据格式不正确!");

return false;



private void button2_Click(object sender, EventArgs e)

int flag = 1;  //判断由Excel表导入到Mdb是否成功的标记变量                       

DELPHI中导入Excel时,存在格式问题,怎么解决?

DELPHI中导入Excel时,存在格式问题,怎么解决?我数据库是字符型格式,而在EXCEL中输入的是一个数字,读出来时,就是会有充突.

参考技术A 方法有3:
方法1、导入前在excel中修改格式,如不想改变原文件格式的话,此方法不可用。
方法2、先将excel文件转成.txt或.csv文件,再导入。转换时可以设定具体的分隔符和文本前置符等以符合数据库的要求。
方法3、直接导入到数据库中的一个临时表,此表按excel格式建立,再进行格式转换进你要用的表里。

以上是关于excel格式文件怎么导入至mdb文件?的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 实现EXCEL表中数据导出至TXT中。 EXCEL表格式如下:

请教:如何用ARCMAP打开一个.mdb文件?

shp导入mdb显示不完整

DELPHI中导入Excel时,存在格式问题,怎么解决?

accdb 和 mdb 文件格式之间的区别

如何将Excel文档转换成UTF-8格式的文本文件