Правильно ли работает setDataFormatForType() для дат в XLConnect?

Недавно я пробовал всевозможные аргументы форматирования для функции

setDataFormatForType(wb, type=XLC$DATA_TYPE.DATETIME, format="d/m/yy")

например, format="d/m/yy", как показано выше, помимо многих других.

Затем за этим следует

setStyleAction(wb, XLC$"STYLE_ACTION.DATA_FORMAT_ONLY")

а затем я пишу рабочий лист и сохраняю рабочий лист. Кажется, что никакая форма настройки формата не работает. Как только я связываюсь с любым форматом в команде setDataFormatForType, результатом является то, что числовое значение времени отображается в столбцах даты в книге Excel, которые я сохраняю позже, например, для 6 ноября 2013 г. = 41584. Если я не буду мешать любые форматы данных, а затем стандартный (POSIX) формат сохраняются, но когда вы смотрите на это в результирующем Excel, ему назначен некоторый пользовательский «формат XLConnect», поэтому он отображается «неправильно» :-( - что означает американскую нотацию (первый месяц следует по дням), но то, что я хочу, европейское (ведущий день, за которым следует месяц).

Если у кого-то есть опыт настройки этих форматов данных (особенно «дат») в XLConnect, то мы будем очень признательны, если поделитесь некоторыми мыслями или мудростью.

Спасибо, Уолтер


person GWD    schedule 08.11.2013    source источник
comment
Возможно, вы захотите представить это как возможную ошибку. У меня определенно был тот же опыт, что и у вас.   -  person IRTFM    schedule 09.11.2013
comment
Я должен был упомянуть, что отчеты об ошибках отправляются сопровождающему пакета: maintainer('XLConnect')   -  person IRTFM    schedule 11.11.2013


Ответы (2)



Вам нужно иметь именованный регион под названием «Даты». Я сохранил копию файла template2.xslx с таким регионом. Единственная мысль, которая сработала для меня, - это записать ее с помощью функции format.Date:

Dates=seq(from=as.Date("2001-01-01"), to=as.Date("2013-01-01"), by=365)
file.copy(system.file("demoFiles/template2.xlsx", 
                      package = "XLConnect"),
          "dataformat.xlsx", overwrite = TRUE)
wb <- loadWorkbook("dataformat.xlsx")
setDataFormatForType(wb, type = XLC$"DATA_TYPE.DATETIME", 
                     format = "dd/mm/yyyy")
setStyleAction(wb, XLC$"STYLE_ACTION.DATA_FORMAT_ONLY")
createName(wb, name = "Dates", formula = "mtcars!$A$1")
writeNamedRegion(wb, format(Dates, "%d.%m.%Y"), name = "Dates")
saveWorkbook(wb)
person IRTFM    schedule 08.11.2013
comment
Я сделал что-то подобное, чтобы решить свою проблему… т. е. определил пользовательский формат Date_, а затем применил его с помощью SetCellStyle к соответствующим столбцам. Большое спасибо за то, что поделились своим подходом к решению. - person GWD; 10.11.2013
comment
Вы должны добавить ответ и принять его. Это прекрасно принято на SO. Воодушевлен даже. Я попытался найти пользовательский формат, так как это язык, используемый в интерфейсе Excel, но я не смог найти в документации X: Connect ничего, что поддерживало бы пользовательский тип. - person IRTFM; 10.11.2013
comment
Когда я говорю «Пользовательский формат», я имею в виду, что я определил свой собственный стиль через createCellStyle, а затем вызвал setCellStyle. - person GWD; 11.11.2013
comment
кстати - ваш код, как показано в этом посте, не работает. Поскольку именованный регион, в который вы пытаетесь записать, не существует, это приводит к ошибке «Ошибка: IllegalArgumentException (Java): имя« Даты »не существует!» - person GWD; 11.11.2013
comment
Я просто вставил createName(wb, name = Dates, формула = mtcars!$A$1)... чтобы исправить это. Надеюсь, все в порядке? - person GWD; 11.11.2013
comment
Ваше редактирование было задержано для проверки, и по причинам, которые меня озадачивают, получило больше голосов «отклонить», чем «одобрить», поэтому я просто его. Спасибо. - person IRTFM; 11.11.2013