如何使用vb.net强制完全重新计算Excel工作表?

时间:2018-03-29 15:27:35

标签: excel vb.net

我是visual basic的初学者,这是我的第一个堆栈溢出问题,所以如果这是一团糟,我很抱歉。我正在尝试从Windows窗体中输入值并将它们输入到Excel工作表中。我使用搜索和替换来实现这一目标。我已经成功地走到了尽头。我现在唯一的问题是,excel不会计算输入到工作表中的值。如果我手动进入并重置每个单元格(使用F2),Excel将仅计算这些功能。我也有自动计算。

Dim excelReplacements As New List(Of Array)
   ' Create list to hold hold excel replacements
    excelReplacements.Add({"utilCost", 
ExclusiveUtilityRate.Value + SharedUtilityRate.Value})
    excelReplacements.Add({"intCost", Internet.Value})
    excelReplacements.Add({"pCost", PhoneCost})
    excelReplacements.Add({"pUnits", PhoneQty.Value})


'Select sheet 2
workbook.Worksheets("Sheet2").Activate()

Try
        'loop though excelReplacements and replace every key with it's value
         For Each rep In excelReplacements
             Dim ranges As CellRange() = 
                 sheet.FindAllString(Convert.ToString(rep.GetValue(0)), False, False)
             For Each range As CellRange In ranges
             If rep.GetValue(0) Is "pCost" Then
                 sheet.Replace("pCost", Convert.ToDouble(PhoneCost.Value))
             ElseIf rep.GetValue(0) Is "pUnits" Then
                 sheet.Replace("pUnits", Convert.ToDouble(PhoneQty.Value))
             Else
                 Dim value As Long = Convert.ToDouble(rep.GetValue(1))
                                    sheet.Replace(range.Value, value)
             End If

         Next
     Next
Catch e1 As System.Exception
     'if couldn't find the word,give a message
     Console.WriteLine("The text doesn't exist the word you want to replace")

End Try
Output.AppendText("Changes Made...")
    ' save workbook
     workbook.SaveToFile(xlssave, FileFormat.Version2013)
     workbook.Worksheets.Remove("Evaluation Warning")

     xlsApp.Quit()
     Output.AppendText("Worksheet Saved" & Environment.NewLine)

我做了很多研究,但我只找到了关于vba的信息,我没有使用。一世 我有以下导入:

Imports System.IO
Imports System.Runtime.InteropServices
Imports Newtonsoft.Json
Imports Excel = Microsoft.Office.Interop.Excel
Imports Spire.Xls
Imports System
Imports Microsoft.Office.Interop
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text

如果您需要更多我的代码,我很乐意告诉您。如果有任何方法强制使用vb.net进行完整计算(祈祷有)或者如果您在我的代码中看到导致excel不能计算值的错误,请告诉我。

3 个答案:

答案 0 :(得分:1)

如果修改 VB 代码,使用它的 Excel 电子表格不会意识到它已更改,因此不会重新计算。但是,任何说服 Excel 重新计算包含对现在修改的 VB 函数的调用的单元格的任何事情都将强制它为该单元格执行。同样编辑单元格,即使只是按 F2 和 Enter,也可以工作。但是,如果您有很多单元格使用该功能,那将是一件痛苦的事情。我发现的解决方案:查找和替换(完整)函数名称,然后单击全部替换...宾果游戏!

答案 1 :(得分:0)

试试xlsApp.CalculateFull。计算方法适用于应用程序级别,而不是工作簿级别。

.Calculate方法也适用于工作表和范围级别。这也可能有助于计算较小的范围比在应用程序中的所有打开的工作簿中进行完整计算更快。

答案 2 :(得分:0)

我会添加.Calculate方法以强制计算。