【问题标题】:Does setDataFormatForType() work correctly for Dates in XLConnect?setDataFormatForType() 是否适用于 XLConnect 中的日期?
【发布时间】:2013-11-08 18:20:52
【问题描述】:

我最近在函数上尝试了各种格式化参数

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 工作簿的日期列中 即 2013 年 11 月 6 日 = 41584。 如果我不干扰任何数据格式,则标准(POSIX)格式将被保存,但是当您在生成的 Excel 中查看它时,它分配了一些自定义“XLConnect 格式”,因此显示为“错误”:-( - 这意味着美国符号(前导月份后跟日期)但我想要的是 Eurepean(前导日期后跟月份)。

如果有人对在 XLConnect 中设置这些数据格式(尤其是“日期”)有一些经验,那么我们将不胜感激分享一些想法或智慧。

谢谢,沃尔特

【问题讨论】:

  • 您可能希望将此作为可能的错误提交。我当然和你有同样的经历。
  • 我应该提到错误报告会提交给包维护者:maintainer('XLConnect')

标签: r apache-poi xlconnect


【解决方案1】:

在 XLConnect 版本中有一个新的样式操作 XLC$"STYLE_ACTION.DATATYPE",可从 github 上的 https://github.com/miraisolutions/xlconnect 获得。 “数据类型”样式操作可用于使用可以使用setCellStyleForType 设置的特定单元格样式设置特定类型的单元格样式。请参阅以下示例:

需要(XLConnect) wb = loadWorkbook("test.xlsx", create = TRUE) setStyleAction(wb, XLC$"STYLE_ACTION.DATATYPE") cs = createCellStyle(wb, name = "mystyle") setDataFormat(cs, format = "d/m/yy") setCellStyleForType(wb, style = cs, type = XLC$"DATA_TYPE.DATETIME") 数据 = data.frame(A = 1:10, B = Sys.time() + 1:10) createSheet(wb,“数据”) writeWorksheet(wb,数据=数据,工作表=“数据”) 保存工作簿(wb)

【讨论】:

    【解决方案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)
    

    【讨论】:

    • 我做了类似的事情来解决我的问题......即定义了一个自定义格式 Date_,然后将其与 SetCellStyle 应用到相应的列。非常感谢您分享您的解决方案。
    • 您应该添加一个答案并接受它。这在 SO 上完全被接受。甚至鼓励。我尝试查找“自定义”格式,因为那是 Excel 界面中使用的“语言”,但我在 X:Connect 文档中找不到任何支持自定义类型的内容。
    • 当我说自定义格式时,我的意思是我通过 createCellStyle 定义我自己的样式,然后调用 setCellStyle。
    • 顺便说一句 - 您在这篇文章中显示的代码不起作用。由于您尝试写入的命名区域不存在,因此会导致“错误:IllegalArgumentException (Java):名称“日期”不存在!”
    • 我刚刚插入了 createName(wb, name = "Dates", formula = "mtcars!$A$1") ... 来治愈它。希望没事?
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 2017-11-22
    • 2020-04-29
    • 2012-02-24
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多