Как применить нетипизированные столбцы в ExcelDataReader? - PullRequest
0 голосов
/ 21 ноября 2018

Как вы препятствуете точному форматированию даты или времени?

Я читаю файл XLS, используя reader.AsDataSet, а когда исходные данные 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 без автоматического конкретного ввода данных?

1 Ответ

0 голосов
/ 27 ноября 2018

Я думаю, что в этой ситуации у вас есть все данные, которые вам нужны в вашем результате (как 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...