问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-27 09:32

我来回答

1个回答

热心网友 时间:2023-09-20 06:46

思路很简单,就是先依次获取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是否成功的标记变量                           //如果有一张Excel表导入不成功,那么就标记为0,整个过程就视为失败了                           //全部Excel表导入进去,整个过程才算完全成功
if(textBox1.Text.Length == 0) //判断是否选中导入的Excel文件            {
MessageBox.Show("请选择导入数据的Execl文件");
}
else            {
string[] tableName = new string[20];
//获取Excel中所有表的表名                tableName = GetTableName(this.textBox1.Text.Trim());

for(int j = 0;j < tableNameNum;j++)
{
if (!TableExists(tableName[j]))   //判断数据库中是否已有要新建的表,没有的话,直接新建,有的话,先删除,再新建                    {
if(dataTableToMdb(this.textBox1.Text.Trim(),tableName[j]))  //Excel表转换到Mdb数据库中                        {
MessageBox.Show("导入" + tableName[j] + "表数据成功!");
}
else                        {
flag = 0;
MessageBox.Show("导入" + tableName[j] + "表数据失败!");
}
}
else                    {
DeleteTable(tableName[j]);   //删除数据库已有的同名表
if (dataTableToMdb(this.textBox1.Text.Trim(), tableName[j])) ////Excel表转换到Mdb数据库中                            {
MessageBox.Show("导入" + tableName[j] + "表数据成功!");
}
else                            {
flag = 0;
MessageBox.Show("导入" + tableName[j] + "表数据失败!");
}
}
}

if(flag==1)
{
MessageBox.Show("导入数据成功!");
}
else                {
MessageBox.Show("导入数据没能完全成功!");
}
}
}
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么叫补按揭 后按揭贷款什么意思 买房者续按揭有什么危害 加按揭是什么意思 八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 名人勤奋好学的小故事 Excel怎么转换*.mdb格式,一定加分 名人勤奋学习励志小故事有哪些 文件扩展名为“MDB”指的是什么文件? 求有关勤奋好学的典故 mdb是什么格式? excel格式文件怎么导入mdb文件 关于古人勤奋好学的小故事 收集名人勤奋好学的小故事 如何将mdb文件导入excel 古人勤奋好学的小故事? 勤奋好学的小故事 关于名人勤奋好学的小故事(两个) 长葛市迎君机械制造有限公司怎么样? 长葛市爱奇速电子科技有限公司怎么样? 长葛市尚辰机械制造有限公司怎么样? 长葛市铭派科技有限公司怎么样? 金桔酱的功效与作用是什么? 长葛市大概有多少平面设计师? 长葛市网营供应链有限公司怎么样? 中国古代还有哪些勤奋好学的故事? 如何将EXCEL导入MDB中 名人勤奋学习的小故事(40字就行) mdb是什么文件??? 关于 勤奋学习的小故事 如何将xls导入到MDB中? ARCGIS打开mdb数据库,全是表格,怎么转成shp格式? 将MDB格式解压后,使用MDB viewer plus如何变更为EXCEL格式进行编辑?不会用,求助!! 和平精英好友互动档案怎么隐藏 一箱老中街冰棍多少只,多少钱?中街冰点的 和平精英游戏好友微信好友称呼不显示 伊利老冰棍多少一支 正版的一支零售价多少钱? 老冰棍50根20块钱一根多少元? 1983年兰州老冰棍多少钱? 一支老冰棍售价5角,你来算一算,20支这样的冰棍要多少钱? 德氏 老冰棍 多少钱 现在一个冰棍多少钱 绿好老冰棍多少钱一箱 沈阳中街冰点城食品有限公司怎么样? 老冰棍大家应该都吃过吧,我很想知道,七八十年代那种几分钱很怀念的老冰棍是怎么做的?老冰棍成本低,那