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

时间:2008-12-25 13:57:27

标签: c# excel

我使用此代码打开刷新保存并关闭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();

问题是刷新和保存命令之间存在冲突,因为在后台完成刷新时文件已被保存(我猜) 谁能帮我这个?我需要知道如何知道刷新过程何时完成或任何其他指示将帮助我决定何时保存文件而不损害刷新过程

4 个答案:

答案 0 :(得分:4)

我不熟悉C#,但我擅长Excel VBA。 这里的问题是大多数Pivot表都将BackgroundQuery属性设置为True,使得数据透视表异步刷新,以便Excel文件在最终用户使用时能够响应。如果您在与文件交易期间未添加任何新的数据透视表,则可以通过取消选中数据透视表中的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

答案 1 :(得分:3)

再一次,我查看了文档,这是我可以说的。

获取您正在刷新的QueryTable对象。它有一个名为“AfterRefresh”的事件,您可以使用它来执行任何操作。

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

我想,这将同步查询记录 这对你有用吗?

答案 2 :(得分:2)

Eran,我根据我对文档的理解发布了这个。

我假设你正在使用pivottables&它使用某种查询 尝试使用Workbook对象的PivotTableCloseConnection&看看你是否可以在里面调用Save。

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

如何模拟这种情况?

答案 3 :(得分:0)

尝试使用:

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

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