[Vb.net] 无法将公式分配给Excel中的单元格区域


Answers

.formulalocal作品! (而.formula.value.formular1c1不。)

我刚刚开始使用VB.NET,出现了一个非常类似的问题。 这是我最初的简化数据( Sheet1 Table1 ):

然后在应用下面的代码后,我有这样的:

整个代码的形式:

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帮助建立了这个代码,因为他拥有这个真棒网站: http : //www.siddharthrout.com/

Question

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

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

FormulaMatrix(i, j)总是一个String值。 无论随机/测试的价值,我尝试,成功地分配,除非它是一个公式,例如。

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

如果我在公式的开头删除了=符号,它会被正确地赋值,但是这样做没用,因为它不是公式。

@Units@SalesAmount@DiscountAmount是引用/列的名称。

所以,当分配公式时,我得到一个异常HRESULT: 0x800A03EC 。 我查了一下这个答案 ,以获得解释,并按照其中的一些说明。 我确定我的问题如下: 问题发生在一个单元格中输入的函数,它试图更新另一个单元格。

也检出了这个职位。 我尝试了很大的不同(比如把公式没有=然后再跑一遍,把等号),但同样的问题。

我对如何解决这个问题毫无头绪。