Как использовать пакет xlsx для вставки пустого столбца в Excel - PullRequest
0 голосов
/ 20 февраля 2019

Как вставить пустой столбец в существующий файл 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 голосов
/ 25 февраля 2019

Вы можете сделать это довольно просто.Идея состоит в том, чтобы сделать копию столбца 99 в столбце 100, а затем записать 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.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')

Если вы откроете updated_workbook.xlsx в Excel, выдолжен увидеть вставленный столбец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...