如何使用xlsx包在Excel中插入空白列

时间:2019-02-20 18:32:18

标签: r dataframe r-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列中的数据,我希望将其向右移一列。

这可能吗?

1 个答案:

答案 0 :(得分:0)

您可以相当简单地完成此操作。这个想法是在第100列中复制第99列,然后将df写入第99列。由于您未提供数据,因此我举了一个小例子。我的existing_workbook.xlsx只有两列。我将第2列移到第3列,然后将file.csv中的数据添加到第2列。更新后的数据库将在第2列之前“插入”新列。

首先提供一些数据

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.csvexisting_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,则应该看到插入的列。