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

C#实现从EXCEL将数据导出到datagridview

2009-02-11 16:51 831 查看
源代码:

public void ImportDataFromExcel(string filePathAndName)
{
if (File.Exists(filePathAndName))
{

//连接字符串

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePathAndName + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
//连接打开

conn.Open();

//获取EXCEL表格的框架,以便获得多个工作薄的数据
DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
DataSet ds = new DataSet();
string tableName, strSql;

//获得每一个工作簿的数据,都填充到数据集中
for (int i = 0; i < schemaTable.Rows.Count; i++)
{
tableName = schemaTable.Rows[i][2].ToString().Trim();//Rows[i][2]指向Excel表格的框架的表名列
strSql = "select * from [" + tableName + "]";
OleDbDataAdapter adapter = new OleDbDataAdapter(strSql, conn);
adapter.Fill(ds, tableName);//填充数据集
}

//关闭连接
conn.Close();

//多个工作薄时可以遍历数据集中的所有表,然后获取表格的数据
dataGridView1.DataSource = ds.Tables[0];
//dataGridView2.DataSource = ds.Tables[1];
}
}

注意问题:数据导出时,如果excel表格不是完全存储数据,如前几行存放了表格的说明,真正数据从后面第几行开始时,可能出现某些数据获取不到。原因是:使用OleDB获取excel数据,导出数据的类型自动安前八行识别。如果某一列的数据类型不一致的话就会出现上述情形。

解决办法:修改连接字符串的Extended Properties=Excel 8.0;为Excel 8.0;HDR=Yes;IMEX=1就可以了。即:

strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePathAndName + ";" + "Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: