2014-09-29 22 views
3

我有一個非常直接的問題,這是相當標準的我認爲。不幸的是我有一些困難找到正確的語法來解決它。我只想將數據(這裏是一個簡單的整數)寫入現有的Excel表格。R - XLSX:向現有的Excel表中添加一個值

我發現,一個很好的方法是使用包'xlsx'。

require(xlsx)  # Load the xlsx package 

接下來,我將不得不加載文件,並加載所有工作表。

wb <- loadWorkbook("test.excelfile.xls") # Load the xls file 
sheets <- getSheets(wb)      # load all sheet objects 

然後我輸入值。這些是生成錯誤的行。

addDataFrame(data.frame(123), sheets[1]) # Error in addDataFrame(data.frame(123), sheets[1]) : attempt to apply non-function 
addDataFrame(123, sheets[1])    # alternative try, same error 

最後我保存工作簿。

saveWorkbook(wb, "test.excelfile.xls") # not checked yet because error occurs in line above 

對我來說,已存在的xls文件不被破壞對我來說很重要。我想保留所有的工作表,VBA宏和表單元素。只有一些細胞應該從內部R.

改變非常感謝您的幫助,

馬蒂亞斯

+0

難道你需要將數據幀添加到單元格?您只是提供工作表名稱,但您需要全部的範圍。 – 2014-09-29 12:28:11

+0

如果它是一個單一的值,爲什麼你把它做成'dataframe'?只需取得您的單一值,然後使用任何Excel連接工具寫入您選擇的指定電子表格單元格。 – 2014-09-29 12:54:03

+0

@ jbarker2160:你說得對。它只有一個單元格。因此,addDataFrame方法允許給出'StartRow'和'StartColumn'。默認情況下,它們都設置爲1.如果你不想寫入單元格(1,1),你可以簡單地改變它們。 – 2014-09-29 13:19:51

回答

6

最後我設法做什麼,我一直在尋找。我搜索了一下'Excel連接工具'(參見Carl Witthoft的推薦),發現一個很好的軟件包是XLConnect。

以下命令將一個簡單數字寫入一個單元格。他們也將VBA宏完好無損。

require(XLConnect) 

# Load workbook; create if not existing 
wb <- loadWorkbook("MC_Auswertung.xls", create = TRUE) 

# write to the workbook 
writeWorksheet(wb, 750, sheet="Auswertung", # write '750' to sheet 'Auswertung' in workbook 'wb' 
      startRow=8, startCol=4,   # specify the cell to write to 
      header=FALSE)      # do not write a header row 

# Save workbook 
saveWorkbook(wb) 

有一件事讓我感到震驚。在操作之前,xls文件有32.953字節。在上面的操作之後,它只有28.958字節。因此,大量的「數據」消失了。我不知道發生了什麼?單元格內容仍然存在。那麼,圖表,背景和邊框樣式,...

期待您的命令;-)

相關問題