2016-05-09 1 views
1

Ich habe seit einiger Zeit versucht, den folgenden Code mit Microsoft.Excel.Interop auf einem neuen Blatt ausführen, die ich zu einer vorhandenen Arbeitsmappe hinzufügen und dynamisch füllen, dann für die Anzeige Zweck stelle ich diese 3 Eigenschaften:Fehler bei der Verwendung von Excel Interop FreezePanes: resultierende Arbeitsmappe verliert ihre Struktur

worksheet.Application.ActiveWindow.SplitRow = 4; 
worksheet.Application.ActiveWindow.SplitColumn = 1; 
worksheet.Application.ActiveWindow.FreezePanes = true; 

Jedesmal, wenn ich den gleichen Fehler in der resultierenden Arbeitsmappe haben: Sie alle anderen Arbeitsblätter, die bereits mit gefrorenen Scheiben waren, unstrukturierte werden (die Hälfte der Spalte B überlappt Spalte C, und andere interessante grafische Details ...).

Was ich während der Überprüfung anderer Bibliotheken von Excel-Automatisierung (ClosedXML zum Beispiel) herausgefunden habe, ist, dass andere den XML-Code direkt ändern, also nicht das ActiveWindow, sondern direkt das Arbeitsblatt selbst verwenden.

Ist es möglich, dass mein Problem von der Tatsache herrührt, dass ich eine Eigenschaft des ActiveWindow nicht ordnungsgemäß ändere? Wenn ja, weiß jemand, ob es möglich ist, Fenster ohne ActiveWindow einzufrieren? Wenn nein, hat jemand eine Idee, wo es herkommen kann?

Vielen Dank im Voraus

Roddhes

Antwort

0

Haben Sie aktiviert entsprechende Arbeitsblatt, bevor Sie die Eigenschaften einstellen? Ich meine, so etwas wie:

Worksheet.Activate(); 
Worksheet.Application.ActiveWindow.SplitRow = 4; 
Worksheet.Application.ActiveWindow.SplitColumn = 1; 
Worksheet.Application.ActiveWindow.FreezePanes = true; 

Als Hilfe können Sie einige Code-Beispiele finden hier die obere Reihe zum Einfrieren (unbedingt die Kommentare dort für zusätzliche Code-Verbesserungen lesen): https://stackoverflow.com/a/5060792/232530

Es scheint, dass Einfrieren von Bereichen kann auch mit OpenXML erfolgen. Es ist in einem anderen SO-Thread beschrieben: Freeze Panes in OpenXml SDK 2.0 for Excel document

+0

Ja, ich hatte das Arbeitsblatt vor der Verwendung aktiviert. Die Fenster werden ordnungsgemäß auf meinem Arbeitsblatt eingefroren, nachdem ich diesen Code ausgeführt habe. Das einzige Problem ist der Kollateralschaden aller anderen Blätter in der Arbeitsmappe. – Roddhes

+1

Ich habe versucht OpenXML und es funktioniert (wie für die anderen XML-Interop-Bibliotheken), aber um es zu verwenden, muss ich meine Arbeitsmappe über Microsoft.Interop schließen und dann über OpenXML wieder öffnen, und die Arbeitsmappen, die ich im Allgemeinen verwende, sind schwer, so würde ich Ich bevorzuge es, nur mit einer einzigen Bibliothek zu arbeiten. – Roddhes

+0

Können Sie genauer beschreiben, wie Sie das Fenster aktivieren und wo Sie die Worksheet-Variable zuweisen? Sie haben erwähnt, dass Sie das Arbeitsblatt dynamisch erstellen, so dass die Art und Weise, wie es erstellt wurde, die beschriebenen Effekte nach dem Einfrieren der Fenster verursacht. Bitte versuchen Sie, ein vorhandenes Fenster einzufrieren und zu überprüfen, ob es für dieses Fenster korrekt funktioniert. –