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'"
我感谢任何帮助!
当列太窄时,它会对数值(例如日期)执行此操作。使列更宽,或文本更小,这可以解决它吗?