Heim  >  Artikel  >  Web-Frontend  >  Ausführliche Erläuterung des JavaScript-Exports nach Excel. Beispiele_Javascript-Kenntnisse

Ausführliche Erläuterung des JavaScript-Exports nach Excel. Beispiele_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 16:30:181751Durchsuche

Das Beispiel in diesem Artikel beschreibt, wie Sie Excel mit JavaScript exportieren. Teilen Sie es als Referenz mit allen. Die spezifische Implementierungsmethode lautet wie folgt:

Code kopieren Der Code lautet wie folgt:



So exportieren Sie eine WEB-Seite in ein Excel-Dokument


































So exportieren Sie WEB-Seiten in Excel-Dokumente
Spaltenüberschrift 1 Spaltenüberschrift 2 Spaltenüberschrift 3 Spaltenüberschrift 4 Spaltenüberschrift 5
aaa bbb ccc ddd eee
AAA BBB CCC DDD EEE
FFF GGG HHH III JJJ






下面是处理excel 进程关闭问题

复制代码 代码如下:
// JavaScript中的析构问题(ActiveX Object示例)
//------------------------------------------------ ---------
<script><br> var strSaveLocation = 'file:///E:/1.xls'<br> Funktion createXLS() {<br>   var excel = new ActiveXObject("Excel.Application");<br>   var wk = excel.Workbooks.Add();<br>   wk.SaveAs(strSaveLocation);<br>   wk.Saved = true; <p>  excel.Quit();<br> }</p> <p>Funktion writeXLS() {<br>   var excel = new ActiveXObject("Excel.Application");<br>   var wk = excel.Workbooks.Open(strSaveLocation);<br>   var sheet = wk.Worksheets(1);<br>   sheet.Cells(1, 1).Value = '测试字符串';<br>   wk.SaveAs(strSaveLocation);<br>   wk.Saved = true;</p> <p>  excel.Quit();<br> }<br> </script>


 
 

在本地文件操作时并不会出现异常。如果strSaveLocation是一个远程的URL,这时本地将会保存一个文件存取权限的凭证,而且同时只能一个(远程的)实例来开启该Excel文档并存储.于是如果反复点击"重写"按钮,就会出现异常.

--而且工程中的实际问题.

解决这个问题的方法很复杂.它涉及到两个问题:
① 本地凭证的释放
② ActiveX-Objekt实例的释放

下面我们先从JavaScript中对象的„失效“问题说起。简单的说:
① 一个对象在其生存的上下文环境之外,即会失效.
② 一个全局的对象在没有被执用(引用)的情况下,即会失效.

例如:

复制代码 代码如下:
//----------------- ------------
//Wann läuft ein JavaScript-Objekt ab
//------------------------------------------------ ----------
Funktion testObject() {
var _obj1 = new Object();
}

Funktion testObject2() {
var _obj2 = new Object();
Gibt _obj2;
zurück }

// Beispiel 1
testObject();

// Beispiel 2
testObject2()

// Beispiel 3
var obj3 = testObject2();
obj3 = null;

// Beispiel 4
var obj4 = testObject2();
var arr = [obj4];
obj3 = null;
arr = [];

In diesen vier Beispielen:
– „Beispiel 1“ erstellt _obj1 in der Funktion testObject(), aber wenn die Funktion beendet wird, hat sie den Kontext der Funktion verlassen, sodass _obj1 ungültig ist; - In „Beispiel 2“ wird auch ein Objekt _obj2 in testObject2() erstellt und ausgegeben, sodass das Objekt einen „außerhalb der Funktion“-Kontext (und Lebenszyklus) hat, da der Rückgabewert der Funktion jedoch nicht verwendet wird andere Variablen „Hold“, daher ist _obj2 ebenfalls sofort ungültig; - In „Beispiel 3“ wird _obj2, das von testObject2() erstellt wurde, von der externen Variablen obj3 gehalten. Zu diesem Zeitpunkt wird _obj2 ungültig, bis die Codezeile „obj3=null“ wirksam wird, da die Referenzbeziehung verschwindet.
– Aus dem gleichen Grund wie in Beispiel 3 wird _obj2 in „Beispiel 4“ nach der Codezeile „arr=[]“ ungültig.

Die „Ungültigmachung“ eines Objekts wartet jedoch nicht, bis es „freigegeben“ wird. Innerhalb der JavaScript-Laufzeitumgebung gibt es keine Möglichkeit, dem Benutzer genau mitzuteilen, wann ein Objekt freigegeben wird. Dies basiert auf dem Speicherrecyclingmechanismus von JavaScript. ——Diese Strategie ähnelt dem Recyclingmechanismus in .NET.

