C# 一般读取xls文件,而不考虑excel版本
我正在实现一个导入xls文件的解决方案,如下和所示。以下解决方案确实适用于sum 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
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,您将获得信息,并将所有其他文件视为文本。