Membaca dan menulis hamparan Excel

Komuniti sumber terbuka telah membuat banyak projek Java sumber terbuka, yang terdiri dari perisian memetakan hingga kerangka permainan hingga pemproses kata. Dalam catatan ini, saya memperkenalkan projek perpustakaan sumber terbuka untuk membaca dan menulis hamparan Microsoft Excel.

Mengesyorkan perpustakaan spreadsheet

S: Saya telah diminta untuk memperluas perisian hamparan berasaskan Java syarikat saya untuk membaca dan menulis hamparan Excel. Bolehkah anda mengesyorkan perpustakaan Java sumber terbuka yang akan membantu saya dalam tugas ini?

J: Anda mungkin ingin melihat JExcelAPI, yang merupakan perpustakaan sumber terbuka yang berasaskan Java yang membolehkan anda membaca, menulis, dan mengubahsuai spreadsheet Excel. Berikut adalah beberapa kelebihannya:

  • Membaca data dari buku kerja Excel 95, 97, 2000, XP, dan 2003
  • Membaca dan menulis formula (Excel 97 dan lebih baru sahaja)
  • Menghasilkan hamparan dalam format Excel 2000
  • Menyokong format fon, nombor, dan tarikh
  • Menyokong bayangan sel, perbatasan sel, dan pewarnaan sel
  • Mengubah lembaran kerja yang ada
  • Menyokong penyalinan carta
  • Menyokong penyisipan dan penyalinan gambar ke dalam spreadsheet

JExcelAPI dibangunkan oleh Andrew Kahn dan dilancarkan di bawah GNU Lesser General Public License.

Memuat turun perpustakaan JExcelAPI

S: Bagaimana cara memuat turun JExcelAPI?

J: Lengkapkan langkah-langkah berikut untuk memuat turun JExcelAPI:

  1. Arahkan penyemak imbas anda ke laman SourceForge JExcelAPI.
  2. Klik jexcelapipautan.
  3. Pada halaman yang dihasilkan, klik salah satu pautan folder. Contohnya, saya mengklik 2.6.12pautan.
  4. Pada halaman yang dihasilkan, klik nama fail arkib pengedaran. Contohnya, saya mengklik jexcelapi_2_6_12.zippautan.
  5. Selepas kelewatan yang singkat, penyemak imbas anda akan meminta anda menyimpan fail ini. Teruskan dan simpan failnya.

Setelah memuat turun, nyaharkibkan fail ini. Anda harus memerhatikan jexcelapidirektori utama dalam jexcelapi_2_6_12direktori.

Menunjukkan perpustakaan JExcelAPI

Q: Adakah perpustakaan JExcelAPI mengandungi demo?

J: Direktori utama JExcelAPI jexcelapimengandungi jxl.jarfail yang mengandungi demo untuk membaca, menulis, dan menyalin hamparan.

Demo baca membaca hamparan yang ada, mengubahnya menjadi nilai dipisahkan koma (CSV) atau format XML melalui pilihan -csvatau -xmlbaris perintah. Pertimbangkan contoh berikut:

java -jar jxl.jar -csv budget.xls java -jar jxl.jar -xml budget.xls

Contoh-contoh ini membaca budget.xlsdan mengeluarkan kandungannya dalam format CSV dan XML ke output standard. Apabila tidak ada atau -csvtidak -xmlditentukan, -csvdianggap.

Demo tulis membuat hamparan sampel yang merangkumi formula, sempadan, gambar dan banyak lagi. Spreadsheet ini dihasilkan dengan menentukan -writepilihan baris perintah, seperti yang ditunjukkan di bawah:

java -jar jxl.jar -write sample.xls

Rajah 1 menunjukkan sebahagian daripada sample.xlshamparan yang dihasilkan .

Gambar 1. Saya menggunakan LibreOffice Calc untuk mengakses spreadsheet sample.xls

Demo salinan menyalin contoh spreadsheet jxlrwtest.xls, yang disimpan dalam direktori yang sama dengan jxl.jar, ke spreadsheet baru. Dalam hamparan yang dihasilkan, lembaran pertama (asal) tidak berubah sedangkan lembaran kedua (diubah) mengandungi nilai yang diubah.

Demo ini dihasilkan dengan menentukan -rwpilihan baris perintah diikuti jxlrwtest.xlsdan nama hamparan keluaran. Pertimbangkan baris arahan berikut:

java -jar jxl.jar -rw jxlrwtest.xls copy.xls

Baris arahan ini menyalin jxlrwtest.xlske copy.xls. Rajah 2 menunjukkan helaian kedua (diubahsuai) di LibreOffice Calc.