Im vorherigen Beispielcode für den Excel-Vorgang kann der Eigentümer des Objekts, d. h. der Prozess „EXCEL.EXE“, erst nach der „Freigabe der ActiveX-Objektinstanz“ erfolgen. Dateisperren und Berechtigungsnachweise des Betriebssystems sind prozessbezogen. Wenn das Objekt also lediglich „ungültig gemacht“ und nicht „freigegeben“ wird, gibt es Probleme für andere Prozesse, die die Datei verarbeiten und auf die Berechtigungsnachweise des Betriebssystems verweisen.

——Einige Leute sagen, dass dies ein FEHLER im JavaScript- oder COM-Mechanismus ist. Eigentlich nein, dies wird eher durch eine komplexe Beziehung zwischen Betriebssystem, IE und JavaScript verursacht als durch ein unabhängiges Problem.

Microsoft hat eine Strategie zur Lösung dieses Problems bekannt gegeben: den Speicherrecyclingprozess aktiv aufzurufen.

Ein CollectGarbage()-Prozess (normalerweise als GC-Prozess bezeichnet) wird in (Microsofts) JScript bereitgestellt. Der GC-Prozess wird verwendet, um die „ungültigen Objektausnahmen“ im aktuellen IE zu bereinigen, d. h. um den aufzurufen Zerstörungsprozess eines Objekts.

Der Code zum Aufrufen des GC-Prozesses im obigen Beispiel lautet:


Code kopieren Der Code lautet wie folgt://------------- --- -------------------------
// Beim Umgang mit ActiveX-Objekten die Standardaufrufmethode des GC-Prozesses
//------------------------------------------------ ----------
Funktion writeXLS() {
//(weggelassen...)

excel.Quit(); excel = null;

setTimeout(CollectGarbage, 1);
}

Die erste Codezeile ruft die Methode excel.Quit() auf, um den Excel-Prozess zu beenden und zu beenden. Da die JavaScript-Umgebung zu diesem Zeitpunkt eine Excel-Objektinstanz enthält, wird der Excel-Prozess nicht tatsächlich beendet.

Die zweite Codezeile setzt Excel auf Null, um die Objektreferenz zu löschen und dadurch das Objekt „ungültig“ zu machen. Da sich das Objekt jedoch immer noch im Funktionskontext befindet, wird das Objekt bei einem direkten Aufruf des GC-Prozesses immer noch nicht bereinigt.

Die dritte Codezeile verwendet setTimeout(), um die CollectGarbage-Funktion aufzurufen, und das Zeitintervall wird auf „1“ gesetzt, wodurch der GC-Prozess erst ausgeführt wird, nachdem die Funktion writeXLS() ausgeführt wurde. Auf diese Weise erfüllt das Excel-Objekt die beiden Bedingungen „kann durch GC bereinigt werden“: keine Referenz und Verlassen des Kontexts.

Die Verwendung des GC-Prozesses ist in JS-Umgebungen mit ActiveX-Objekten sehr effektiv. Zu den potenziellen ActiveX-Objekten gehören XML, VML, OWC (Office Web Componet), Flash und sogar VBArray in JS.

Da die Ajax-Architektur XMLHTTP verwendet und die Funktion „Kein Seitenwechsel“ erfüllen muss, führt ein aktiver Aufruf des GC-Prozesses zum richtigen Zeitpunkt zu einer effizienteren Benutzeroberflächenerfahrung.

Tatsächlich wird das oben erwähnte Excel-Problem auch bei Verwendung des GC-Verfahrens immer noch nicht vollständig gelöst. Weil der IE auch die Berechtigungsnachweise zwischenspeichert. Die einzige Möglichkeit, die Berechtigungsnachweise der Seite zu aktualisieren, besteht darin, „zu einer neuen Seite zu wechseln“. Tatsächlich habe ich im zuvor erwähnten SPS-Projekt nicht GC verwendet, sondern den folgenden Code:


Code kopieren Der Code lautet wie folgt:
//----------------- ------------
// Seitenwechselcode, der bei der Verarbeitung von ActiveX-Objekten verwendet wird
//------------------------------------------------ ----------
Funktion writeXLS() {
//(weggelassen...)

excel.Quit();
excel = null;

// Der folgende Code wird verwendet, um einen Fehler im IE-Aufruf Excel zu beheben, der in MSDN bereitgestellten Methode:
// setTimeout(CollectGarbage, 1);
// Da der vertrauenswürdige Status der Webseite nicht gelöscht (oder synchronisiert) werden kann, werden in
Methoden wie SaveAs() verwendet // Beim nächsten Aufruf wird es ungültig.
location.reload();
}

Abschließend noch eine ergänzende Anmerkung zu GC: Wenn die IE-Form minimiert wird, ruft der IE sie einmal aktiv auf
CollectGarbage()-Funktion. Dadurch kann die Speichernutzung nach der Minimierung des IE-Fensters erheblich verbessert werden.

Ich hoffe, dass dieser Artikel für alle bei der Webprogrammierung auf Basis von JavaScript hilfreich sein wird.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn