Как исправить "Недопустимая дата OleAut". при чтении файла Excel в C#?

Я работал с электронными таблицами Excel, и до сих пор у меня никогда не возникало с ними проблем... Но эта ошибка,"Не допустимая дата OleAut.", Появилась внезапно, когда я попытался прочитать файл Excel. Кто-нибудь знает, как я могу это исправить. Вот код, который я использую, чтобы прочитать Excel и поместить данные в набор данных. Раньше все работало нормально, но после внесения некоторых изменений (не связанных с датами) в источник данных появилась эта ошибка.

var fileName = string.Format("C:\\Drafts\\Excel 97-2003 formats\\All Data 09 26 2012_Edited.xls");
        var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);

        var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);

        DataSet Originalds = new DataSet();
        adapter.Fill(Originalds, "Employees"); // this is where the error shows up

5 ответов

Решение

Я вроде нашел способ обойти эту проблему, я изменил строку подключения на последнюю версию oleDB.

var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0 Xml;HDR=YES;'", fileName);

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

В моем случае дата в моей таблице была вставлена ​​вручную в неправильном формате, это было 01/01/0019, а не 01/01/2019.

Посмотрите на разные форматы даты, в моем случае один столбец был в формате дд / мм / гггг, а другой был в мм / дд / гггг. После того, как форматы даты были исправлены, импорт данных работал.

Как это исправить? Привет! Вставьте ваши данные в фиктивную строку в строке 1 и вставьте столбцы, о которых идет речь, в строку (только в этом случае - это ошибка типа данных, поэтому примените исправление в соответствии с типом).

Необходимо понимать, что делает адаптер данных, который интерпретирует тип данных каждого столбца, исследуя по умолчанию первые 8 строк данных (без заголовка, если HDR=Yes в строке подключения) и выбирая тип данных (это можно переопределить - да, есть переопределение - в строке подключения до 16 строк - почти никогда не бывает очень полезно).

Адаптеры данных могут делать и другие неприятные вещи, например пропускать строки в столбцах со смешанными типами данных, например string/double (на самом деле это просто столбец строки, но не для адаптера, если все первые строки двойные). В этом примере вы даже не увидите ошибки.

Это часто происходит с данными, поступающими из источников ERP, которые содержат столбцы «произвольной формы». Определяемые пользователем столбцы - обычные подозреваемые. Это может быть очень сложно найти в проблемах с другими типами данных. Однажды я потратил довольно много времени на решение проблемы со столбцом, который был набран как строка с максимальной длиной 255 символов. Глубоко в данных были ячейки, которые превышали эту длину и выдавали ошибки.

Если вы не хотите продвигаться к уровню «генной инженерии» в работе с адаптерами данных, самый быстрый способ решить подобную проблему - это загрузить ваши данные и установить правильные значения столбцов, о которых идет речь. тип (или неправильный, который вы затем можете исправить в своем собственном коде, если это необходимо). План Б - вернуть данные клиенту / пользователю и попросить их исправить их. Удачи с планом Б. Есть причина, по которой это не план А.

Подробнее об управлении через строку подключения и аналогичных проблемах с адаптером - но будьте осторожны, результаты не будут на 100% надежными. Я тщательно тестировал изменение настроек IMEX и HDR. Если вы хотите быстро выполнить проект, привет! OleDB и смешанные типы данных Excel: недостающие данные

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

У меня возникла эта проблема при чтении excel в oledb.

Я обнаружил, что в Excel многие столбцы даты пусты в начальных записях. У меня было 6000 записей в Excel, и один из столбцов даты имеет около первых 4000 пустых ячеек, поэтому Excel не может понять, что преобразовать в ячейку, поэтому я добавил одну фиктивную запись, заполненную датой, и обработал мой файл. Или вы можете переместить несколько записей, в которых указано значение даты вверху

Другие вопросы по тегам