Rumah >hujung hadapan web >tutorial js >Penjelasan terperinci tentang eksport JavaScript ke Excel examples_javascript kemahiran

Penjelasan terperinci tentang eksport JavaScript ke Excel examples_javascript kemahiran

WBOY
WBOYasal
2016-05-16 16:30:181798semak imbas

Contoh dalam artikel ini menerangkan cara mengeksport Excel menggunakan JavaScript. Kongsikan dengan semua orang untuk rujukan anda. Kaedah pelaksanaan khusus adalah seperti berikut:

Salin kod Kod adalah seperti berikut:



Cara mengeksport halaman WEB ke dokumen EXCEL


































Cara mengeksport halaman WEB ke dokumen EXCEL
Pengepala lajur 1 Pengepala lajur 2 Pengepala lajur 3 Pengepala lajur 4 Pengepala lajur 5
aaa bbb ccc ddd eee
AAA BBB CCC DDD EEE
FFF GGG HHH III JJJ






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

复制代码 代码如下:
// JavaScript中的析构中的析构(问码如下) > //------------------------------------------------ ---------

var strSaveLocation = 'file:///E:/1.xls'
fungsi createXLS() {
  var excel = new ActiveXObject("Excel.Application");
  var wk = excel.Workbooks.Add();
  wk.SaveAs(strSaveLocation);
  wk.Disimpan = benar;
  excel.Quit();

}

fungsi tulisXLS() {

  var excel = new ActiveXObject("Excel.Application");
  var wk = excel.Workbooks.Open(strSaveLocation);
  helaian var = wk.Helaian Kerja(1);
  helaian.Sel(1, 1).Nilai = '测试字符串';
  wk.SaveAs(strSaveLocation);
  wk.Disimpan = benar;

  excel.Quit();

}

 
 

在这个例子中,在本地文件操作时并不会出现异常。——最多只是有一些包子一些包子家果strSimpanLokasi是一个远程的URL,这时本地将会保存一个文件存取权限的凭证,而且同时只能一个(远程的)实例来开启该excel文档并存储。于是如果于是如果于是如果于是如果反复管"反复物,"反复生会出现异常。

- 注意, 这是在 SPS 中操作 共 享文件时的一个实例的简化代码。因此, 它并非 "学术的" 无聊讨论, 而且工程中的实际问题。

解决这个问题的方法很复杂。它涉及到两个问题:

① 本地凭证的释放
② ActiveX Object实例的释放

下面我们先从JavaScript中对象的“失效”问题说起。简单的说:

① 一个对象在其生存的上下文环境之外,即会失效。
② 一个全局的对象在没有被执用(引用)的情况下,即会失效。

Contoh:


复制代码 代码如下:
//---------------------------------------------- ------------
//Bilakah objek JavaScript tamat tempoh
//------------------------------------------------ ----------
function testObject() {
var _obj1 = Objek baharu();
}

fungsi testObject2() {
var _obj2 = Objek baharu();
Kembalikan _obj2;
}

// Contoh 1
testObject();

// Contoh 2
testObject2()

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

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

