如何使用 R 中的 openxlsx 将 excel 中的列自动调整为多张工作表
How to Auto Size column in excel to multiple sheets using openxlsx in R
我有一个 excel 文档,其中有 15 sheet 个,我每月更新一次。目前,我一直在阅读文档并按如下方式对其进行操作
sheetNames <- openxlsx::getSheetNames("myDoc.xlsx")
oldData <- lapply(sheetNames, function(x) openxlsx::readWorkbook("YouTube Search Results.xlsx",
sheet=x, skipEmptyRows = FALSE))
names(oldData) <- sheetNames
finalDF <- Map(bind_rows, oldData, newData)
openxlsx::write.xlsx(finalDF, "YouTube Search Results.xlsx", overwrite = TRUE)
这对我来说效果很好,可以根据列表 newData
的元素更新每个 sheet。
我的问题是我想调整所有 sheet 上所有列的大小。我目前无法执行此操作,因为我没有在 oldData
中创建工作簿对象,而 setColWidths()
需要工作簿对象。我是否必须更改读取数据的方式,或者是否有替代方法来设置列宽而不这样做?
我看到了诸如 之类的回复,但他们没有提到对多个 sheet
这样做
要完全控制输出格式,您需要创建一个工作簿对象。但是,对于基本格式设置,write.xlsx
允许您传递一些额外的格式设置参数,包括自动调整列宽以适应数据的宽度(有关详细信息,请参阅帮助)。您只需要将 colWidths="auto"
添加到 write.xlsx
。这是一个调整您的代码的可重现示例:
library(openxlsx)
library(tidyverse)
# Create sample "old" and "new" Excel files
dl = list(mtcars=mtcars, iris=iris)
write.xlsx(dl, "myDoc.xlsx")
write.xlsx(dl, "YouTube Search Results.xlsx")
# Load old data add new data, and write to a new file
sheetNames <- getSheetNames("myDoc.xlsx")
oldData <- lapply(sheetNames, function(x) readWorkbook("YouTube Search Results.xlsx",
sheet=x, skipEmptyRows = FALSE))
newData <- lapply(sheetNames, function(x) readWorkbook("myDoc.xlsx",
sheet=x, skipEmptyRows = FALSE))
finalDF <- Map(bind_rows, oldData, newData)
write.xlsx(finalDF, "YouTube Search Results Updated.xlsx", colWidths="auto")
我有一个 excel 文档,其中有 15 sheet 个,我每月更新一次。目前,我一直在阅读文档并按如下方式对其进行操作
sheetNames <- openxlsx::getSheetNames("myDoc.xlsx")
oldData <- lapply(sheetNames, function(x) openxlsx::readWorkbook("YouTube Search Results.xlsx",
sheet=x, skipEmptyRows = FALSE))
names(oldData) <- sheetNames
finalDF <- Map(bind_rows, oldData, newData)
openxlsx::write.xlsx(finalDF, "YouTube Search Results.xlsx", overwrite = TRUE)
这对我来说效果很好,可以根据列表 newData
的元素更新每个 sheet。
我的问题是我想调整所有 sheet 上所有列的大小。我目前无法执行此操作,因为我没有在 oldData
中创建工作簿对象,而 setColWidths()
需要工作簿对象。我是否必须更改读取数据的方式,或者是否有替代方法来设置列宽而不这样做?
我看到了诸如
要完全控制输出格式,您需要创建一个工作簿对象。但是,对于基本格式设置,write.xlsx
允许您传递一些额外的格式设置参数,包括自动调整列宽以适应数据的宽度(有关详细信息,请参阅帮助)。您只需要将 colWidths="auto"
添加到 write.xlsx
。这是一个调整您的代码的可重现示例:
library(openxlsx)
library(tidyverse)
# Create sample "old" and "new" Excel files
dl = list(mtcars=mtcars, iris=iris)
write.xlsx(dl, "myDoc.xlsx")
write.xlsx(dl, "YouTube Search Results.xlsx")
# Load old data add new data, and write to a new file
sheetNames <- getSheetNames("myDoc.xlsx")
oldData <- lapply(sheetNames, function(x) readWorkbook("YouTube Search Results.xlsx",
sheet=x, skipEmptyRows = FALSE))
newData <- lapply(sheetNames, function(x) readWorkbook("myDoc.xlsx",
sheet=x, skipEmptyRows = FALSE))
finalDF <- Map(bind_rows, oldData, newData)
write.xlsx(finalDF, "YouTube Search Results Updated.xlsx", colWidths="auto")