无法将公式分配给 Excel 中的单元格范围

Unable to assign formula to cell range in Excel

项目中其他人的代码,我正在尝试修复。

listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)

其中 FormulaMatrix(i, j) 始终是 String 值。我尝试使用的任何 random/test 值都被成功分配,除非它是一个公式,例如。

=IF(LENGTH([@Units])>0;[@SalesAmount]-[@DiscountAmount]0)

如果我删除公式开头的 = 符号,它会被正确分配,但它就没用了,因为它不是公式。

@Units@SalesAmount@DiscountAmount 是 references/names 列。

因此,在分配公式时,出现异常 HRESULT: 0x800A03EC。我查阅了 以获得解释并按照那里的一些说明进行操作。我确定我的问题如下:问题是由于在一个单元格中输入了一个函数,它正在尝试更新另一个单元格。

也检查了 this post. 我尝试了完全不同的方法(比如只输入没有 = 的公式,然后再 运行 并输入等号),但同样的问题。

我不知道如何处理这个问题。

问题可能出在您的公式上。试试这个-

=IF(LEN([@Units])>0,[@SalesAmount]-[@DiscountAmount],0)

如果这不起作用,我会尝试使用 .formula 方法而不是 .formulaR1C1。您使用 R1C1 引用有什么特别的原因吗?

.formulalocal有效!(而 .formula.value.formular1c1 无效。)

我刚开始使用 VB.NET 并遇到了一个非常相似的问题。这是我最初的简化数据(Table1 in Sheet1):

然后在应用下面的代码后我得到了这个:

表单的完整代码:

Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1
    '~~> Define your Excel Objects
    Dim xlApp As New Excel.Application
    Dim xlWorkBook As Excel.Workbook
    Dim xlWorkSheet As Excel.Worksheet
    Dim strAddress As String = "C:\Temp\SampleNew.xlsx"
    Dim list1 As Object


    Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
        '~~> Add a New Workbook (IGNORING THE TWO DOT RULE)
        xlWorkBook = xlApp.Workbooks.Open(strAddress)

        '~~> Display Excel
        xlApp.Visible = True

        '~~> Set the relevant sheet that we want to work with
        xlWorkSheet = xlWorkBook.Sheets("Sheet1")

        With xlWorkSheet

            '~~> Change the range into a tabular format
            list1 = .ListObjects("Table1")

        End With

        list1.range(2, 4).formulalocal = "=IF(LEN([@Month])>5;[@Income]-[@MoneySpent];0)"

        '~~> Save the file
        xlApp.DisplayAlerts = False
        xlWorkBook.SaveAs(Filename:=strAddress, FileFormat:=51)
        xlApp.DisplayAlerts = True

        '~~> Close the File
        xlWorkBook.Close()

        '~~> Quit the Excel Application
        xlApp.Quit()

        '~~> Clean Up
        releaseObject(xlApp)
        releaseObject(xlWorkBook)
    End Sub


    '~~> Release the objects
    Private Sub releaseObject(ByVal obj As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub
End Class

@Siddharth Rout helped a lot to build this code, as he owns this awesome site: http://www.siddharthrout.com/

错误可能来自您当前的数据,分别是 sheet 的布局。我建议您在分配公式之前检查 listO.Range(i, j).FormulaR1C1 中的内容。

我遇到过这样的情况,range里面已经有错误的数据,然后奇怪的是,不知道为什么,我无法赋值新的公式。

如果是这种情况 - 尝试清除范围的值,然后分配公式:

listO.Range(i, j).FormulaR1C1 = ""
listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)