DataTable 包含从.xlsx而不是.xls导入时带有主题标签的字符串

本文关键字:标签 字符串 导入 xlsx 包含 xls DataTable | 更新日期: 2023-09-27 17:55:10

我正在开发一个 ASP.NET 的MVC应用程序,您可以在其中上传Excel文件。

这些文件包含几列,在一列中我们有一些日期,它们的格式不同。日期有两种不同的格式,第一种是M/dd/yy h:mm:ss tt常规格式),第二种是自定义格式dd.mm.yyyy hh:mm

当我使用 .xlsx 文件时,使用第二种格式的单元格在导入后包含########作为字符串值,这是完全错误的。当我将自定义格式更改为预定义的格式(如 Text )时,导入工作正常。

无论如何,当我将.xlsx文件导出到.xls然后执行导入时,具有自定义格式的单元格的值是正确的。

有人在任何时候遇到过同样的问题吗?有人可以帮助我解决这个问题吗?

我需要用.xlsx文件完成整个过程,因为在上传之前不需要手动编辑文件。

为了"完整性",这是我的代码,它执行从 excel 文件到具有一个表的数据集的导入:

public DataSet ExcelToDataSet(object value, String path)
{
    String firstDatasheetName = "";
    String connectionString = BuildConnectionString(value, path);
    OleDbConnection oleConnection = new OleDbConnection(connectionString);
    if (oleConnection.State == System.Data.ConnectionState.Closed)
    {
        oleConnection.Open();
    }
    DataTable dataSchema = oleConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    if (dataSchema == null | dataSchema.Rows.Count < 0)
    {
        firstDatasheetName = "";
        // throw new Exception("Can´t access the first Datasheet in your Excel. Please check if there is one!");
    }
    else
    {
        firstDatasheetName = dataSchema.Rows[0]["TABLE_NAME"].ToString();
    }
    String query = "Select * from [" + firstDatasheetName + "]";
    OleDbCommand oleCmd = new OleDbCommand(query, oleConnection);//OleDbCommand
    OleDbDataAdapter oleDA = new OleDbDataAdapter(oleCmd);
    DataSet dataSet = new DataSet();
    oleDA.Fill(dataSet);
    oleDA.Dispose();
    oleConnection.Close();
    oleConnection.Dispose();
    return (dataSet);
}

我的连接字符串是:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:''Users''user''Documents''v0-0-5''project''project''App_Data''Data''Import''file.xlsx;Extended Properties='"Excel 12.0;HDR=YES;IMEX=1'"

我感谢任何帮助!

DataTable 包含从.xlsx而不是.xls导入时带有主题标签的字符串

当列太窄时,它会对数值(例如日期)执行此操作。使列更宽,或文本更小,这可以解决它吗?