Čitanje i pisanje proračunskih tablica Excel

Zajednica otvorenog koda stvorila je mnogo otvorenih projekata Java, koji se kreću od softvera za crtanje, okvira igara do procesora teksta. U ovom postu predstavljam projekt biblioteke otvorenog koda za čitanje i pisanje proračunskih tablica Microsoft Excel.

Preporuka biblioteke proračunskih tablica

P: Zamoljen sam da proširim softver za proračunske tablice utemeljen na Javi kako bih čitao i pisao Excel proračunske tablice. Možete li mi preporučiti Java biblioteku otvorenog koda koja će mi pomoći u ovom zadatku?

O: Možda biste željeli provjeriti JExcelAPI, zrelu biblioteku otvorenog koda zasnovanu na Javi koja vam omogućuje čitanje, pisanje i izmjenu Excel proračunskih tablica. Evo nekoliko njegovih brojnih značajki:

  • Čita podatke iz Excel 95, 97, 2000, XP i 2003 radnih knjiga
  • Čita i zapisuje formule (samo Excel 97 i novije verzije)
  • Generira proračunske tablice u formatu Excel 2000
  • Podržava oblikovanje fonta, broja i datuma
  • Podržava sjenčanje stanica, obrubljivanje stanica i bojanje stanica
  • Izmjenjuje postojeće radne listove
  • Podržava kopiranje grafikona
  • Podržava umetanje i kopiranje slika u proračunske tablice

JExcelAPI je razvio Andrew Kahn i objavljen je pod GNU Lesser General Public License.

Preuzimanje JExcelAPI biblioteke

P: Kako mogu preuzeti JExcelAPI?

O: Za preuzimanje JExcelAPI izvršite sljedeće korake:

  1. Usmjerite preglednik prema JExcelAPI-jevom SourceForge mjestu.
  2. Kliknite jexcelapivezu.
  3. Na dobivenoj stranici kliknite jednu od poveznica mape. Na primjer, kliknuo sam 2.6.12vezu.
  4. Na rezultirajućoj stranici kliknite naziv datoteke distribucijske arhive. Na primjer, kliknuo sam jexcelapi_2_6_12.zipvezu.
  5. Nakon kratkog odgađanja preglednik bi trebao zatražiti da spremite ovu datoteku. Samo naprijed i spremite datoteku.

Nakon preuzimanja arhivirajte ovu datoteku. Trebali biste promatrati jexcelapikućni direktorij unutar jexcelapi_2_6_12direktorija.

Demonstriranje JExcelAPI knjižnice

P: Sadrži li knjižnica JExcelAPI neke demonstracije?

O: Početni jexcelapidirektorij JExcelAPI sadrži jxl.jardatoteku koja sadrži demonstracije za čitanje, pisanje i kopiranje proračunskih tablica.

Pročitana demonstracija čita postojeću proračunsku tablicu pretvarajući je u vrijednost odvojenu zarezom (CSV) ili XML format putem opcije -csvili -xmlnaredbenog retka. Razmotrite sljedeće primjere:

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

Ovi primjeri čitaju budget.xlsi izlažu njegov sadržaj u CSV i XML formatu na standardni izlaz. Kada se -csvniti -xmlnavodi niti -csvse pretpostavlja.

Demonstracija pisanja stvara uzorak proračunske tablice koja uključuje formule, obrube, slike i još mnogo toga. Ova proračunska tablica generira se specificiranjem opcije -writenaredbenog retka, kao što je prikazano u nastavku:

java -jar jxl.jar -write sample.xls

Slika 1 prikazuje dio rezultirajuće sample.xlsproračunske tablice.

Slika 1. Koristio sam LibreOffice Calc za pristup proračunskoj tablici sample.xls

Demonstracija kopije kopira uzorak proračunske tablice jxlrwtest.xlskoja je pohranjena u isti direktorij kao jxl.jari nova proračunska tablica. U rezultirajućoj proračunskoj tablici prvi list (izvornik) je nepromijenjen, dok drugi list (izmijenjen) sadrži izmijenjene vrijednosti.

Ova demonstracija generira se specificiranjem opcije -rwnaredbenog retka iza koje slijedi jxlrwtest.xlsi ime izlazne proračunske tablice. Razmislite o sljedećem naredbenom retku:

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

Ovaj naredbeni redak kopira jxlrwtest.xlsu copy.xls. Slika 2 prikazuje drugi (modificirani) list u programu LibreOffice Calc.

Slika 2. Kliknite izvorne i izmijenjene kartice da biste pogledali izvorne i izmijenjene listove

Uključujući JExcelAPI za kompilaciju i izvršavanje

P: Kako mogu uključiti JExcelAPI prilikom sastavljanja izvornog koda i pokretanja aplikacije?

O: Da biste uključili JExcelAPI prilikom sastavljanja izvornog koda i pokretanja aplikacije, učinite jedno od sljedećeg:

  • Dodajte datoteku jexcelapikućnog direktorija u varijablu jxl.jarsvog CLASSPATHokruženja.
  • Uključi jxl.jarova putem javacand javaprograma -cpnaredbenog retka opciju.

Programiranje s JExcelAPI

P: Kako mogu stvoriti Java programe koji koriste JExcelAPI?

O:jexcelapi kući katalog sadrži tutorial.htmldatoteku koja predstavlja osnovni udžbenik za programiranje s JExcelAPI. Vodič vam pokazuje kako čitati, pisati i kopirati proračunske tablice. Vodič također govori o oblikovanju.

jexcelapitakođer uključuje docspoddirektorij koji pruža pristup opsežnoj API dokumentaciji. Usmjerite web preglednik na index.htmldatoteku ovog direktorija i možete istražiti vrste u četiri dokumentirana paketa ove knjižnice:

  • jxl: vrste glavnog paketa
  • jxl.demo: tipovi za razne demonstracije
  • jxl.format: vrste povezane s oblikovanjem
  • jxl.write: vrste za upisivanje u proračunsku tablicu

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?

Sljedeći put predstavljam niz zagonetki koji se bave evolucijom Java knjižnica. Ovi se zagonetači usredotočuju na kompatibilnost izvornog i binarnog koda između klijentskih programa i knjižnica koje ti programi koriste.

preuzimanje Preuzmi izvor Preuzmi izvorni kod za aplikacije ovog posta. Stvorio Jeff Friesen za JavaWorld

Za izradu poštanskog broja korišten je sljedeći softver:

  • 64-bitni JDK 7u6
  • JExcelAPI 2.6.12

Kôd pošte testiran je na sljedećim platformama:

  • JVM na 64-bitnom sustavu Windows 7 SP1

Ovu je priču "Čitanje i pisanje proračunskih tablica Excel" izvorno objavio JavaWorld.