Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一般读取xls文件,而不考虑excel版本_C#_Excel - Fatal编程技术网

C# 一般读取xls文件,而不考虑excel版本

C# 一般读取xls文件,而不考虑excel版本,c#,excel,C#,Excel,我正在实现一个导入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"; prop

我正在实现一个导入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文件,它不起作用。在文章的末尾添加了指向此类示例的链接,这给我带来了一个“外部表不是预期格式”的选项。如果我理解正确,它取决于excel的版本,并且受props的字符串和OLEDB连接的属性的影响

我是否理解正确,或者代码中是否存在其他问题? 如何更改此选项以常规加载任何excel文件?
您能发布一个不起作用的示例Excel文件吗?@haindl Excel文件已发布。它是一个文本文件。这只是一个简单的csv文件。我建议您在没有Excel帮助的情况下阅读csv。您可以在文件开头检查。因此,如果它是.xls或.xlsx,您将获得信息,并将所有其他文件视为文本。您可以发布一个不起作用的示例Excel文件吗?@haindl Excel file posted。它是一个文本文件。这只是一个简单的csv文件。我建议您在没有Excel帮助的情况下阅读csv。您可以在文件开头检查。因此,如果它是.xls或.xlsx,您将获得信息,并将所有其他文件视为文本。