如何使用 xlsx 包在 Excel 中插入空白列
How to use xlsx package to insert blank column in Excel
如何在现有 Excel 文件中插入空白列,同时保留该列中的数据?
我有跨多列的时间序列数据(每列一年),末尾有汇总数据(最小值、最大值、百分位数)。
我想使用 R 插入一个包含新年数据的列,但我目前的代码粘贴在摘要数据之上。
代码已概括如下:
# Add necessary packages
library(rJava)
library(xlsx)
library(xlsxjars)
# Import data. Assume 1 column of data
df <- read.csv("file.csv", header = TRUE)
# Create a workbook using library(xlsx) function
workbook <- loadWorkbook("existing_workbook.xlsx")
# Import sheet names from above workbook
sheets <- getSheets(workbook)
# Add the created dataframe into the workbook.
# Assume the workbook has 100 existing columns and data is to be added to column 99
addDataFrame(df, sheets$correct_sheet, startColumn = 99, row.names = FALSE)
#Save the created workbook
saveWorkbook(workbook, "R_Output.xlsx")
这最终会覆盖第 99 列中的数据,我希望将其向右移动一列。
这可能吗?
你可以相当简单地做到这一点。这个想法是在第 100 列中复制第 99 列,然后将 df 写入第 99 列。由于您不提供数据,我做了一个可重现的小例子。我的 existing_workbook.xlsx
只有两列。我将第 2 列移动到第 3 列,然后将 file.csv
中的数据添加到第 2 列。更新后的数据库将在第 2 列之前具有新列 "inserted"。
首先是一些数据
library(xlsx)
## Create some reproducible data for testing
write.csv(1:150, "file.csv", row.names=FALSE)
df = data.frame(X = seq(2,300,2), Y=rep(LETTERS, length.out=150))
wb <- xlsx::createWorkbook()
sheet1 <- xlsx::createSheet(wb, sheetName='test')
addDataFrame(df, sheet1, col.names=TRUE, row.names=FALSE)
saveWorkbook(wb, 'existing_workbook.xlsx')
现在我们在您的代码中有了文件 file.csv
和 existing_workbook.xlsx
。我的代码与您的代码一样开始加载数据。
## Your input statements
df <- read.csv("file.csv", header = TRUE)
workbook <- loadWorkbook("existing_workbook.xlsx")
sheets <- getSheets(workbook)
# Import sheet names from above workbook
sheets <- getSheets(workbook)
现在我将第 2 列复制到第 3 列以保留它。
## Move a copy of column 2 to column 3
columnToPreserve = readColumns(sheets$test, 2, 2, startRow=1)
addDataFrame(columnToPreserve, sheets$test,
startColumn = 3, row.names = FALSE)
现在我们可以将 df 写入第 2 列而不会丢失旧的第 2 列。
## Now we can write df into column 2
addDataFrame(df, sheets$test, startColumn = 2, row.names = FALSE)
## Save elsewhere to make sure it was right
saveWorkbook(workbook, 'updated_workbook.xlsx')
如果您在 excel 中打开 updated_workbook.xlsx
,您应该会看到插入的列。
如何在现有 Excel 文件中插入空白列,同时保留该列中的数据?
我有跨多列的时间序列数据(每列一年),末尾有汇总数据(最小值、最大值、百分位数)。
我想使用 R 插入一个包含新年数据的列,但我目前的代码粘贴在摘要数据之上。
代码已概括如下:
# Add necessary packages
library(rJava)
library(xlsx)
library(xlsxjars)
# Import data. Assume 1 column of data
df <- read.csv("file.csv", header = TRUE)
# Create a workbook using library(xlsx) function
workbook <- loadWorkbook("existing_workbook.xlsx")
# Import sheet names from above workbook
sheets <- getSheets(workbook)
# Add the created dataframe into the workbook.
# Assume the workbook has 100 existing columns and data is to be added to column 99
addDataFrame(df, sheets$correct_sheet, startColumn = 99, row.names = FALSE)
#Save the created workbook
saveWorkbook(workbook, "R_Output.xlsx")
这最终会覆盖第 99 列中的数据,我希望将其向右移动一列。
这可能吗?
你可以相当简单地做到这一点。这个想法是在第 100 列中复制第 99 列,然后将 df 写入第 99 列。由于您不提供数据,我做了一个可重现的小例子。我的 existing_workbook.xlsx
只有两列。我将第 2 列移动到第 3 列,然后将 file.csv
中的数据添加到第 2 列。更新后的数据库将在第 2 列之前具有新列 "inserted"。
首先是一些数据
library(xlsx)
## Create some reproducible data for testing
write.csv(1:150, "file.csv", row.names=FALSE)
df = data.frame(X = seq(2,300,2), Y=rep(LETTERS, length.out=150))
wb <- xlsx::createWorkbook()
sheet1 <- xlsx::createSheet(wb, sheetName='test')
addDataFrame(df, sheet1, col.names=TRUE, row.names=FALSE)
saveWorkbook(wb, 'existing_workbook.xlsx')
现在我们在您的代码中有了文件 file.csv
和 existing_workbook.xlsx
。我的代码与您的代码一样开始加载数据。
## Your input statements
df <- read.csv("file.csv", header = TRUE)
workbook <- loadWorkbook("existing_workbook.xlsx")
sheets <- getSheets(workbook)
# Import sheet names from above workbook
sheets <- getSheets(workbook)
现在我将第 2 列复制到第 3 列以保留它。
## Move a copy of column 2 to column 3
columnToPreserve = readColumns(sheets$test, 2, 2, startRow=1)
addDataFrame(columnToPreserve, sheets$test,
startColumn = 3, row.names = FALSE)
现在我们可以将 df 写入第 2 列而不会丢失旧的第 2 列。
## Now we can write df into column 2
addDataFrame(df, sheets$test, startColumn = 2, row.names = FALSE)
## Save elsewhere to make sure it was right
saveWorkbook(workbook, 'updated_workbook.xlsx')
如果您在 excel 中打开 updated_workbook.xlsx
,您应该会看到插入的列。