通过c#刷新并保存excel文件

我用这个代码打开刷新保存并closuresexcel文件:

Application excelFile = new Application(); Workbook theWorkbook = excelFile.Workbooks._Open(Environment.CurrentDirectory + "/WebGate", 0, false, 5, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, true, false, System.Reflection.Missing.Value, false); Sheets sheets = (Sheets)theWorkbook.Worksheets; theWorkbook.RefreshAll(); theWorkbook.Save(); excelFile.Quit(); 

问题是刷新和保存命令之间有冲突,因为文件已经保存,而刷新已经在后台完成(我猜)任何人都可以帮助我呢? 我需要知道如何才能知道什么时候刷新过程完成或任何其他迹象,这将有助于我决定何时应该保存文件没有伤害刷新进程

我不熟悉C#,但我擅长Excel VBA。 这里的问题是大多数Pivot表将BackgroundQuery属性设置为True,使得数据透视表asynchronous刷新,以便Excel文件remians在被最终用户使用时响应。 如果在文件交易过程中不添加任何新的数据透视表,则可以通过取消选中外部数据选项下的数据透视表 – >表格设置 – > BackgroundQuery中的BackgroundQuery来修复该文件。 如果您要添加数据透视表,则需要将此属性设置为false

 Dim oPivot As PivotTable set oPivot=worksheets("xyz").PivotTables("Pivot1") oPivot.PivotCache.BackgroundQuery = False 

如果您不确定要修复哪个表,并在Excel中有大量表,请使用Excel VBA中的以下代码来修复它。

 Public Sub FixPivotTables() Dim oPivot As New PivotTable, oSheet As Worksheet For Each oSheet In ThisWorkbook.Worksheets For Each oPivot In oSheet.PivotTables oPivot.PivotCache.BackgroundQuery = False Next Next End Sub 

再次,我看了文档,这是我能说的。

获取正在刷新的QueryTable对象。 它有一个名为“AfterRefresh”的事件,你可以采取任何行动。

此外,而不是在工作簿上执行刷新,对特定的QueryTable执行刷新(除非有多个QueryTables)。 QueryTable有一个Refresh方法,该方法接受一个名为BackGroundQuery的布尔参数,您可以将其设置为False。

我猜,这将同步查询logging。
那对你有用吗?

伊兰,我根据我对文档的理解发布这个。

我假设你使用的是pivottables,它使用某种查询。
尝试使用工作簿对象的PivotTableCloseConnection&看看你是否可以调用里面的保存。

在Excel 2007中,Application对象具有AfterCalculate事件 – 也可以使用。

如何模拟这种情况?

尝试使用:

 this.Application.ActiveWorkbook.RefreshAll(); this.Application.ActiveWorkbook.Save(); 

如有必要,使用.ReCalculate()动作。