先贴代码:
private void btnStart_Click(object sender, EventArgs e)
{
if (txtPath.Text != "")
{
string conStr = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + txtPath.Text + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
using (OleDbConnection con = new OleDbConnection(conStr))
{
string str1 = "select * from [全部电脑类资产$] where [ERP资产编号] is not null";
try
{
con.Open();
}
catch (Exception ex)
{
throw new Exception("连接Excel出错:" + ex.Message);
}
using (OleDbDataAdapter da = new OleDbDataAdapter(str1, con))
{
DataTable dt = new DataTable();
da.Fill(dt);
//removeEmpty(dt);
dataGridView1.DataMember = "[全部电脑类资产$]";
dataGridView1.DataSource = dt;
}
}
}
else
{
MessageHelper.WRONG("请先选择导入文件");
}
}
说明:
1.连接字符串中的:Microsoft.Ace.OleDb.12.0。既可以连接xls文件又可以连接xlsx文件,不建议使用Microsoft.Jet.OLEDB.4.0了,这个只能连接xls的excel.
2.连接字符串中的txtPath.Text就是你的excel文件的路径名,如:C:\Users\Jim\Desktop\2016.2.24.xlsx。其中的HDR=YES,是声明Excel表中的第一行是列名而不是数据,HDR=NO,则相反。
3.如果读取到的Excel中有空白行数据,就用sql语句中的is notnull过滤掉。如:
select * from [全部电脑类资产$] where [ERP资产编号] isnot null。
或者采用如下方法,移除DataTable中的空白行
private void removeEmpty(DataTable dt)
{
List<DataRow> removelist = new List<DataRow>();
for (int i = 0; i < dt.Rows.Count; i++)
{
bool rowdataisnull = true;
for (int j = 0; j < dt.Columns.Count; j++)
{
if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim()))
{
rowdataisnull = false;
}
}
if (rowdataisnull)
{
removelist.Add(dt.Rows[i]);
}
}
for (int i = 0; i < removelist.Count; i++)
{
dt.Rows.Remove(removelist[i]);
}
}
4.由于Microsoft.Ace.OleDb.12.0与Microsoft.Jet.OLEDB.4.0都不支持64位系统,所以如果出现“xxxxxx未注册”之类的问题,请将项目配置为x86平台。如果不想配置,则下载Microsoft.Ace.OleDb.12.0的64位驱动,点击下载。
By Jim