我正在开发一个ASP.NET MVC应用程序,您可以在其中上传Excel文件。
这些文件包含几列,在一列中我们有一些日期,格式不同。日期有两种不同的格式,第一种是M/dd/yy h:mm:ss tt
(常规格式),第二种是自定义格式:dd.mm.yyyy hh:mm
。
当我使用.xlsx文件时,使用第二种格式的单元格在导入########
之后包含为String值,这是完全错误的。当我将自定义格式更改为预定义格式时,如Text
,导入工作正常。
无论如何,当我导出 .xlsx文件到.xls 然后执行导入时,自定义格式的单元格的值是正确的。
有人在任何时候遇到过同样的问题吗?有人可以帮我解决这个问题吗?
我需要使用.xlsx文件来完成这一切,因为在上传之前不需要手动编辑文件。
表示“完整性”,这是我的代码,它使用一个表从excel文件导入到dataSet:
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\"
我感谢任何帮助!
答案 0 :(得分:0)
当列太窄时,它会对数字值(例如日期)执行此操作。使列更宽,或文本更小,是否可以修复它?