tag:forum.selfhtml.org,2005:/self Excel-Mappe schließen ohne zu speichern? – SELFHTML-Forum 2013-11-22T14:03:02Z https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594932#m1594932 Romero 2013-11-18T20:27:54Z 2013-11-18T20:27:54Z Excel-Mappe schließen ohne zu speichern? <p>Hallöchen an Euch,</p> <p>möchte nur ne kurze Anwort auf die Frage, wie man Excel ohne zu speichern beenden kann bzw. die Mappe schließen kann?</p> <p>Mit *.save() = false geht das ja sicherlich nicht.</p> <p>Wie ist also die richtige Syntax dafür?</p> <p>LG Romero</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594933#m1594933 unknown 2013-11-19T00:43:02Z 2013-11-19T00:43:02Z Excel-Mappe schließen ohne zu speichern? <p>Den Link hatte ich dir aber auch schon mal gegeben:<br> http://msdn.microsoft.com/en-us/library/office/ff838613.aspx</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594934#m1594934 Romero 2013-11-19T13:38:22Z 2013-11-19T13:38:22Z Excel-Mappe schließen ohne zu speichern? <blockquote> <p>Den Link hatte ich dir aber auch schon mal gegeben:<br> http://msdn.microsoft.com/en-us/library/office/ff838613.aspx</p> </blockquote> <p>ich danke dir.<br> Ist zwar VBA aber hab es für Javascript so gestaltet:</p> <p><code class="language-javascript">Workbook<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span>SaveChanges<span class="token operator">=</span><span class="token boolean">false</span><span class="token punctuation">)</span></code></p> <p>Und siehe da, es klappt.</p> <p>LG Romero</p> <p>Nochmals Danke</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594935#m1594935 unknown 2013-11-19T14:42:54Z 2013-11-19T14:42:54Z Excel-Mappe schließen ohne zu speichern? <blockquote> <p>Ist zwar VBA</p> </blockquote> <p>Nein, das ist die Interface-Dokumentation. Das Interface kannst du dir z.B. mit OLE View ansehen. Close sieht als idl-Deklaration so aus:<br> [id(0x00000115), helpcontext(0x00010115)]<br>         void Close(<br>                         [in, optional] VARIANT SaveChanges,<br>                         [in, optional] VARIANT Filename,<br>                         [in, optional] VARIANT RouteWorkbook);<br> Nur das Beispiel ist als VBA-Script angegeben. Man findet aber auch <a href="http://msdn.microsoft.com/de-de/library/microsoft.office.tools.excel.workbook.close%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=csharp%23code-snippet-1" rel="nofollow noopener noreferrer">andere</a>. Leider werden diese seit .Net immer schlechter.</p> <blockquote> <p>aber hab es für Javascript so gestaltet:</p> <p><code class="language-javascript">Workbook<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span>SaveChanges<span class="token operator">=</span><span class="token boolean">false</span><span class="token punctuation">)</span></code></p> </blockquote> <p>und die globale Variable SaveChanges die du nebenbei anlegst ist total umsonst.<br> <code class="language-javascript">Workbook<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span></code></p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594936#m1594936 Romero 2013-11-19T17:04:38Z 2013-11-19T17:04:38Z Excel-Mappe schließen ohne zu speichern? <blockquote> <blockquote> <p>Ist zwar VBA<br> Nein, das ist die Interface-Dokumentation. Das Interface kannst du dir z.B. mit OLE View ansehen. Close sieht als idl-Deklaration so aus:<br> [id(0x00000115), helpcontext(0x00010115)]<br>         void Close(<br>                         [in, optional] VARIANT SaveChanges,<br>                         [in, optional] VARIANT Filename,<br>                         [in, optional] VARIANT RouteWorkbook);<br> Nur das Beispiel ist als VBA-Script angegeben. Man findet aber auch <a href="http://msdn.microsoft.com/de-de/library/microsoft.office.tools.excel.workbook.close%28v=vs.100%29.aspx?cs-save-lang=1&cs-lang=csharp%23code-snippet-1" rel="nofollow noopener noreferrer">andere</a>. Leider werden diese seit .Net immer schlechter.</p> </blockquote> <blockquote> <p>aber hab es für Javascript so gestaltet:</p> <p><code class="language-javascript">Workbook<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span>SaveChanges<span class="token operator">=</span><span class="token boolean">false</span><span class="token punctuation">)</span></code></p> </blockquote> <p>und die globale Variable SaveChanges die du nebenbei anlegst ist total umsonst.<br> <code class="language-javascript">Workbook<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span></code></p> </blockquote> <p>Hy unknown,</p> <p>habe das mit dem .Close(false) gerücksichtigt.</p> <p>Aber dazu ne andere Frage. Wenn ich, wie bei dem anderen Thema, was wir beide besprochen hatten, aber nun meine EXCELApp schließen will:</p> <pre><code class="block language-javascript"><span class="token constant">EXCELAPP</span><span class="token punctuation">.</span>Workbook<span class="token punctuation">.</span><span class="token function">Save</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token constant">EXCELAPP</span><span class="token punctuation">.</span>Workbook<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token constant">EXCELAPP</span><span class="token punctuation">.</span>Application<span class="token punctuation">.</span><span class="token function">Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token constant">EXCELAPP</span><span class="token punctuation">.</span>Application <span class="token operator">=</span> <span class="token keyword">null</span> </code></pre> <p>dann sehe ich aber trotzdem eine EXCEL-Instanz im Task-Manager. Habe aber keine weitere offen. Sehe ja wie sich da eine EXCEL-Instanz öffnet (indem ich eineMappe öffne und eine Tabelle anlege) aber da nicht mehr "verschwindet".</p> <p>Erst wenn ich das komplette Script schließe, "verschwindet" diese Instanz auch aus dem Task-Manager. War es bei deinen Tests ebenso? Bzw. warum wird diese Instanz daraus nicht "gelöscht"? Bei anderen Öffnungen einer Excel-Mappe durch mein Script werden ebenfalls diese Instanzen wieder aus dem Task-Manager genommen. Warum also diesmal nicht?</p> <p>LG Romero</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594937#m1594937 unknown 2013-11-19T17:52:50Z 2013-11-19T17:52:50Z Excel-Mappe schließen ohne zu speichern? <p>Dann hast du noch irgendwo eine <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms687260%28v=vs.85%29.aspx" rel="nofollow noopener noreferrer">Referenz</a> auf ein Excelobjekt. Das Workbook-Objekt zum Beispiel.</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594938#m1594938 Romero 2013-11-19T19:11:01Z 2013-11-19T19:11:01Z Excel-Mappe schließen ohne zu speichern? <blockquote> <p>Dann hast du noch irgendwo eine <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms687260%28v=vs.85%29.aspx" rel="nofollow noopener noreferrer">Referenz</a> auf ein Excelobjekt. Das Workbook-Objekt zum Beispiel.</p> </blockquote> <p>Ich habe folgendes getestet:</p> <pre><code class="block language-javascript">EXCEL_Speicherung<span class="token punctuation">.</span>Workbook<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span> EXCEL_Speicherung<span class="token punctuation">.</span>Workbook <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span> EXCEL_Speicherung<span class="token punctuation">.</span>Application<span class="token punctuation">.</span><span class="token function">Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> EXCEL_Speicherung<span class="token punctuation">.</span>Application <span class="token operator">=</span> <span class="token keyword">null</span><span class="token punctuation">;</span> </code></pre> <p>Aber das alles brachte nix, es bleibt weiterhin im Task-Manager.</p> <p>Wenn ich aber das im VBS wie folgt angebe:</p> <pre><code class="block language-javascript">OpenWorkbook<span class="token punctuation">.</span>Close False OpenExcel<span class="token punctuation">.</span>Quit Set OpenWorkbook <span class="token operator">=</span> Nothing Set OpenExcel <span class="token operator">=</span> Nothing </code></pre> <p>dann wird die Instanz geschlossen.<br> Aber mit Hilfe deiner Klassen-Deklaration, übergebe ich ja an Javascript folgendes:</p> <pre><code class="block language-javascript">Class EXCELObj Public Application Public Workbook End Class Set ExcelObjekt <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">EXCELObj</span> Set ExcelObjekt<span class="token punctuation">.</span>Application <span class="token operator">=</span> OpenExcel Set ExcelObjekt<span class="token punctuation">.</span>Workbook <span class="token operator">=</span> OpenWorkbook Set EXCEL_Tabelle_erstellen <span class="token operator">=</span> ExcelObjekt </code></pre> <p>und versuche es, wie oben beschrieben in Javascript zu schließen.<br> Ich meine, es ist zwar nicht mehr "da" also keine Mappe offen aber es so nicht sauber programmiert.</p> <p>Das erfolgt (in Javascript) über ein Button.<br> Wenn ich diesen Button oder diese "Schließungen" erneut drücke bzw. ausführen lasse, bekomm da zwar eine Fehlermeldung, dass ExcelObjekt.Workbook kein Null oder kein Objekt sei (was ja richtig ist, hab es ja "null" gesetzt) aber die Instanz verschwindet.</p> <p>LG Romero</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594939#m1594939 unknown 2013-11-20T23:02:25Z 2013-11-20T23:02:25Z Excel-Mappe schließen ohne zu speichern? <blockquote> <p>Ich habe folgendes getestet:<br> ...<br> Aber das alles brachte nix, es bleibt weiterhin im Task-Manager.</p> </blockquote> <p>Keine Ahnung, du musst alle Objekte freigeben</p> <blockquote> <p>Wenn ich aber das im VBS wie folgt angebe:<br> dann wird die Instanz geschlossen.</p> </blockquote> <p>Auch die im VBS</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594940#m1594940 Romero 2013-11-21T17:43:09Z 2013-11-21T17:43:09Z Excel-Mappe schließen ohne zu speichern? <blockquote> <blockquote> <p>Ich habe folgendes getestet:<br> ...<br> Aber das alles brachte nix, es bleibt weiterhin im Task-Manager.<br> Keine Ahnung, du musst alle Objekte freigeben</p> </blockquote> <blockquote> <p>Wenn ich aber das im VBS wie folgt angebe:<br> dann wird die Instanz geschlossen.<br> Auch die im VBS</p> </blockquote> </blockquote> <p>Hy unknown,</p> <p>hab eine andere Lösung dafür gefunden.<br> Ich rufe eine weitere Datei auf, wo folgendes drin steht:</p> <pre><code class="block language-javascript">Function <span class="token function">EXCEL_Beenden</span><span class="token punctuation">(</span> ExcelObjekt <span class="token punctuation">)</span> ExcelObjekt<span class="token punctuation">.</span>Workbook<span class="token punctuation">.</span>Close False ExcelObjekt<span class="token punctuation">.</span>Application<span class="token punctuation">.</span>Quit Set ExcelObjekt<span class="token punctuation">.</span>Workbook <span class="token operator">=</span> Nothing Set ExcelObjekt<span class="token punctuation">.</span>Application <span class="token operator">=</span> Nothing End Function </code></pre> <p>Und da ich vorher von VBScript dieses ExcelObjekt als Klasse an Javascript übergebe, übergebe ich dieses ExcelObjekt wieder zurück an VBScript (neue Datei) und lasse diese dann über den o.g. Code schließen. Somit verschwindet das aus dem Task-Manager und ich kann somit weiter verfahren ohne das ich weiter Excel-Instanzen sich öffnen.</p> <p>LG Romero</p> https://forum.selfhtml.org/self/2013/nov/18/excel-mappe-schliessen-ohne-zu-speichern/1594941#m1594941 unknown 2013-11-22T14:03:02Z 2013-11-22T14:03:02Z Excel-Mappe schließen ohne zu speichern? <blockquote> <p>Und da ich vorher von VBScript dieses ExcelObjekt als Klasse an Javascript übergebe, übergebe ich dieses ExcelObjekt wieder zurück an VBScript (neue Datei) und lasse diese dann über den o.g. Code schließen. Somit verschwindet das aus dem Task-Manager und ich kann somit weiter verfahren ohne das ich weiter Excel-Instanzen sich öffnen.</p> </blockquote> <p>Das ist total unlogisch. Du machst in beiden Fällen das gleiche. Nur in unterschiedlichen Sprachen.<br> Das hat mich aber auf eine Idee gebracht. In VBS scheint der Garbagecollector aufzuräumen, wenn eine Variable auf NULL gesetzt wird oder am Ende einer Funktion. In JS passiert das irgendwann.<br> http://blogs.msdn.com/b/ericlippert/archive/2003/09/17/53038.aspx<br> Also sollte ein<br> CollectGarbage();<br> am Ende deiner JS-Funktion dafür sorgen, daß Exel wirklich freigegeben wird.<br> Ein kleiner Test funktioniert bei mir.</p>