标签: openxlsx

如何使用R中的Openxlsx包修改Excel工作簿中的现有工作表?

我使用"openxlsx"包来读写excel文件.我有一个固定文件,其中包含一个名为"数据"的表格,该表格由其他表格中的公式使用.我想更新此数据表而不接触另一个.我正在尝试以下代码:

write.xlsx(x = Rev_4, file = "Revenue.xlsx", sheetName="Data")
Run Code Online (Sandbox Code Playgroud)

但是这会删除excel文件,并在"数据"表单中仅使用新数据创建一个新文件,而其他所有文件都将被删除.任何建议?

excel r openxlsx

13
推荐指数
1
解决办法
1万
查看次数

openxlsx错误:行和列的长度必须相等

我遇到了这个 Nabble用户在尝试使用非矩形行和列集将样式应用于Excel工作簿时遇到的相同问题.

wb <- createWorkbook()
addWorksheet(wb, "Iris")
writeData(wb, sheet = 1, x = iris)
boldStyle <- createStyle(textDecoration=c("bold"))
addStyle(wb, 1, style = boldStyle, cols=4:5, rows = 1:150)
Run Code Online (Sandbox Code Playgroud)

addStyle出错(wb,1,style = boldStyle,cols = 4:5,rows = 1:150,:行和列的长度必须相等.

如何修复此代码,以便我不会收到错误,以便我可以将样式应用于非矩形单元格集?

excel r openxlsx

10
推荐指数
1
解决办法
1147
查看次数

使用R和Openxlsx将数据框列表作为工作表输出到单个Excel文件中

我有一组CSV文件.我想打包它们并将数据导出到包含多个工作表的单个Excel文件.我将CSV文件作为一组数据框读入.

我的问题是如何构造命令openxlsx,我可以手动完成,但我有一个列表构造问题.具体来说,如何将数据框添加为命名列表的子组件,然后作为参数传递给write.xlsx()

好的,我首先在磁盘上列出CSV文件并在内存中生成一组数据帧...

# Generate a list of csv files on disk and shorten names... 
filePath <- "../02benchmark/results/results_20170330/"
filePattern <- "*.csv"
fileListwithPath = list.files(path = filePath, pattern = filePattern, full.names = TRUE)
fileList = list.files(path = filePath, pattern = filePattern, full.names = FALSE)

datasets <- gsub("*.csv$", "", fileList)
datasets <- gsub("sample_", "S", datasets)
datasets

# Now generate the dataframes for each csv file...
list2env(
  lapply(setNames(fileListwithPath, make.names(datasets)),
         read.csv), envir = .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

示例输出:

dput(datasets)
c("S10000_R3.3.2_201703301839", "S10000_T4.3.0_201703301843", 
"S20000_R3.3.2_201703301826", "S20000_T4.3.0_201703301832", …
Run Code Online (Sandbox Code Playgroud)

excel r xlsx lapply openxlsx

8
推荐指数
1
解决办法
1768
查看次数

如何使用 openxlsx 将文本字符串的一部分加粗?

我想将文本字符串的一部分加粗。例如,有没有办法使用 openxlsx R 包仅将“这是我的文本字符串”中的“文本”加粗:

wb <- openxlsx::createWorkbook()

openxlsx::addWorksheet(wb, 'Contents')

bold_text <- openxlsx::createStyle(textDecoration = "bold")
openxlsx::addStyle(wb, sheet = 'Contents', bold_text, rows = 1, cols = 1, gridExpand = TRUE, stack = TRUE)

writeData(wb, sheet = 'Contents', x = 'this is my text string', startRow = 1, startCol = 1)

openxlsx::saveWorkbook(wb, file =  'D:testing.xlsx', overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)

r openxlsx

8
推荐指数
0
解决办法
821
查看次数

可以使用R编写Excel公式或数据验证吗?

我正在尝试将R数据框写入Excel并希望添加具有Excel公式和/或数据验证值的其他单元格/列(例如,使用Excel中的"数据/验证"菜单提供允许值的下拉列表细胞)

我看过R包:xlsx,XLConnect和openxlsx.这些非常适合编写单元格,但不适用于公式数据验证设置.

我目前认为我不得不使用AppleScript(在Mac上)或VBA解决方案来处理xlsx文件.如果可能的话,我想在R中完成所有操作,因此逻辑不必跨程序分割.

在这两者中:为单元格编写数据验证设置(与编写Excel公式相比)更为重要.用例是将R数据框写入Excel并包含用于进行更正的空列.对于空列,我想要为该列提供可接受值的下拉列表(例如"是"/"否").

提前致谢.

r xlsx xlconnect openxlsx

7
推荐指数
1
解决办法
1393
查看次数

使用命令行时,无法通过openxlsx包将绘图插入XLSX

我正在尝试openxlsx使用R中的包将绘图插入到XLSX文件中.当我使用R GUI时,我能够完成此操作.

但是,使用批处理文件时,会创建绘图,但不会将其插入XLSX文件中.而是将其创建为与新创建的XLSX文件相邻的单独PDF文件(自动命名为"Rplots.pdf").数据框很好地写入XLSX文件.

R脚本(名为"insertPlot.R"):

library(ggplot2)
library(openxlsx)
wb <- createWorkbook()
addWorksheet(wb, "Data")
addWorksheet(wb, "Graph", gridLines=FALSE)
df <- data.frame(c(1:5), c(5:1))
names(df) <- c("x","y")
writeData(wb, "Data", df)
p <- ggplot(aes(x=x, y=y), data=df) + geom_line(size=1, colour="blue")
print(p)    #plot needs to be showing
insertPlot(wb, "Graph", width=11.18, height=7.82, fileType="png", units="in")
saveWorkbook(wb, "test.xlsx", overwrite=TRUE)
Run Code Online (Sandbox Code Playgroud)

批处理文件脚本:

"C:\Program Files\R\R-3.1.3\bin\RScript.exe" --no-save --no-environ --no-init-file --no-restore --no-Rconsole "C:\temp\insertPlot.R"
Run Code Online (Sandbox Code Playgroud)

R GUI(所需)结果

R批处理命令结果

总之,我很困惑如何让RScript批处理文件实现这一目标.

有人有任何成功或可以指出我的错误?

excel r ggplot2 openxlsx

7
推荐指数
1
解决办法
1718
查看次数

R - 自动调整Excel列宽

如何使用自动调整列宽openxlsx

我的一个列有一个日期变量(例如21-08-2017),如果使用ctrl+cExcel 复制,并且通常粘贴在其他位置,则显示为#######(如果增加列宽以在Excel中显示内容,则它会正常粘贴).我想将重复性任务集成到我的代码中.这是我现在正在使用的:

WB <- loadWorkbook(File)
addWorksheet(WB, Sheet)
writeDataTable(WB, Sheet, DF, withFilter=F, bandedRows=F, firstColumn=T)
saveWorkbook(WB, File,  overwrite =TRUE)
Run Code Online (Sandbox Code Playgroud)

我在这里附上了相关的全部代码,我也在根据表值进行条件格式化.请建议一种在此处集成自动调整列宽的方法.

编辑:默认情况下,R的XLSX输出具有默认的8.43列宽,我想根据单元格内容将其设置为自动调整,或者为每列手动设置它.

To Mod:这是我试图在R中使用openxlsx解决的问题.无论如何,感谢关注.

excel r copy-paste openxlsx

7
推荐指数
2
解决办法
4154
查看次数

如何使用 R 中的“openxlsx”包在单元格范围周围应用粗边框

我在 R 中加载了一个 Excel 工作簿,并希望对矩形单元格范围中的边框进行一些格式化。

  1. 我想在所有单元格之间放置一个细边框
  2. 在单元格范围的外部放置一个粗边框。

目前,我只能看到以下方法(如下面的代码所示):

  1. 在范围内添加细边框
  2. 用左粗边框和其​​他细边框覆盖左侧单元格
  3. 用右粗边框和其​​他细边框覆盖正确的单元格
  4. 用正确的边框分别覆盖每个角单元格

有没有更简单的方法来实现这一目标?


编辑1:

如果我stack = TRUE在第二个电话中使用,我可以跳过角落:

library(openxlsx)

wb <- openxlsx::createWorkbook()
openxlsx::addWorksheet(
  wb = wb,
  sheetName = "Borders"
)

rangeRows = 2:5
rangeCols = 4:8

insideBorders <- openxlsx::createStyle(
  border = c("top", "bottom", "left", "right"),
  borderStyle = "thin"
)
openxlsx::addStyle(
  wb = wb,
  sheet = "Borders",
  style = insideBorders,
  rows = rangeRows,
  cols = rangeCols,
  gridExpand = TRUE
)

openxlsx::openXL(wb)

## left borders
openxlsx::addStyle(
  wb = wb,
  sheet = …
Run Code Online (Sandbox Code Playgroud)

formatting r border openxlsx

7
推荐指数
1
解决办法
1763
查看次数

使用 R 转换 Excel 文件中存储为文本的数字

我想将数据从 R 输出到 excel 文件,并且一直在使用 openxlsx 包。

writeDataTable 是我一直在使用的函数。问题是我希望其中一列的条目是数字和文本的混合。由于 R 中数据帧的列必须具有所有相同类型的条目,因此所有内容都会转换为字符条目。

当我打开输出的 Excel 文件时,我会在数字单元格的角落看到一个绿色的小三角形,告诉我它们是存储为文本的数字,并让我可以选择转换为数字。

我想知道是否可以让 R 在保存文件之前创建的工作簿对象中为我转换它。

我花了很多时间在谷歌上搜索这个问题,寻找可能有帮助的不同库,但到目前为止还没有找到任何东西。我在下面有一个例子。请注意,这不是我使用的确切数据框,而是用于演示目的。

df = data.frame(A = c('Dog', '5', '7.04'), B = c('Cat', '12', '1.23'))
wb = createWorkbook()
addWorksheet(wb, "Sheet2")
writeDataTable(wb, "Sheet2", df)
output_file = "C:\\Users\\johndoe\\documents\\excel_file.xlsx"
saveWorkbook(wb, output_file)
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

excel r openxlsx

7
推荐指数
1
解决办法
3836
查看次数

我可以从 R 中的同一数据帧写入相同的 xlsx 文件吗?

当要写入的数据相同时,我能否确保两个 XLSX 文件(用openxlsx::write.xlsx写入)相同?我认为电子表格中写入了一个时间戳,这意味着相隔一秒以上写入的相同数据会创建一个不同的文件。

例如,当快速连续书写时:

library(openxlsx)
write.xlsx(mtcars, "/tmp/t1.xlsx");write.xlsx(mtcars, "/tmp/t2.xlsx")
Run Code Online (Sandbox Code Playgroud)

这些文件是相同的:

$ md5sum /tmp/t?.xlsx
c9b5f6509e20dd62b158debfbef376fe  /tmp/t1.xlsx
c9b5f6509e20dd62b158debfbef376fe  /tmp/t2.xlsx
Run Code Online (Sandbox Code Playgroud)

但如果我在写入之间睡觉:

unlink("/tmp/t1.xlsx") # remove previous
unlink("/tmp/t2.xlsx")
write.xlsx(mtcars, "/tmp/t1.xlsx");Sys.sleep(2);write.xlsx(mtcars, "/tmp/t2.xlsx")
Run Code Online (Sandbox Code Playgroud)

一切都不同:

$ md5sum /tmp/t?.xlsx
460945a610df3bc8a1ccdae9eb86c1fa  /tmp/t1.xlsx
a4865be49994092173792c9f7354e435  /tmp/t2.xlsx
Run Code Online (Sandbox Code Playgroud)

我的用例是一个生成 XLSX 文件的过程,该文件将进入 git 存储库。如果我自动执行此操作,那么 XLS​​X 文件每次都会更改,即使源数据没有更改。我想可以测试数据是否在此过程的早期发生了更改,并且不生成新的 XLSX 文件,但让 git 执行“这是否已更改?”似乎更容易 测试但 XLSX 中明显不可见的元数据打破了这一点。请叫我懒惰。

是否可以设置 XLSX 元数据来防止这种情况发生?我想也许那里有一个“创建日期”。我不在乎这是否一直是 1970-01-01。

先发制人的防御:不,我不能使用 CSV,XLSX 有多个工作表,这就是我的最终用户想要的。是的,我也已经将其写入 SQlite 数据库,并且向其中写入相同的数据时是相同的。

我认为这不能按openxlsx原样完成,因为差异是由于创建的元数据 XML 造成的:https: //github.com/ycphs/openxlsx/blob/7742063a4473879490d789c552bb8e6cc9a0d2c7/R/baseXML.R#L77电流Sys.time()进入created磁场。

差异似乎有两个来源。首先,Excel 元数据写入<dcterms:created>MS Excel 文档结构内的元数据。但即使设置相同(通过猴子修补openxlsx)仍然会留下差异,因为文档是使用标准 ZIP 格式捆绑的,并且还 …

excel r reproducible-research openxlsx

7
推荐指数
1
解决办法
160
查看次数