我使用"openxlsx"包来读写excel文件.我有一个固定文件,其中包含一个名为"数据"的表格,该表格由其他表格中的公式使用.我想更新此数据表而不接触另一个.我正在尝试以下代码:
write.xlsx(x = Rev_4, file = "Revenue.xlsx", sheetName="Data")
Run Code Online (Sandbox Code Playgroud)
但是这会删除excel文件,并在"数据"表单中仅使用新数据创建一个新文件,而其他所有文件都将被删除.任何建议?
我遇到了这个 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,:行和列的长度必须相等.
如何修复此代码,以便我不会收到错误,以便我可以将样式应用于非矩形单元格集?
我有一组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) 我想将文本字符串的一部分加粗。例如,有没有办法使用 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数据框写入Excel并希望添加具有Excel公式和/或数据验证值的其他单元格/列(例如,使用Excel中的"数据/验证"菜单提供允许值的下拉列表细胞)
我看过R包:xlsx,XLConnect和openxlsx.这些非常适合编写单元格,但不适用于公式或数据验证设置.
我目前认为我不得不使用AppleScript(在Mac上)或VBA解决方案来处理xlsx文件.如果可能的话,我想在R中完成所有操作,因此逻辑不必跨程序分割.
在这两者中:为单元格编写数据验证设置(与编写Excel公式相比)更为重要.用例是将R数据框写入Excel并包含用于进行更正的空列.对于空列,我想要为该列提供可接受值的下拉列表(例如"是"/"否").
提前致谢.
我正在尝试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)
总之,我很困惑如何让RScript批处理文件实现这一目标.
有人有任何成功或可以指出我的错误?
如何使用自动调整列宽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解决的问题.无论如何,感谢关注.
我在 R 中加载了一个 Excel 工作簿,并希望对矩形单元格范围中的边框进行一些格式化。
目前,我只能看到以下方法(如下面的代码所示):
有没有更简单的方法来实现这一目标?
如果我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) 我想将数据从 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)
任何帮助将非常感激。
当要写入的数据相同时,我能否确保两个 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 存储库。如果我自动执行此操作,那么 XLSX 文件每次都会更改,即使源数据没有更改。我想可以测试数据是否在此过程的早期发生了更改,并且不生成新的 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 格式捆绑的,并且还 …
openxlsx ×10
r ×10
excel ×7
xlsx ×2
border ×1
copy-paste ×1
formatting ×1
ggplot2 ×1
lapply ×1
xlconnect ×1