C # парсинг Excel пользовательский формат ячейки

2

Я разбираю файл Excel и испытываю трудности с чтением значения ячейки, которая имеет собственный формат ячеек dd mmm yy. Значение в ячейке, о которой идет речь, составляет 29 октября 09 (ячейка B25). Когда я запустил

String arrive = Convert.ToString(_worksheets["GENERAL"].get_Range("B25", Type.Missing).Value2);  

Я получаю "40114" в качестве значения ячейки.

Затем, когда я пытаюсь

DateTime arrive = Convert.ToDateTime(_worksheets["GENERAL"].get_Range("B25", Type.Missing).Value2);

Я получаю сообщение об ошибке "При отбрасывании из числа значение должно быть числом меньше бесконечности".

Любые мыслительные идеи будут высоко оценены.

Спасибо.

  • 0
    Вам либо а) нужно знать, как Excel представляет даты, и иметь функцию для преобразования этого представления (40114) в дату (при условии, что вы не можете сделать это напрямую), либо б) извлечь содержимое ячейки как отформатированную строку и использовать Нолдорин ответ. Последнее может быть проще, первое почти наверняка лучше (безопаснее).
Теги:
excel
datetime
parsing

2 ответа

4
Лучший ответ

Это случайное число - это дата OLE.

Вероятно, вам нужен метод DateTime.FromOADate. Посмотрите ссылку в MSDN.

  • 0
    Муравей - это сделал человек. Благодаря тонну.
  • 0
    Приятно - рад это слышать!
-2

Похоже, вы хотите DateTime.ParseExact, так как это нестандартный формат, с которым вы работаете, насколько это возможно .NET.

Попробуйте следующее:

var dateTimeStr = _worksheets["GENERAL"].get_Range("B25", Type.Missing).Value2);
var dateTime = DateTime.ParseExact(dateTimeStr, "dd MMM yy");

Страница пользовательских дат и времени Frormat Strings, также может быть хорошей ссылкой на закладку.

  • 0
    Не желая быть трудным, это не будет работать ужасно хорошо, конвертируя 40114 ... Я согласен, что, если бы он мог гарантированно получить значение в указанном формате, это работало бы
  • 0
    Спасибо за быстрый ответ. Когда я попробовал предложение, я получил сообщение о том, что ParseExact принимает 2 аргумента. Я предполагаю, что именно здесь я утверждаю, что это первый раз, когда я что-то кодировал в C #, и извиняюсь за свою нелюбовь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню