Ошибка синтаксического анализа Excel (xls) - PullRequest
0 голосов
/ 12 апреля 2010

Я работаю над проектом, в котором мне нужно проанализировать файлы Excel для клиента для извлечения данных. Здесь появляется странная вещь: когда я анализирую дату в формате 5/9 (9 мая) в таблице Excel, я получаю 39577 в моей программе. Я не уверен, что год закодирован здесь (это 2008 для этих листов).

Являются ли эти даты числом дней с какой-то эпохи?

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

Ответы [ 3 ]

1 голос
/ 12 апреля 2010

DateTime.FromOADate (если вы используете .NET) - это метод, который вы хотите. Даты Excel хранятся в виде двойных. Если у вас есть даты в первые два месяца 1900 года, вы можете получить ошибку за счет високосного года в Excel 1900 года.

С http://msdn.microsoft.com/en-us/library/system.datetime.fromoadate.aspx:

Число с плавающей запятой двойной точности который представляет дату как число дней до или после базовой даты, полночь, 30 декабря 1899 года. Знак и неотъемлемая часть D закодировать дату как положительный или отрицательный день смещение с 30 декабря 1899 г. и абсолютное значение дробная часть d кодирует время дня как часть дня смещение с полуночи. должно быть значение между отрицательным 657435,0 через положительный 2958466.0.

1 голос
/ 13 апреля 2010

В Excel даты хранятся как количество дней с 0 января 1900 года (поэтому 1 января 1900 года будет иметь значение «1»). Вы можете найти действительно хорошее объяснение того, как Excel обрабатывает даты и время здесь:

Даты и время в Excel

Когда даты отображаются на экране в Excel в виде «5/9», «9 мая» или чего-то подобного, это уловка форматирования и не является представителем значения основных данных. Похоже, ваша программа синтаксического анализа извлекает базовое значение, а не отформатированную дату. Однако, чтобы предложить исправление, мне нужно знать, какая у вас программа разбора (макрос Excel, формула, внешний код и т. Д.).

0 голосов
/ 12 апреля 2010

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

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