Gambar 2. Klik tab asal dan diubah suai untuk melihat helaian yang asli dan yang diubah suai

Termasuk JExcelAPI untuk penyusunan dan pelaksanaan

S: Bagaimana saya memasukkan JExcelAPI ketika menyusun kod sumber dan menjalankan aplikasi?

J: Untuk memasukkan JExcelAPI ketika menyusun kod sumber dan menjalankan aplikasi, lakukan salah satu perkara berikut:

  • Tambahkan fail jexcelapidirektori utama jxl.jarke CLASSPATHpemboleh ubah persekitaran anda .
  • Sertakan jxl.jarmelalui pilihan baris perintah javacdan javaprogram -cp.

Pengaturcaraan dengan JExcelAPI

S: Bagaimana cara membuat program Java yang memanfaatkan JExcelAPI?

A: The jexcelapidirektori rumah termasuk tutorial.htmlfail yang hadiah tutorial asas mengenai pengaturcaraan dengan JExcelAPI. Tutorial menunjukkan cara membaca, menulis, dan menyalin hamparan. Tutorial juga membincangkan pemformatan.

jexcelapijuga termasuk docssubdirektori, yang menyediakan akses ke dokumentasi API yang luas. Arahkan penyemak imbas Web anda ke index.htmlfail direktori ini dan anda boleh meneroka jenis dalam empat pakej yang didokumentasikan di perpustakaan ini:

  • jxl: jenis pakej utama
  • jxl.demo: jenis untuk pelbagai demo
  • jxl.format: jenis yang berkaitan dengan pemformatan
  • jxl.write: jenis penulisan ke hamparan

Note that this list isn't exhaustive. Additional packages such as jxl.read are present but are not documented. To learn about additional packages, execute jar tvf jxl.jar and examine the package information in the resulting JAR listing.

To help you get started with JExcelAPI, I've created a simple JExcelAPIDemo application that demonstrates creating a new spreadsheet that is saved in output.xls and then reading and outputting the contents of this spreadsheet. Check out Listing 1.

Listing 1. Writing and reading a simple spreadsheet

import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class JExcelAPIDemo { public static void main(String[] args) throws BiffException, IOException, WriteException { WritableWorkbook wworkbook; wworkbook = Workbook.createWorkbook(new File("output.xls")); WritableSheet wsheet = wworkbook.createSheet("First Sheet", 0); Label label = new Label(0, 2, "A label record"); wsheet.addCell(label); Number number = new Number(3, 4, 3.1459); wsheet.addCell(number); wworkbook.write(); wworkbook.close(); Workbook workbook = Workbook.getWorkbook(new File("output.xls")); Sheet sheet = workbook.getSheet(0); Cell cell1 = sheet.getCell(0, 2); System.out.println(cell1.getContents()); Cell cell2 = sheet.getCell(3, 4); System.out.println(cell2.getContents()); workbook.close(); } }

Listing 1 first creates a writable workbook by invoking one of Workbook's factory methods. A writable sheet is then created for this workbook, and then a label and a number are added as the sheet's two cell values. The workbook is then written and closed.

Listing 1 continues by getting a workbook associated with output.xls and reading its contents. The getSheet() method provides access to the first sheet within this workbook. Its getCell() method is called to access the two cells, whose contents are then output.

Assuming that jxl.jar is located in the current directory, execute the following command to compile Listing 1:

javac -cp jxl.jar JExcelAPIDemo.java

Assuming success, execute the following command to run JExcelAPIDemo:

java -cp jxl.jar;. JExcelAPIDemo

You should observe the following output:

A label record 3.146

Figure 3 shows you output.xls in a LibreOffice context.

Figure 3. The solitary sheet displays two cell values

What's next?

Lain kali, saya menyajikan satu set teka-teki yang membahas evolusi perpustakaan Java. Teka-teki ini memberi tumpuan kepada keserasian kod sumber dan binari antara program pelanggan dan perpustakaan yang digunakan oleh program ini.

muat turun Muat turun sumber Dapatkan kod sumber untuk aplikasi catatan ini. Dicipta oleh Jeff Friesen untuk JavaWorld

Perisian berikut digunakan untuk mengembangkan kod pos:

  • 64-bit JDK 7u6
  • JExcelAPI 2.6.12

Kod siaran telah diuji pada platform berikut:

  • JVM pada Windows 7 SP1 64-bit

Kisah ini, "Membaca dan menulis hamparan Excel" pada mulanya diterbitkan oleh JavaWorld.