无法将公式分配给Excel中的单元格区域
在项目中的其他人的代码,我正在修复。
listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)
FormulaMatrix(i, j)
总是一个String
值。 无论随机/testing的价值,我尝试,成功地分配,除非它是一个公式,例如。
=IF(LENGTH([@Units])>0;[@SalesAmount]-[@DiscountAmount]0)
如果我在公式的开头删除了=
符号,它会被正确地赋值,但是这样做没用,因为它不是公式。
@Units
, @SalesAmount
, @DiscountAmount
是引用/列的名称。
所以,当分配公式时,我得到一个exceptionHRESULT: 0x800A03EC
。 我查了一下这个答案 ,以得到解释,并按照其中的一些说明。 我确定我的问题如下: 问题发生在一个单元格中input的函数,它试图更新另一个单元格。
也检出了这个职位。 我尝试了很大的不同(比如把公式没有=
然后再跑一遍,把等号),但同样的问题。
我对如何解决这个问题毫无头绪。
错误可能来自您当前的数据,分别是工作表的布局。 我build议你在分配公式之前检查listO.Range(i, j).FormulaR1C1
里面的listO.Range(i, j).FormulaR1C1
。
我有一个范围内已经有错误的数据,然后奇怪,我不知道为什么,我不能指定新的公式。
如果是这种情况 – 尝试清除范围的值,然后分配公式:
listO.Range(i, j).FormulaR1C1 = "" listO.Range(i, j).FormulaR1C1 = FormulaMatrix(i, j)
.formulalocal
作品! (而.formula
, .value
和.formular1c1
不。)
我刚刚开始使用VB.NET,出现了一个非常类似的问题。 这是我最初的简化数据( Sheet1
Table1
):
然后在应用下面的代码后,我有这样的:
整个代码的forms:
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帮助build立了这个代码,因为他拥有这个真棒网站: http : //www.siddharthrout.com/
问题可能在于你的公式。 尝试这个-
=IF(LEN([@Units])>0,[@SalesAmount]-[@DiscountAmount],0)
如果这不起作用,我会尝试使用.formula方法,而不是.formulaR1C1 ..是否有任何理由特别是你使用R1C1的引用?