您的位置:首页 > 编程语言 > C#

C#操作Excel数据导入(不安装EXCEL的情况)

2009-03-13 09:08 579 查看
今日,由于工作的需要,对EXCEL的的数据导入进行了点小研究,通过查阅MSDN和各个网站的文章以后,在这里做一下简单的总结。

事先声明一下,在64为系统下面这些方法均无效,如果有人能在64位系统下面实现这个功能的话,希望提能提供方法,谢谢!

1.Microsoft Jet 数据库引擎

1). 获得数据连接

string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + url + "';Extended Properties=/"Excel 8.0;HDR=YES;IMEX=1;/""; //url为EXCEL的绝对路径

OleDbConnection conn = new OleDbConnection(str);
conn.Open();

2). 获得所有的工作表名

DataTable dt = conn.GetOdbcSchemaTable(System.Data.Odbc.OdbcSchemaGuid.Tables_Info, null);

string excelSheets = "";

foreach (DataRow row in dt.Rows)
{
if (row["CARDINALITY"].ToString() == "0")
{
excelSheets += "|" + row["TABLE_NAME"].ToString();
}
}

string[] _tableNames = excelSheets.Substring(1).Split('|');

3). 获得数据

OleDbCommand comm = new OleDbCommand("select * from [" + TableName+ "]", conn); //Tablel为EXCEL的工作表名
OleDbDataAdapter oda = new OleDbDataAdapter(comm);
DataSet ds = new DataSet();
oda.Fill(ds);
DataTable ExcelData = ds.Tables[0];

2.odbc

1). 获得数据连接

string connStr = "Driver={Microsoft Excel Driver (*.xls)};DBQ=" + url + ";ReadOnly=0";//url为EXCEL的绝对路径

OdbcConnection conn = new OdbcConnection(str);
conn.Open();

2). 获得所有的工作表名

DataTable dt = conn.GetSchema("Tables");

string excelSheets = "";

foreach (DataRow row in dt.Rows)
{
if (row["TABLE_TYPE"].ToString() == "SYSTEM TABLE")
{
excelSheets += "|" + row["TABLE_NAME"].ToString();
}
}

string[] _tableNames = excelSheets.Substring(1).Split('|');

3). 获得数据

OdbcCommand comm = new OdbcCommand("select * from [" + TableName+ "]", conn); //Tablel为EXCEL的工作表名
OdbcDataAdapter oda = new OdbcDataAdapter(comm);
DataSet ds = new DataSet();
oda.Fill(ds);
DataTable ExcelData = ds.Tables[0];

这两个方法其实大同小异,区别只是在于连接字符串的不同和组织架构里面对TableName的定义不一样而已,个人觉得使用ODBC的方法在获得工作表名称上面比Microsoft Jet 数据库引擎要更加准切一点,当然本人还是菜鸟一个,有写的不对或者说得不对的地方欢迎大家斧正,如果有新的方法也请大家能够不要吝啬,拿出来跟大家分享!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: