无论excel版本如何,通常都会读取xls文件

时间:2016-10-10 07:53:11

标签: c# excel

我正在实施一个解决方案,用于导入this poststhis 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的字符串和属性的影响。

  • 我是否理解正确或代码中是否还有其他问题?
  • 如何更改此设置以通常加载任何Excel文件?

Link to example problematic xls file

0 个答案:

没有答案