我的导入适用于 .xls 文件,但不适用于我在 Excel 2010 中创建的 .xlsx,除非它已打开。
我的代码如下所示:
public static DataSet Sheets(string filePath, bool header)
{
DataSet dsResults = new DataSet();
string hasHeader = header ? "YES" : "NO";
OleDbConnectionStringBuilder sbConnection = new OleDbConnectionStringBuilder();
String strExtendedProperties = String.Empty;
sbConnection.DataSource = filePath;
if (Path.GetExtension(filePath).ToLower().Equals(".xls"))//Excel 97-03
{
sbConnection.Provider = "Microsoft.Jet.OLEDB.4.0";
strExtendedProperties = String.Format("Excel 8.0;HDR={0};IMEX=1", header);
}
else if (Path.GetExtension(filePath).ToLower().Equals(".xlsx")) // Excel 2007
{
sbConnection.Provider = "Microsoft.ACE.OLEDB.12.0";
strExtendedProperties = String.Format("Excel 12.0;HDR={0};IMEX=1", header);
}
sbConnection.Add("Extended Properties", strExtendedProperties);
using (OleDbConnection conn = new OleDbConnection(sbConnection.ToString()))
{
conn.Open();
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
foreach (DataRow drSheet in dtSheet.Rows)
{
if (drSheet["TABLE_NAME"].ToString().Contains("$") && !drSheet["TABLE_NAME"].ToString().EndsWith("_"))
{ .......
我收到的错误conn.Open();
我还看到解决方案说要更改其中的内容并以其他方式再次保存它。事情是我必须在不这样做的情况下让它工作,因为它会进入一个 DLL,该 DLL 会发送给其他开发人员,这些开发人员将在网站上上传文件时使用它。所以用户(客户端)将上传一个文件,当验证表明它是一个有效的 excel 文件时,它将进入我的代码。