2016-05-13 9 views
0

Ich habe ein wirklich frustrierend Problem, wenn ich nennen RefreshAll() von Microsoft.Interop.Excel es die Daten nicht aktualisiert werden, wenn ich die Arbeitsmappe in Excel öffnen und ich muss manuell die Refresh klicken, um alle Taste innerhalb von Excel ... ich habe sogar versucht, ruft alle über vba erfrischen und es nicht aktualisieren noch die Daten nicht ... ich bin immer mit aufgefordert.C#: Microsoft.Interop.Excel Refresh alle nicht funktioniert

„die Pivottable-Bericht ohne zugrunde liegenden Daten gespeichert wurden Verwenden sie die Aktualisieren Sie den Befehl zum Aktualisieren des Berichts. "

Trotz der Tatsache, dass ich bereits den Befehl "Alle aktualisieren" aufgerufen.

public void applyMacro(string excelFile) 
{ 
    var excelApplication = new Microsoft.Office.Interop.Excel.Application { Visible = false }; 
    var targetExcelFile = excelApplication.Workbooks.Open(excelFile); 
    try 
    { 
     string[] macros = addMacros(ref targetExcelFile); 
     for (int i = 0; i < 2; i++) 
      excelApplication.Run(macros[i]); 
     targetExcelFile.RefreshAll(); 
     targetExcelFile.Save(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
     Console.ReadKey(); 
    } 
    finally 
    { 
     excelApplication.Quit(); 
    } 
} 

und in vba haben versucht, die folgende Zugabe, bevor die Refresh-Aufruf:

For Each ws In Worksheets 
    For Each qt In ws.QueryTables 
    qt.Refresh BackGroundQuery:=False 
    next qt 
Next ws 

Irgendwelche Ideen ??

Antwort

0

Sie können diese Tabelle auf Pivot verwenden:

YourPivotTable.PivotCache().RefreshOnFileOpen = true; 
YourPivotTable.SaveData = true;