«Решено» Query Excel поля даты с использованием ODBC вернуть ноль - PullRequest
1 голос
/ 22 ноября 2011

Я использую следующую конфигурацию для запуска Java-программы для извлечения данных из файла Excel. Некоторые из этих столбцов содержат данные с контекстом отметки времени.

  • Платформа: Win 7 (x64)
  • ODBC: Excel (x32) [через Office 2010]; строки для сканирования = 8
  • Схема Excel: «некоторые поля», «поле даты 1», «поле даты 2», «поле даты 3», «другие поля»
  • Формат даты в Excel: дд / мм / гггг ЧЧ: ММ
  • Java 1.6
  • Драйвер JDBC / ODBC: sun.jdbc.odbc.JdbcOdbcDriver

Я пробовал следующие (упрощенные) запросы для извлечения данных:

SELECT [field 1], [date field 1], [date field 2] from [Sheet1$]

SELECT [field 1], [date field 1], [date field 2] from [Sheet1$] where [field 1] = "sample values"

Я уверен, что «поле даты 2» содержит допустимые значения даты (но очищено для первых 20 строк) и Java-программа всегда возвращает ноль для этого столбца.

Итак, мой вопрос, повлияет ли пустое значение [поле даты 2] исходных строк, скажем, 8 строк, на поведение JDBC / ODBC? Если да, как этого избежать (без сортировки данных в файле excel)?

- Правка - На самом деле, я спрашиваю, не приведет ли драйвер из-за пустых значений этого поля в первых нескольких строках (скажем, 8) к извлечению значения этого столбца (даже если последующие строки содержат допустимое значение). Я также сбит с толку, если это зависит от реализации, что драйвер просто откажется извлечь это поле, возвращая ноль для всех условий, и даже не пытаться обрабатывать столбец как строковый тип или возвращать пустую строку (вместо NULL)

- Правка - Ссылаясь на информацию в этом КБ: http://support.microsoft.com/kb/141284

Пустое значение первых нескольких строк в [поле даты 2] заставит драйвер ODBC вернуть NULL при любых условиях. Таким образом, основная причина найдена, и что дальше - найти альтернативный драйвер JDBC для файлов Excel.

Спасибо.

1 Ответ

1 голос
/ 22 ноября 2011

Драйвер ODBC для Excel не будет правильно определять столбец как столбец даты, если первые 8 строк не заполнены, поэтому попытка получить значение даты для всех остальных строк не будет успешной.Обойти это невозможно, это не проблема, связанная с Java.

Я не очень знаком с JDBC, но если вы вызываете метод для возврата значения даты для поля, попробуйте вызватьметод для извлечения строкового значения, а затем синтаксического анализа строки в значение даты (если это не сработает, вызовите метод, который возвращает значение с плавающей точкой, поскольку именно так даты Excel хранятся внутри).

Или, лучшее решение намного состоит в том, чтобы НЕ использовать драйвер ODBC для Excel (который общеизвестно содержит ошибки и ограничен) и использовать вместо этого библиотеку Apache POI, которая может читать файлы Excel в исходном формате.Вы теряете синтаксический сахар запросов, но простой цикл по активным строкам, чтобы найти ваши данные, сработает.

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