模拟在C#中打开Excel

我有一个电子表格,可能是调用BDDE.EXE。 当我在Excel中打开这个电子表格时,一切正常。 我可以看到公式以“= BDDE”开头的单元格中的值。 但是,当我使用C#打开相同的文件时,Excel首先显示一个警报

Remote data not accesible. To access this data Excel needs to start another application. ... Start application 'BDDE.EXE'? 

然后,不pipe我点击了什么 – 是或否,公式被更新,以前重新计算的所有值都会丢失。

然后,我尝试强制Excel不通过将XlCalculation设置为Manual来重新计算。 在这个改变之后,Open停止工作,抛出一个COMException(没有其他信息)。

 System.Runtime.InteropServices.COMException (0x800A03EC): Exception from HRESULT : 0x800A03EC at Microsoft.Office.Interop.Excel.ApplicationClass.set_Calculation( XlCalculation RHS) 

我完全卡住了。 我不能重新计算,因为这会弄乱所有的数字。 我不能将XlCalcualtion设置为手动,因为它会抛出exception。

任何帮助表示赞赏。

没有首先打开工作簿不能设置计算属性。 这听起来像Catch 22,但它实际上并不是你想要阻止的“计算” – 你只是不希望它更新链接到外部源的单元格。

Open方法采用可选的UpdateLinks参数。 设置为false,你应该没问题。

在设置XlCalculation属性之前需要打开工作簿的Excel引擎中有一个限制。 因此,最简单的解决scheme是创build一个新的工作簿 ,然后将XlCalculation设置为所需的模式,然后用实际数据打开文件。