[vb.net] Невозможно назначить формулу для диапазона ячеек в Excel


Answers

.formulalocal работы! (Пока .formula , .value и .formular1c1 нет.)

Я только начал работать с VB.NET и пришел к очень похожей проблеме. Сначала это были мои упрощенные данные ( Table1 в 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 очень помог построить этот код, так как он владеет этим удивительным сайтом: 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 . Я посмотрел в этом ответе , чтобы получить объяснение и выполнил некоторые из инструкций. Я решил, что моя проблема заключается в следующем: проблема возникает из-за функции, введенной в ячейку, и пытается обновить другую ячейку.

Вы также проверили этот пост. Я попробовал совсем другое (например, просто поместил формулы без = а затем снова запустил и поставил равные знаки), но та же проблема.

Я не знаю, как подойти к этому.




Related