как сохранить формат datetime в ячейке набора данных - PullRequest
0 голосов
/ 01 мая 2020

Трудно понять преобразование между файлом Excel в. net тип объекта, такой как DataSet или DataTable.

Одна проблема, которую я вижу в этой сторонней библиотеке (и проблема все еще сохраняется в последней Я считаю, что ExcelDataReader - это преобразование формата даты и времени.

Например, файл Excel, в котором пользователь устанавливает пользовательский формат dd / mm / yyyy, конвертируется в результате dataSet как mm / dd / yyyy после импорта файла Excel в готовый объект.

Я подумал, может быть, чтобы это исправить, библиотечный код должен пассивно получать настройки формата ячейки Excel, не пытаясь преобразовать с собственными настройками.

Интересно, как в коде это можно сделать так, чтобы

if (excelfile.row[somenumber].cell.TypeSetting == typesetting.dateTime)
{ 
   dataset.cell[somenumber].dateTimeFormatSetting = excelfile.row[somenumber].cell.dateTimeFormatSetting
}

вероятно, этот код не был близок к реалистичности c, просто дикое предположение о том, что необходимо сделать.

1 Ответ

1 голос
/ 02 мая 2020

ExcelDataReader теряет информацию о форматировании Excel при использовании AsDataSet(), которая в основном дает вам только необработанные значения.

F.ex один объект необработанной даты не знает, должен ли он отображаться как 'mm-dd -гг "или" дд / мм / гг ". Для этого вам нужна «строка формата числа», которая игнорируется AsDataSet().

Чтобы обойти это, вместо вызова AsDataSet() вам нужно вручную l oop над строками / столбцами используя API-интерфейсы чтения нижнего уровня ExcelDataReader и используя стороннюю библиотеку ExcelNumberFormat для форматирования значений, подобных Excel.

Этот соответствующий фрагмент из их файла readme показывает, как отформатировать одно значение из объекта читателя :

string GetFormattedValue(IExcelDataReader reader, int columnIndex, CultureInfo culture)
{
    var value = reader.GetValue(columnIndex);
    var formatString = reader.GetNumberFormatString(columnIndex);
    if (formatString != null)
    {
        var format = new NumberFormat(formatString);
        return format.Format(value, culture);
    }
    return Convert.ToString(value, culture);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...