我正在实施一个解决方案,用于导入this posts和this post后面的xls
文件。以下解决方案确实适用于sum excel文件:
public XLSReader(string path, string worksheet = "Sheet1")
{
Dictionary<string, string> props = new Dictionary<string, string>();
props["Provider"] = "Microsoft.ACE.OLEDB.12.0";
props["Data Source"] = path;
props["Extended Properties"] = "Excel 12.0";
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, string> prop in props)
{
sb.Append(prop.Key);
sb.Append('=');
sb.Append(prop.Value);
sb.Append(';');
}
string properties = sb.ToString();
using (OleDbConnection conn = new OleDbConnection(properties))
{
conn.Open();
ds = new DataSet();
//string columns = String.Join(",", columnNames.ToArray());
using (OleDbDataAdapter da = new OleDbDataAdapter(
"SELECT *" + /*columns +*/ " FROM [" + worksheet + "$]", conn))
{
da.Fill(ds);
dt = new DataTable[ds.Tables.Count];
ds.Tables.CopyTo(dt, 0);
}
Console.WriteLine(ds.Tables.Count + " Tables");
}
}
这是一个类的构造函数,这里使用的变量的总和是在类上定义的,只在这里使用,对于任何遗漏的变量声明都很抱歉。
问题是,对于某些excel文件它不起作用(在帖子的末尾添加了这样的示例的链接),给我一个'外部表不是预期的格式'eception。如果我理解正确,它取决于excel的版本,并受props
给出OleDbConnetion
的字符串和属性的影响。