如何在 ExcelDataReader 中强制使用非类型化列?
How to enforce untyped columns in ExcelDataReader?
如何防止日期或时间的格式变得严格?
我正在使用 reader.AsDataSet
读取 XLS 文件,当源数据为 12/12/2014
时,这会生成 12/12/2014 12:00:00AM
的输出。
此外,例如当源是 5:01:23 AM
时,这会产生一些奇怪的东西:12/31/1899 5:01:23 AM
函数如下:
using (var stream = new FileStream(excelFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
IExcelDataReader reader = null;
if (excelFilePath.EndsWith(".xls"))
{
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (excelFilePath.EndsWith(".xlsx"))
{
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
if (reader == null)
return false;
var ds = reader.AsDataSet(new ExcelDataSetConfiguration()
{
UseColumnDataType = false,
ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
{
UseHeaderRow = false
}
});
我们如何在不自动具体输入数据的情况下将 XLS 文件读入数据集?
我认为在这种情况下,您的结果中包含了您需要的所有数据(如 DataSet
)!
因此,我建议您在阅读时忽略该选项,而是在结果中添加任何额外的列,如下所示:
// `Copy` used to generate a new object
var dataTable = ds.Tables[0].Copy();
// create a new column with your own settings (like `TimeOnly`) and add it to your new DataTable
var newColumn = new DataColumn("TimeOnly", typeof(string)) { AllowDBNull = true };
dataTable.Columns.Add(newColumn);
// update your new column data based on other columns like `Column1`
foreach (DataRow row in dataTable.Rows)
{
var value = DateTime.Parse(row["Column1"].ToString()).ToString("HH:mm:ss");
row["TimeOnly"] = value;
}
HTH
如何防止日期或时间的格式变得严格?
我正在使用 reader.AsDataSet
读取 XLS 文件,当源数据为 12/12/2014
时,这会生成 12/12/2014 12:00:00AM
的输出。
此外,例如当源是 5:01:23 AM
时,这会产生一些奇怪的东西:12/31/1899 5:01:23 AM
函数如下:
using (var stream = new FileStream(excelFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
IExcelDataReader reader = null;
if (excelFilePath.EndsWith(".xls"))
{
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
else if (excelFilePath.EndsWith(".xlsx"))
{
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}
if (reader == null)
return false;
var ds = reader.AsDataSet(new ExcelDataSetConfiguration()
{
UseColumnDataType = false,
ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
{
UseHeaderRow = false
}
});
我们如何在不自动具体输入数据的情况下将 XLS 文件读入数据集?
我认为在这种情况下,您的结果中包含了您需要的所有数据(如 DataSet
)!
因此,我建议您在阅读时忽略该选项,而是在结果中添加任何额外的列,如下所示:
// `Copy` used to generate a new object
var dataTable = ds.Tables[0].Copy();
// create a new column with your own settings (like `TimeOnly`) and add it to your new DataTable
var newColumn = new DataColumn("TimeOnly", typeof(string)) { AllowDBNull = true };
dataTable.Columns.Add(newColumn);
// update your new column data based on other columns like `Column1`
foreach (DataRow row in dataTable.Rows)
{
var value = DateTime.Parse(row["Column1"].ToString()).ToString("HH:mm:ss");
row["TimeOnly"] = value;
}
HTH