【问题标题】:Add new row to existing Excel table with XLConnect's appendWorksheet function使用 XLConnect 的 appendWorksheet 函数向现有 Excel 表添加新行
【发布时间】:2017-12-15 07:20:04
【问题描述】:

我想要实现的是将R 中的对象中的一行添加到Excel 文件中已经存在的表中(读取表,如“Excel 表”中的表)。

通过以下代码,我完美地将行添加到现有表中:

library(XLConnect)
setStyleAction(wb,XLC$"STYLE_ACTION.NONE")
wb <- loadWorkbook("test.xlsx")
appendWorksheet(wb, expense, sheet="expenses", header = FALSE)
saveWorkbook(wb)

这里的问题是,我在 Excel 中有大量其他公式,例如使用 Expenses[@TDC] 的引用。如果我添加该行,这些值将不会自动成为 Expenses 表的一部分。有可能吗?

【问题讨论】:

  • 您的意思是把wb &lt;- ... 放在setStyleAction 之前吗?这是我能让你的示例代码工作的唯一方法
  • 这是一个艰难的解决方案:显而易见的解决方案应该包括将您的费用包含在 Excel“表格”对象中,并在其上附加 XLConnect。但是XLConnect只能readTable;它不能writeTable。我有一个(不优雅的)解决方案,涉及下面的 VBA 宏

标签: r excel


【解决方案1】:

我建议在您的电子表格中编写一个简单的公式复制宏。当然,您需要将其称为 test.xlsm 而不是 test.xlsx。如果您的电子表格如下所示:

那么您的宏可能如下所示:

Option Explicit

Sub MyMacro()
    Dim BottomRowOfData As Integer, BottomRowOfFormula As Integer, rowDiff As Integer

    With ThisWorkbook.Worksheets("expenses")
        BottomRowOfData = .Range("B1").End(xlDown).Row
        BottomRowOfFormula = .Range("C1").End(xlDown).Row
        rowDiff = BottomRowOfData - BottomRowOfFormula

        If (rowDiff > 0) Then
            .Range("C" & BottomRowOfFormula).Copy
            Call .Range(.Range("C" & BottomRowOfFormula + 1), .Range("C" & BottomRowOfData)).PasteSpecial
        End If
    End With

    ' Save your work
    ThisWorkbook.Save
End Sub

根据我对this question on so 的回答,您可以从 R 调用 VBA 宏。为了完整起见,以下是该问题的代码:

library(RDCOMClient)

# Open a specific workbook in Excel:
xlApp <- COMCreate("Excel.Application")
xlWbk <- xlApp$Workbooks()$Open("C:\\TEMP\\test.xlsm")

# this line of code is only necessary if you want to see your spreadsheet getting updated:
xlApp[['Visible']] <- TRUE 

# Run the macro called "MyMacro":
xlApp$Run("MyMacro")

# Close the workbook and quit the app:
xlWbk$Close(FALSE)
xlApp$Quit()

# Release resources:
rm(xlWbk, xlApp)
gc()

【讨论】:

  • 这里的工作很棒。它可以顺利运行,但问题是我无法向这个特定文件添加宏(因为它用于没有宏可能性的设备)。显然,您的回答是完成这项工作的完全有效的方法。希望有一天他们将这个“功能”添加到库中,因为我相信它对许多人来说非常有用。
  • 嗯。没有弄清楚如何在 R 中进行更复杂的、类似宏的 Excel 操作,也许您可​​以在“主”.xlsm 工作簿中编写一些 VBA 宏来操作所有其他未启用宏的 .xlsx 工作簿?
猜你喜欢
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2016-03-29
相关资源
最近更新 更多