Programmering

Lese og skrive Excel-regneark

Open source-fellesskapet har skapt mange open source Java-prosjekter, som spenner fra kartprogramvare til spillrammer til tekstbehandlere. I dette innlegget introduserer jeg et open source biblioteksprosjekt for lesing og skriving av Microsoft Excel-regneark.

Anbefaler et regnearkbibliotek

Spørsmål: Jeg har blitt bedt om å utvide selskapets Java-baserte regnearkprogramvare til å lese og skrive Excel-regneark. Kan du anbefale et open source Java-bibliotek som vil hjelpe meg med denne oppgaven?

EN: Det kan være lurt å sjekke ut JExcelAPI, som er et modent, Java-basert open source-bibliotek som lar deg lese, skrive og endre Excel-regneark. Her er noen av de mange funksjonene:

  • Leser data fra Excel 95, 97, 2000, XP og 2003 arbeidsbøker
  • Leser og skriver formler (bare Excel 97 og nyere)
  • Genererer regneark i Excel 2000-format
  • Støtter formatering av skrift, nummer og dato
  • Støtter celleskygge, cellegrenser og cellefarging
  • Endrer eksisterende regneark
  • Støtter kartkopiering
  • Støtter innsetting og kopiering av bilder i regneark

JExcelAPI ble utviklet av Andrew Kahn og ble utgitt under GNU Lesser General Public License.

Laste ned JExcelAPI-biblioteket

Spørsmål: Hvordan laster jeg ned JExcelAPI?

EN: Fullfør følgende trinn for å laste ned JExcelAPI:

  1. Pek nettleseren din til JExcelAPIs SourceForge-nettsted.
  2. Klikk på jexcelapi lenke.
  3. På den resulterende siden klikker du på en av mappekoblingene. For eksempel klikket jeg på 2.6.12 lenke.
  4. Klikk på filnavnet for distribusjonsarkivet på den resulterende siden. For eksempel klikket jeg på jexcelapi_2_6_12.zip lenke.
  5. Etter en kort forsinkelse, bør nettleseren din be deg om å lagre denne filen. Fortsett og lagre filen.

Etter nedlastingen, fjern arkiveringen av denne filen. Du bør observere en jexcelapi hjemmekatalog innen en jexcelapi_2_6_12 katalog.

Demonstrerer JExcelAPI-biblioteket

Spørsmål: Inneholder JExcelAPI-biblioteket noen demoer?

EN: JExcelAPI jexcelapi hjemmekatalog inneholder en jxl.jar fil som inneholder demoer for lesing, skriving og kopiering av regneark.

Den leste demoen leser et eksisterende regneark og konverterer det til kommaadskilt verdi (CSV) eller XML-format via -csv eller -xml kommandolinjealternativ. Tenk på følgende eksempler:

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

Disse eksemplene leses budsjett.xls og sende innholdet i CSV- og XML-format til standardutdata. Når ingen av dem -csv heller ikke -xml er spesifisert, -csv er antatt.

Skrivedemoen oppretter et eksempel regneark som inkluderer formler, rammer, bilder og mer. Dette regnearket genereres ved å spesifisere -skrive kommandolinjealternativ, som vist nedenfor:

java -jar jxl.jar -skriver sample.xls

Figur 1 viser en del av det resulterende sample.xls regneark.

Figur 1. Jeg brukte LibreOffice Calc for å få tilgang til regnearket sample.xls

Kopidemoen kopierer et regneark jxlrwtest.xls, som er lagret i samme katalog som jxl.jar, til et nytt regneark. I det resulterende regnearket er det første arket (original) uendret, mens det andre arket (modifisert) inneholder modifiserte verdier.

Denne demoen genereres ved å spesifisere -rw kommandolinjealternativ etterfulgt av jxlrwtest.xls og navnet på utdataarket. Vurder følgende kommandolinje:

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

Denne kommandolinjen kopieres jxlrwtest.xls til copy.xls. Figur 2 viser det andre (modifiserte) arket i LibreOffice Calc.

Figur 2. Klikk på de originale og modifiserte fanene for å vise originalen og de modifiserte arkene

Inkludert JExcelAPI for kompilering og utførelse

Spørsmål: Hvordan inkluderer jeg JExcelAPI når jeg kompilerer kildekode og kjører et program?

EN: Gjør ett av følgende for å inkludere JExcelAPI når du kompilerer kildekode og kjører et program:

  • Legg til jexcelapi hjemmekataloger jxl.jar filen til din CLASSPATH miljøvariabel.
  • Inkludere jxl.jar via javac og java programmet -cp kommandolinjealternativ.

