oledb excel некоторые столбцы даты возвращают ноль - PullRequest
1 голос
/ 26 апреля 2019

Я читаю xlsx-файл через oledb. Есть несколько строк, в которых столбец (содержащий строку даты) возвращает ноль, а некоторые строки, в которых столбец (также содержащий строку даты) возвращает строку даты. В Excel для типа столбца установлено значение «дата».

Вот моя строка подключения:

$ "Provider = Microsoft.ACE.OLEDB.12.0; Data Источник = {PATH_TO_FILE}; Расширенные свойства = \ "Excel 12.0 Xml, HDR = NO \ ""

Вот текст команды для запроса данных:

$ "SELECT * FROM [SHEET_NAME $ A4: BC] ГДЕ F1 НЕ НУЛЯЕТ "

Вот как я читаю данные из записи данных:

var test = dataRecord.GetValue(dataRecord.GetOrdinal("F39"));

Вот несколько примеров того, что инспектор показывает мне, когда тест содержит строку даты:

{07.01.1975 00:00:00}
{03.08.1987 00:00:00}
{03.10.1988 00:00:00}
{01.05.1969 00:00:00}
{20.12.2016 00:00:00}
{18.07.2011 00:00:00}

В остальных случаях инспектор показывает только:

{}

Вот скриншот из xlsx-документа, где я пометил строку красным цветом, где возвращаемое значение пустое, и зеленым, где возвращена фактическая строка даты:

enter image description here

Строки даты отформатированы как dd.mm.yyyy

Почему эти строки возвращают пустое значение вместо строки даты?


В соответствии с предложением AndyG я проверил, могут ли значения строки даты зависать в зависимости от формата («dd.mm.yyyy» против «mm.dd.yyyy»). Но есть случаи, которые недействительны для "mm.dd.yyyy", которые не завершаются неудачей.

1 Ответ

0 голосов
/ 15 мая 2019

Я не смог решить проблему, но смог ее обойти, изменив тип столбца в exel на text.

Мне пришлось скопировать весь xls-файл, удалить содержимое копии, установить для типа столбца текст, скопировать содержимое из первого файла и вставить его во второй файл.В противном случае Excel изменил строки даты на числа, которые используются для хранения даты.

Теперь я могу правильно читать ячейки.

...