无法将公式分配给 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)
项目中其他人的代码,我正在尝试修复。
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)