Dalam empat contoh ini:
- "Contoh 1" membina _obj1 dalam fungsi testObject(), tetapi apabila fungsi keluar, ia telah meninggalkan konteks fungsi, jadi _obj1 adalah tidak sah; - Dalam "Contoh 2", objek _obj2 juga dibina dalam testObject2() dan pengsan, jadi objek mempunyai konteks "fungsi luar" (dan kitaran hayat Walau bagaimanapun, kerana nilai pulangan fungsi tidak digunakan oleh pembolehubah lain " Tahan", jadi _obj2 juga tidak sah serta-merta; - Dalam "Contoh 3", _obj2 yang dibina oleh testObject2() dipegang oleh pembolehubah luaran obj3 Pada masa ini, sehingga baris kod "obj3=null" berkuat kuasa, _obj2 akan menjadi tidak sah kerana hubungan rujukan hilang.
- Atas sebab yang sama seperti Contoh 3, _obj2 dalam "Contoh 4" akan menjadi tidak sah selepas baris kod "arr=[]".

Walau bagaimanapun, "tidak sah" sesuatu objek tidak menunggu sehingga ia "dilepaskan". Dalam persekitaran masa jalan JavaScript, tiada cara untuk memberitahu pengguna dengan tepat bila objek akan dikeluarkan. Ini bergantung pada mekanisme kitar semula memori JavaScript. ——Strategi ini serupa dengan mekanisme kitar semula dalam .NET.

Dalam kod sampel operasi Excel sebelumnya, pemilik objek, iaitu, proses "EXCEL.EXE" hanya boleh berlaku selepas "pelepasan contoh Objek ActiveX". Kunci fail dan bukti kelayakan sistem pengendalian adalah berkaitan dengan proses. Jadi jika objek itu hanya "tidak sah" dan bukannya "dikeluarkan", akan ada masalah untuk proses lain yang mengendalikan fail dan merujuk kelayakan kebenaran sistem pengendalian.

——Sesetengah orang mengatakan ini adalah BUG dalam mekanisme JavaScript atau COM. Sebenarnya tidak, ini disebabkan oleh hubungan yang kompleks antara OS, IE dan JavaScript, dan bukannya masalah bebas.

Microsoft telah mendedahkan strategi untuk menyelesaikan masalah ini: secara aktif memanggil proses kitar semula memori.

Proses CollectGarbage() (biasanya dirujuk sebagai proses GC) disediakan dalam JScript (Microsoft) Proses GC digunakan untuk membersihkan "pengecualian objek tidak sah" dalam IE semasa, iaitu, untuk memanggil. proses pemusnahan objek.

Kod untuk memanggil proses GC dalam contoh di atas ialah:


Salin kod Kod adalah seperti berikut://------------- ----------------------------------------
// Apabila berurusan dengan ActiveX Object, kaedah panggilan standard proses GC
//------------------------------------------------ ----------
fungsi writeXLS() {
//(diabaikan...)

excel.Quit(); excel = null;

setTimeout(CollectGarbage, 1);
}

Barisan pertama kod memanggil kaedah excel.Quit() untuk menyebabkan proses excel ditamatkan dan keluar Pada masa ini, kerana persekitaran JavaScript memegang contoh objek excel, proses excel sebenarnya tidak ditamatkan.

Baris kedua kod menjadikan excel null untuk mengosongkan rujukan objek, dengan itu "membatalkan" objek. Walau bagaimanapun, kerana objek masih dalam konteks fungsi, jika proses GC dipanggil terus, objek itu masih tidak akan dibersihkan.

Barisan ketiga kod menggunakan setTimeout() untuk memanggil fungsi CollectGarbage, dan selang masa ditetapkan kepada '1', yang hanya menyebabkan proses GC berlaku selepas fungsi writeXLS() dilaksanakan. Dengan cara ini, objek excel memenuhi dua syarat "boleh dibersihkan oleh GC": tiada rujukan dan meninggalkan konteks.

Penggunaan proses GC sangat berkesan dalam persekitaran JS menggunakan ActiveX Object. Beberapa Objek ActiveX yang berpotensi termasuk XML, VML, OWC (Office Web Componet), flash, dan juga VBArray dalam JS.

Dari sudut pandangan ini, memandangkan seni bina ajax menggunakan XMLHTTP dan mesti memenuhi ciri "tiada penukaran halaman", memanggil proses GC secara aktif pada masa yang sesuai akan menghasilkan pengalaman UI yang lebih cekap.

Malah, walaupun proses GC digunakan, masalah excel yang dinyatakan di atas masih tidak dapat diselesaikan sepenuhnya. Kerana IE juga menyimpan bukti kelayakan kebenaran. Satu-satunya cara untuk mengemas kini bukti kelayakan halaman adalah dengan "bertukar ke halaman baharu", jadi sebenarnya dalam projek SPS yang disebutkan tadi, kaedah yang saya gunakan bukanlah GC, tetapi kod berikut:


Salin kod Kod adalah seperti berikut:
//---------------------------------------------- ------------
// Kod penukaran halaman digunakan semasa memproses ActiveX Object
//------------------------------------------------ ----------
fungsi writeXLS() {
//(diabaikan...)

excel.Quit();
excel = null;

// Kod berikut digunakan untuk menyelesaikan BUG dalam panggilan IE Excel, kaedah yang disediakan dalam MSDN:
// setTimeout(CollectGarbage, 1);
// Memandangkan status laman web yang dipercayai tidak boleh dikosongkan (atau disegerakkan), kaedah seperti SaveAs() akan digunakan dalam
// Ia akan menjadi tidak sah apabila ia dipanggil seterusnya.
location.reload();
}

Akhir sekali, nota tambahan tentang GC: apabila borang IE diminimumkan, IE akan memanggilnya secara aktif sekali
Fungsi CollectGarbage(). Ini membolehkan penggunaan memori dipertingkatkan dengan ketara selepas tetingkap IE diminimumkan.

Saya harap artikel ini akan membantu pengaturcaraan web semua orang berdasarkan JavaScript.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn