Cara mudah untuk mentransfer data tabel dari PHP ke Excel. Ekspor data dari php ke excel Tabel ekspor php ke excel

.
Metode yang disajikan dalam catatan itu memang sangat sederhana, namun mungkin tidak selalu nyaman.
Ada banyak cara lain untuk mentransfer data tabular dari PHP ke Excel, saya akan menjelaskan salah satu yang menurut saya paling sederhana dan fungsional. Perlu dicatat secara khusus bahwa saya tidak berbicara tentang menghasilkan file xls, tetapi hanya menyarankan agar pengguna membuka data yang diterima menggunakan Excel sehingga pengguna yang tidak berpengalaman dalam pemrograman tidak akan menyadari pemalsuan tersebut.

Jadi, hal pertama yang perlu Anda lakukan adalah menempatkan di halaman kami link ke skrip yang menghasilkan header berikut:
header("Pragma: publik");
header("Kedaluwarsa: 0");
header("Kontrol Cache: harus divalidasi ulang, pasca-pemeriksaan=0, pra-pemeriksaan=0");
header("Kontrol Cache: pribadi", false);
header("Tipe Konten: application/x-msexcel");
header("Disposisi Konten: lampiran; nama file=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header("Pengkodean-Transfer-Konten: biner");
header("Panjang Konten: " .$object->getFileSize());

$object adalah objek bulat dalam ruang hampa, yang dapat diimplementasikan oleh setiap pembaca sesuai keinginannya. Tujuan getFileName() dan getFileSize() jelas dari namanya. Sebaiknya soroti satu nuansa yang tidak jelas di sini (terima kasih telah mengingatkan saya akan hal ini) - getFileName() tentu saja dapat mengembalikan nama file apa pun, tetapi jika Anda ingin browser menawarkan untuk membuka konten yang diterima di Excel, maka ekstensi file harus menjadi xls.
Saya belum mengatakan sesuatu yang baru, semua ini ditemukan sebelum saya, seperti yang akan dijelaskan di bawah ini.
Seperti yang telah dicatat dengan benar dalam komentar artikel tersebut, Excel bekerja lebih cepat dengan XML. Namun keunggulan yang paling penting, mungkin, bukanlah kecepatan, melainkan kemampuan yang jauh lebih luas. Saya tidak akan membahas lebih dalam, tetapi hanya akan memberikan contoh sederhana dan tautan ke sana deskripsi rinci semua tag.

Jadi, setelah header dibuat, kita perlu memberikan data aktual kepada pengguna. Saya biasanya membungkus pembuatan tabel dalam metode terpisah:
echo $objek->getContent();

Dan saya membuat tabel menggunakan Smarty:

(foreach from=$data.header item=caption) ($caption.namakolom)(/ depan)(foreach from=$data.content item=baris) (foreach dari=$baris item=col) ($kol)(/ depan)(/ depan)

Seperti yang Anda lihat dari kode, array $data diteruskan ke templat, berisi dua array - baris judul tabel dan data itu sendiri.
Perlu dicatat bahwa menggunakan mesin templat hanya untuk menghasilkan XML agak mahal, dan XML dapat diperoleh dengan banyak cara lain. Dalam kasus khusus saya, pembuatan XML hanyalah bonus kecil dalam proyek besar di mana mesin templat sangat diperlukan.

Sebagai contoh yang saya berikan tabel paling sederhana, masih banyak lagi atribut yang dapat dimanipulasi jika diinginkan. Hal ini sangat bagus mengingat tidak diperlukan perpustakaan pihak ketiga untuk implementasi.
Metode yang dijelaskan telah mengerjakan satu proyek selama beberapa tahun dan belum ada satu pun pengguna yang curiga bahwa data yang dibukanya bukanlah dokumen MS Office.

Anda dapat membaca lebih lanjut tentang struktur XML yang digunakan di MS Excel di

(data diperoleh dari database mysql) berhasil. Saya menggunakan Kerangka Zend. Saya perlu membuat beberapa perubahan pada data saya sebelum mengekspor ke excel. Sebenarnya saya perlu membuat buku kas bulanan.

Saya membaca banyak dokumen tetapi mendapati diri saya berantakan. Saya benar-benar tidak tahu bagaimana memulainya. Apakah saya benar-benar membutuhkan PEAR? Apakah saya perlu memuat perpustakaan kelas apa pun? Bukan begitu cara sederhana melakukan ini?

terima kasih sebelumnya

Saya menyarankan Anda untuk menggunakan perpustakaan PHPExcel. Ini sangat kuat, mendukung berbagai format, dapat melakukan pemformatan visual, dan mudah digunakan.

Anda dapat mengetahui lebih lanjut tentang hal ini di halaman web mereka: http://phpexcel.codeplex.com/, (PHPExcel sudah pindah ke https://github.com/PHPOffice/PHPExcel)

Contoh penggunaan:

$objPHPExcel = PHPExcel baru(); /** Anda dapat menyetel banyak properti */ $objPHPExcel->getProperties()->setCreator("Perusahaan saya") ->setLastModifiedBy("John Doe") ->setTitle("Laporan Tahunan") ->setSubject("Penjualan ") ->setDescription("Laporan penjualan tahunan oleh John Doe") ->setCategory("Keuangan"); /** Pilih salah satu sheet */ $activeSheet = $objPHPExcel->setActiveSheetIndex(0); /** Cukup tetapkan nilai sel */ $activeSheet->setCellValue("A1", "plural");

Anda dapat melakukan lebih banyak hal, tentu saja, membaca file excel, mengatur gaya visual, membuat grafik, ekspresi, dan banyak lagi.

Saya menulis laporan variasi inventaris 94 baris di mana saya mengambil data dari MySQL (6kb + catatan per tabel), buat array multidimensi dari data MySQL, diambil dari beberapa tabel lalu dibuang semuanya ke dalam satu baris dan menghasilkan .xls dengan cara ini:

Tidak diperlukan ekstensi.

Satu-satunya peringatan adalah saya belum menemukan cara mengeluarkan .xls tanpa Excel, melaporkan bahwa data mungkin rusak - dan saya belum mencoba melakukan pemformatan atau apa pun yang lebih rumit daripada sekadar "mengekspor" data, File/data tentu saja baik-baik saja, tetapi menimbulkan peringatan dari Excel.

EDIT: Saya harus mencatat bahwa "setup" dan "dump" mengacu pada yang berikut: daniweb.com

Anda dapat menggunakan perpustakaan phpexcel. Ini memungkinkan Anda untuk menulis dan membaca format yang berbeda file spreadsheet

untuk integrasi zend Anda dapat mengambil bantuan tautan berikut.

Anda dapat menggunakan CSV untuk membuat format excel yang dapat diimpor. Ini adalah cara termudah untuk melakukannya.

CSVnya terlihat seperti ini:

"isi sel pertamaku", "isi sel keduaku", "isi sel ketigaku" "baris kedua, konten sel pertama", "dll", "dll

Setiap baris mewakili baris Excel, tempat Anda meletakkan konten sel di antaranya tanda kutip ganda dan pisahkan dengan koma. Hati-hati jika Anda memiliki beberapa data, ini mungkin merusak CSV Anda dan membuat baris baru yang tidak diinginkan.

Dengan sedikit Google Anda akan menemukan ini: http://www.the-art-of-web.com/php/dataexport/

Persiapan data

$data = array(array("nama depan" => "Mary", "nama belakang" => "Johnson", "umur" => 25), array("nama depan" => "Amanda", "nama belakang" => " Miller", "umur" => 18), array("nama depan" => "James", "nama belakang" => "Coklat", "umur" => 31), array("nama depan" => "Patricia", "nama belakang" => "Williams", "umur" => 7), array("nama depan" => "Michael", "nama belakang" => "Davis", "umur" => 43), array("nama depan" => "Sarah", "nama belakang" => "Miller", "umur" => 24), array("nama depan" => "Patrick", "nama belakang" => "Miller", "umur" => 27) );

Langkah pertama adalah mengeluarkan data dalam format tab-delimited (CSV juga dapat digunakan, namun sedikit lebih rumit). Untuk melakukan ini kami menggunakan kode berikut:

Tipe konten kami atur menjadi text/plain agar hasilnya lebih mudah dilihat di browser. Jika tidak, karena tidak ada format HTML, keluarannya akan muncul sebagai satu baris teks.

Baris keluaran pertama adalah judul kolom (dalam hal ini nama kolom digunakan). Nilai dipisahkan oleh tab \t dan garis dengan jeda baris \n. Hasilnya akan terlihat seperti ini:

Nama depan nama belakang umur Mary Johnson 25 Amanda Miller 18 James Brown 31 Patricia Williams 7 Michael Davis 43 Sarah Miller 24 Patrick Miller 27

Ada kelemahan dalam kode ini yang mungkin tidak langsung terlihat. Bagaimana jika salah satu bidang yang perlu dikeluarkan sudah berisi satu atau lebih karakter tab atau, lebih buruk lagi, baris baru? Ini akan memicu seluruh proses karena kita mengandalkan simbol-simbol ini untuk menunjukkan kolom dan jeda baris.

Solusinya adalah dengan "melarikan diri" dari karakter tab. Dalam hal ini, kami akan mengganti tab dengan \t literal dan jeda baris dengan \n literal sehingga tidak memengaruhi pemformatan:

Sekarang, sebelum setiap baris di-echo, karakter tab apa pun diganti dengan "\t" agar kolom kita tidak putus. Selain itu, setiap jeda baris dalam data diganti dengan "\n".

.
Metode yang disajikan dalam catatan itu memang sangat sederhana, namun mungkin tidak selalu nyaman.
Ada banyak cara lain untuk mentransfer data tabular dari PHP ke Excel, saya akan menjelaskan salah satu yang menurut saya paling sederhana dan fungsional. Perlu dicatat secara khusus bahwa saya tidak berbicara tentang menghasilkan file xls, tetapi hanya menyarankan agar pengguna membuka data yang diterima menggunakan Excel sehingga pengguna yang tidak berpengalaman dalam pemrograman tidak akan menyadari pemalsuan tersebut.

Jadi, hal pertama yang perlu Anda lakukan adalah menempatkan di halaman kami link ke skrip yang menghasilkan header berikut:
header("Pragma: publik");
header("Kedaluwarsa: 0");
header("Kontrol Cache: harus divalidasi ulang, pasca-pemeriksaan=0, pra-pemeriksaan=0");
header("Kontrol Cache: pribadi", false);
header("Tipe Konten: application/x-msexcel");
header("Disposisi Konten: lampiran; nama file=\"" . iconv("UTF-8", "CP1251", $object->getFileName()) . "\";");
header("Pengkodean-Transfer-Konten: biner");
header("Panjang Konten: " .$object->getFileSize());

$object adalah objek bulat dalam ruang hampa, yang dapat diimplementasikan oleh setiap pembaca sesuai keinginannya. Tujuan getFileName() dan getFileSize() jelas dari namanya. Sebaiknya soroti satu nuansa yang tidak jelas di sini (terima kasih kepada savostin karena telah mengingatkan saya akan hal ini) - getFileName() tentu saja dapat mengembalikan nama file apa pun, tetapi jika Anda ingin browser menawarkan untuk membuka konten yang diterima di Excel, maka file tersebut ekstensi harus xls.
Saya belum mengatakan sesuatu yang baru, semua ini ditemukan sebelum saya, seperti yang akan dijelaskan di bawah ini.
Seperti yang telah dicatat dalam komentar di posting tentang pembuatan xls di PHP, Excel bekerja lebih cepat dengan XML. Namun keunggulan yang paling penting, mungkin, bukanlah kecepatan, melainkan kemampuan yang jauh lebih luas. Saya tidak akan membahas lebih dalam, tetapi hanya akan memberikan contoh sederhana dan tautan ke penjelasan rinci tentang semua tag.

Jadi, setelah header dibuat, kita perlu memberikan data aktual kepada pengguna. Saya biasanya membungkus pembuatan tabel dalam metode terpisah:
echo $objek->getContent();

Dan saya membuat tabel menggunakan Smarty:

(foreach from=$data.header item=caption) ($caption.namakolom)(/ depan)(foreach from=$data.content item=baris) (foreach dari=$baris item=col) ($kol)(/ depan)(/ depan)

Seperti yang Anda lihat dari kode, array $data diteruskan ke templat, berisi dua array - baris judul tabel dan data itu sendiri.
Perlu dicatat bahwa menggunakan mesin templat hanya untuk menghasilkan XML agak mahal, dan XML dapat diperoleh dengan banyak cara lain. Dalam kasus khusus saya, pembuatan XML hanyalah bonus kecil dalam proyek besar di mana mesin templat sangat diperlukan.

Sebagai contoh, saya memberikan tabel sederhana; jika diinginkan, Anda dapat memanipulasi atribut dalam jumlah yang jauh lebih besar. Hal ini sangat bagus mengingat tidak diperlukan perpustakaan pihak ketiga untuk implementasi.
Metode yang dijelaskan telah mengerjakan satu proyek selama beberapa tahun dan belum ada satu pun pengguna yang curiga bahwa data yang dibukanya bukanlah dokumen MS Office.

Anda dapat membaca lebih lanjut tentang struktur XML yang digunakan di MS Excel di

Bagi banyak orang, saat bekerja dengan PHP bersama dengan MySQL ada kebutuhan untuk mengekspor data dari database ke format xls, sehingga orang yang membutuhkan data ini dapat memprosesnya program Unggul atau memudahkan pengguna untuk melihat data ini. Baru-baru ini saya memiliki kebutuhan seperti itu dan hari ini saya akan memberi tahu Anda bagaimana hal ini dapat dilaksanakan.

Saya akan langsung mengatakan bahwa metode ini cukup sederhana, tetapi data diunggah secara normal.

Untuk memulainya, saya akan memberikan contoh file xls final; di Excel, hasil unggahannya akan terlihat seperti ini:

Dengan kata lain, tidak ada gambar atau gaya yang akan diunggah, hanya header kolom dan datanya sendiri.

Sebelum saya sampai pada pilihan upload ini, saya coba upload dalam format csv, tapi ternyata agak kikuk, lalu saya coba menggambar tabel dan menyimpannya dengan ekstensi xls, ternyata juga ada semacam omong kosong. , cara yang akan saya uraikan sekarang sangat cocok untuk saya, dan sekarang saya akan membagikannya kepada Anda.

Untuk memulainya, saya akan memberi Anda semua kode, yang saya komentari sebanyak mungkin, Anda dapat memilihnya dan menyimpannya dengan ekstensi php dan coba saja, jangan lupa tentukan pengaturan koneksi database.

Ekspor data dari MySQL ke Excel dalam PHP

Dan agar anda paham data apa saja yang saya upload, saya akan memberikan contoh tabel sederhana di database ( Saya memiliki tes namanya):

Tabel tes:

pengenal nama depan nama
1 Ivanov Ivan
2 Petrov Petrus
2 Petrov2 Petrus2
xlsData = paket("sssss", 0x809, 0x08, 0x00,0x10, 0x0, 0x0);

) // Jika fungsi bilangan RecNumber($row, $col, $value)( $this->xlsData .= pack("sssss", 0x0203, 14, $row, $col, 0x00); $this->xlsData . = pack("d", $value); return ) //Jika fungsi teks RecText($row, $col, $value)( $len = strlen($value); $this->xlsData .= paket (" s*", 0x0204, 8 + $len, $row, $col, 0x00, $len); $this->xlsData .= $value return; if ($ this->countCol == $this->totalCol) ( $this->countCol = 0; $this->countRow++; ) $this->RecNumber($this->countRow, $this->countCol, $ nilai); $ini->countCol++; return ) // Masukkan fungsi teks InsertText($value)( if ($this->countCol == $this->totalCol) ( $this->countCol = 0; $ini- >countRow++; ) $this->RecText($this->countRow, $this->countCol, $value); $this->countCol++; // Pergi ke fungsi baris baru GoNewLine())( $this-> countCol = 0 ; $this->countRow++; kembali;) //Akhir fungsi data EndData() ( $this->xlsData .= pack("ss", 0x0A, 0x00); kembali; ) // Simpan fungsi file SaveFile($fileName)( $this->fileName = $fileName; $this->SendFile(); ) // Kirim fungsi file SendFile())( $this->EndData(); header (" Terakhir Dimodifikasi: " . gmdate("D,d M YH:i:s") . " GMT"); header ("Kontrol Cache: tanpa penyimpanan, tanpa cache, harus divalidasi ulang"); header (" Pragma: tanpa cache"); header("Jenis konten: aplikasi/x-msexcel"); header("Disposisi Konten: lampiran; namafile=$ini->namafile.xls"); ->xlsData ; ) ) ) if(isset($_GET["id"])) ( //filter data $id = mysql_real_escape_string(stripslashes(trim(htmlspecialchars($_GET["id"],ENT_QUOTES)))) ; $filename = "File_with_id_".$id; // atur nama file $excel = new EksporToExcel(); //kueri ke database $rez= mysql_query($sql); $excel->InsertText("Identifier"); $excel->InsertText("Nama Belakang"); excel->GoNewLine(); baris=mysql_fetch_assoc($rez))( $excel->InsertNumber($baris["id"]);$excel->InsertText($baris["nama depan"]); $excel->InsertText($baris["nama"]);$excel->GoNewLine(); ) $excel->SimpanFile($namafile);.

Untuk memeriksa fungsionalitas kode ini, dengan mempertimbangkan fakta bahwa Anda telah mengonfigurasi koneksi ke database dan membuat tabel serupa, Anda dapat mengirimkan permintaan berikut:

Http://situs_anda/nama_file. php?id=2

Dan Anda harus membongkar dua baris dengan id sama dengan 2.

Dan sekarang siapa pun yang Anda izinkan untuk mengunggah data dapat dengan mudah mengekspornya ke mereka komputer lokal melalui antarmuka web. Metode ini nyaman bagi pengguna korporat, jika Anda mengembangkan aplikasi untuk organisasi Anda, dan bagi pengguna situs web Anda di Internet. Harapan, metode ini Membantu Anda. Semoga beruntung!