Programmering med JExcelAPI

Spørsmål: Hvordan lager jeg Java-programmer som utnytter JExcelAPI?

EN: De jexcelapi hjemmekatalog inkluderer en tutorial.html fil som presenterer en grunnleggende veiledning om programmering med JExcelAPI. Opplæringen viser deg hvordan du leser, skriver og kopierer regneark. Opplæringen diskuterer også formatering.

jexcelapi inkluderer også en dokumenter underkatalog, som gir tilgang til omfattende API-dokumentasjon. Pek nettleseren din til denne katalogen index.html filen, og du kan utforske typene i dette bibliotekets fire dokumenterte pakker:

  • jxl: hovedpakkens typer
  • jxl. demo: typer for forskjellige demoer
  • jxl.format: typer relatert til formatering
  • jxl.write: typer for skriving til et regneark

Merk at denne listen ikke er uttømmende. Tilleggspakker som jxl.les er til stede, men er ikke dokumentert. For å lære om flere pakker, kjør jar tvf jxl.jar og undersøke pakkeinformasjonen i den resulterende JAR-listen.

For å hjelpe deg i gang med JExcelAPI har jeg laget en enkel JExcelAPIDemo applikasjon som demonstrerer å lage et nytt regneark som er lagret i output.xls og deretter lese og skrive ut innholdet i dette regnearket. Sjekk ut oppføring 1.

Oppføring 1. Skrive og lese et enkelt regneark

importere java.io.File; importere java.io.IOException; importere jxl.Cell; importere jxl.Sheet; importere jxl.Workbook; importere jxl.read.biff.BiffException; importere jxl.write.Label; importere jxl.write.Number; importere jxl.write.WritableSheet; importere jxl.write.WritableWorkbook; importere jxl.write.WriteException; offentlig klasse JExcelAPIDemo {public static void main (String [] args) kaster BiffException, IOException, WriteException {WritableWorkbook wworkbook; wworkbook = Workbook.createWorkbook (ny fil ("output.xls")); WritableSheet wsheet = wworkbook.createSheet ("Første ark", 0); Label label = new Label (0, 2, "A label record"); wsheet.addCell (etikett); Nummernummer = nytt nummer (3, 4, 3.1459); wsheet.addCell (nummer); wworkbook.write (); wworkbook.close (); Arbeidsbok arbeidsbok = Workbook.getWorkbook (ny fil ("output.xls")); Arkark = arbeidsbok.getSheet (0); Cellecelle1 = ark.getCell (0, 2); System.out.println (cell1.getContents ()); Cellecelle2 = ark.getCell (3, 4); System.out.println (cell2.getContents ()); arbeidsbok.lukk (); }}

Oppføring 1 oppretter først en skrivbar arbeidsbok ved å påkalle en av Arbeidsbokfabrikksmetoder. Deretter opprettes et skrivbart ark for denne arbeidsboken, og deretter legges det til en etikett og et nummer som arkets to celleverdier. Arbeidsboken blir deretter skrevet og lukket.

Oppføring 1 fortsetter ved å få en arbeidsbok tilknyttet output.xls og lese innholdet. De getSheet () metoden gir tilgang til det første arket i denne arbeidsboken. Det er getCell () metoden kalles for å få tilgang til de to cellene, hvis innhold deretter blir sendt ut.

Antar at jxl.jar ligger i den gjeldende katalogen, utfør følgende kommando for å kompilere liste 1:

javac -cp jxl.jar JExcelAPIDemo.java

Forutsatt suksess, utfør følgende kommando for å kjøre JExcelAPIDemo:

java -cp jxl.jar ;. JExcelAPIDemo

Du bør følge følgende utdata:

Et etikettrekord 3.146

Figur 3 viser deg output.xls i LibreOffice-sammenheng.

Figur 3. Det ensomme arket viser to celleverdier

Hva blir det neste?

Neste gang presenterer jeg et sett med puslespillere som tar for seg utviklingen av Java-biblioteker. Disse puslespillere fokuserer på kilde- og binærkodekompatibilitet mellom klientprogrammer og bibliotekene som disse programmene bruker.

last ned Last ned kilden Få kildekoden for dette innleggets applikasjoner. Skapt av Jeff Friesen for JavaWorld

Følgende programvare ble brukt til å utvikle postens kode:

  • 64-biters JDK 7u6
  • JExcelAPI 2.6.12

Innleggets kode ble testet på følgende plattform (er):

  • JVM på 64-biters Windows 7 SP1

Denne historien, "Lese og skrive Excel-regneark" ble opprinnelig utgitt av JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found