Как получить дату и время в миллисекундах из Excel 2010 с помощью XLConnect

Привет, мне дали электронную таблицу XL (... не моя вина, пожалуйста, продолжайте читать...).

Как вы, возможно, знаете, XL не очень хорошо работает с датой, временем и миллисекундами. Чтобы миллисекунды отображались в ячейке, вы должны выбрать специальный формат aaaa-mm-jj hh:mm:ss.000

Мне нужно загрузить этот лист XL в R с XLConnect (я не могу использовать другой пакет).

моментальный снимок

Как вы видете:

  • Что в ФОРМУЛЕ ячейки B2 есть 2012-10-01 12:15:15
  • То, что ОТОБРАЖАЕТСЯ в ячейке B2 из-за моего формата, 2012-10-01 12:15:15.447
  • К вашему сведению, я указал базовое числовое значение ячейки B2 в B3

Моя проблема в том, что я делаю

wb = loadWorkbook(currentFile)
dataFile <- readWorksheet(wb, sheet=c('Sheet1'),header=TRUE);
#or even when I specify the type (my real file is a 3 columns matrix)
dataFile <- readWorksheet(wb, sheet=c('Sheet1'),header=TRUE, 
                              colTypes = c(XLC$DATA_TYPE.NUMERIC,XLC$DATA_TYPE.DATETIME,XLC$DATA_TYPE.NUMERIC), 
                              dateTimeFormat='%Y-%m-%d %H:%M:%OS');

Я получаю data.frame с 2012-10-01 12:15:15 БЕЗ МОИХ ДРАГОЦЕННЫХ МИЛЛИСЕКУНД

Тогда мой вопрос:

Что я могу сделать, чтобы убедиться, что R загружает этот datetime за миллисекунды (сразу, без того, чтобы я возился с загрузкой numeric и потом конвертировал себя)


person statquant    schedule 23.05.2013    source источник
comment
Я вижу это в файле справки ?readWorksheet dateTimeFormat Формат даты/времени, используемый при преобразовании даты/времени. По умолчанию используется getOption(XLConnect.dateTimeFormat). Это должен быть спецификатор формата POSIX в соответствии с strptime, хотя еще не все спецификации реализованы, однако наиболее важные из них доступны. так что, возможно, вы SOL до следующего обновления. Требуется дополнительное расследование :-)   -  person Carl Witthoft    schedule 23.05.2013
comment
Поскольку мне явно больше нечего делать :-), вот возможный обходной путь. Если вы можете изменить исходный код Excel, добавьте столбец с формулой =A1-floor(A1,1), чтобы извлечь числовую часть, равную секундам... или, черт возьми, просто переформатируйте даты как их числовое значение и преобразуйте обратно в R.   -  person Carl Witthoft    schedule 23.05.2013
comment
Эй, приятель, да, я могу сделать много трюков, в реальной жизни у меня есть сотни таких файлов, мне удалось правильно отформатировать файл из R, верите вы или нет, SAS может правильно импортировать эти файлы... , (ПОЗОР), поэтому я загружу эти недавно отформатированные файлы в SAS и экспортирую обратно в csv, или, если я почувствую себя одиноким, я напишу код VBA, чтобы скопировать и вставить специальное значение в строки правильного формата ... Много работы для чего-то просто, но я все еще надеюсь, что эта упаковка выглядит красиво ...   -  person statquant    schedule 23.05.2013
comment
Да, или напишите макрос, чтобы сохранить все листы как csv, используйте read.csv и немного магии, чтобы преобразовать строки даты и времени в фактические даты.   -  person Carl Witthoft    schedule 23.05.2013


Ответы (1)


Я зарегистрировал и исправил проблему 13 в нашем репозитории github по адресу https://github.com/miraisolutions/xlconnect. Теперь должны попадаться миллисекунды. Просто убедитесь, что вы также установили options(digits.secs = 3) перед печатью, иначе миллисекунды не будут отображаться.

person Martin Studer    schedule 25.05.2013
comment
Спасибо дружище за быстрое решение! ++ - person statquant; 26.05.2013