我使用以下代码打开、刷新、保存和关闭excel文件:
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();问题是refresh和save命令之间存在冲突,因为文件是在后台(我猜)刷新时保存的,有人能帮我解决这个问题吗?我需要知道如何才能知道刷新过程何时完成或任何其他指示,这些指示将帮助我决定何时保存文件而不影响刷新过程
发布于 2008-12-26 21:05:01
我不熟悉C#,但我擅长Excel VBA。这里的问题是,大多数透视表都会将BackgroundQuery属性设置为True,从而使透视表异步刷新,以便最终用户使用时Excel文件可以响应。如果您在处理文件时没有添加任何新的透视表,那么您可以通过取消选中外部数据选项下的透视表->表设置->后台查询中的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发布于 2008-12-26 20:11:35
再一次,我看了文档,下面是我能说的。
获取正在刷新的QueryTable对象。它有一个名为"AfterRefresh“的事件,您可以使用它来执行任何操作。
此外,不对工作簿执行刷新,而是对特定的QueryTable执行刷新(除非您有多个QueryTables)。QueryTable有一个Refresh方法,它接受一个名为BackGroundQuery的布尔参数,您可以将该参数设置为False。
我猜,这将同步查询记录。
这对你有效吗?
发布于 2008-12-25 18:43:28
Eran,我是根据我对文档的理解来发布这篇文章的。
我假设您正在使用数据透视表&它使用了某种类型的查询。
尝试使用Workbook对象的PivotTableCloseConnection &看看是否可以在其中调用Save。
在Excel2007中,应用程序对象有AfterCalculate事件--这也很有用。
如何模拟这种情况?
https://stackoverflow.com/questions/392818
复制相似问题