导入 : OLEDB 方式 filePath:文件绝对路径
1.此种 适用 office07 之前的版本 (.xls)
// string str = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
2.07之后得版本
string str = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + filePath + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'";
注:HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes;
代码:
OleDbConnection Conn = new OleDbConnection(str);
try
{
Conn.Open();
DataTable dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string tablename = "", sql = "";
w_import_select_table wi = new w_import_select_table();
wi.dt = dt;
if (wi.ShowDialog() != DialogResult.Yes) { return null; }
//string tablename = dt.Rows[0][2].ToString().Trim();
tablename = wi.listBoxControl1.Text.Trim();
sql = "select * from [" + tablename + "]";
OleDbDataAdapter da = new OleDbDataAdapter(sql, Conn);
DataSet ds = new DataSet();
da.Fill(ds, tablename);
try
{
// 修改 表头
SetValue(ds.Tables[0]);
}
catch (Exception ex)
{
MsgBox.ShowOK("转换失败!请确保清单模板的内容格式正确!\r\n" + ex.Message); return null;
}
DataSet Cds = new DataSet();
try
{
// 去除 空白行
DataRow[] rows = ds.Tables[0].Select("isnull(name,'') <> ''");
DataTable cdt = ds.Tables[0].Clone();
rows.ForEachEx(row => cdt.Rows.Add(row.ItemArray));
// cdt.Rows.Add(rows);
Cds.Tables.Add(cdt);
//Cds.Tables.Add(cdt, tablename);
}
catch (Exception ex) { MsgBox.ShowOK("转换失败!请确保没有修改清单模板的表头!\r\n" + ex.Message); return null; }
return Cds;
}
catch (Exception ex)
{
MsgBox.ShowOK(ex.Message, "加载清单失败");
return null;
}
finally
{
}
注:Provider=Microsoft.Ace.OleDb.12.0; 方式 会提示 : provider is not registered on the local machine
原因: 没有安装 链接驱动
解决方案: 安装驱动 下载地址 : https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=23734