Open source-samfundet har skabt mange open source Java-projekter, der spænder fra kortlægningssoftware til spilrammer til tekstbehandlere. I dette indlæg introducerer jeg et open source-biblioteksprojekt til læsning og skrivning af Microsoft Excel-regneark.
Anbefaling af et regnearkbibliotek
Spørgsmål: Jeg er blevet bedt om at udvide min virksomheds Java-baserede regnearksoftware til at læse og skrive Excel-regneark. Kan du anbefale et open source Java-bibliotek, der hjælper mig med denne opgave?
EN: Du vil måske tjekke JExcelAPI, som er et modent, Java-baseret open source-bibliotek, der giver dig mulighed for at læse, skrive og ændre Excel-regneark. Her er et par af dens mange funktioner:
- Læser data fra Excel 95, 97, 2000, XP og 2003 projektmapper
- Læser og skriver formler (kun Excel 97 og senere)
- Genererer regneark i Excel 2000-format
- Understøtter formatering af skrifttype, nummer og dato
- Understøtter celleskygge, cellegrænser og cellefarvning
- Ændrer eksisterende regneark
- Understøtter kortkopiering
- Understøtter indsættelse og kopiering af billeder i regneark
JExcelAPI blev udviklet af Andrew Kahn og blev frigivet under GNU Lesser General Public License.
Download af JExcelAPI-biblioteket
Spørgsmål: Hvordan downloader jeg JExcelAPI?
EN: Udfør følgende trin for at downloade JExcelAPI:
- Ret din browser til JExcelAPIs SourceForge-websted.
- Klik på
jexcelapi
link. - Klik på et af mappelinkene på den resulterende side. For eksempel klikkede jeg på
2.6.12
link. - Klik på distributionsarkivets filnavn på den resulterende side. For eksempel klikkede jeg på
jexcelapi_2_6_12.zip
link. - Efter en kort forsinkelse skal din browser bede dig om at gemme denne fil. Gå videre og gem filen.
Efter download, skal du arkivere denne fil. Du skal observere en jexcelapi
hjemmekatalog inden for en jexcelapi_2_6_12
vejviser.
Demonstration af JExcelAPI-biblioteket
Spørgsmål: Indeholder JExcelAPI-biblioteket nogen demoer?
EN: JExcelAPI'er jexcelapi
hjemmekatalog indeholder en jxl.jar
fil, der indeholder demoer til læsning, skrivning og kopiering af regneark.
Den læste demo læser et eksisterende regneark og konverterer det til kommasepareret værdi (CSV) eller XML-format via -csv
eller -xml
kommandolinjemulighed. Overvej følgende eksempler:
java -jar jxl.jar -csv budget.xls java -jar jxl.jar -xml budget.xls
Disse eksempler læses budget.xls
og output dets indhold i CSV- og XML-format til standardoutput. Når ingen af dem -csv
heller ikke -xml
er specificeret, -csv
antages.
Skrivedemoen opretter et eksempel på et regneark, der indeholder formler, kanter, billeder og mere. Dette regneark genereres ved at specificere -skrive
kommandolinjemulighed, som vist nedenfor:
java -jar jxl.jar -skrive sample.xls
Figur 1 viser en del af det resulterende sample.xls
regneark.
Figur 1. Jeg brugte LibreOffice Calc til at få adgang til regnearket sample.xls
Kopidemoen kopierer eksemplet på regneark jxlrwtest.xls
, som er gemt i samme bibliotek som jxl.jar
, til et nyt regneark. I det resulterende regneark er det første ark (original) uændret, mens det andet ark (modificeret) indeholder ændrede værdier.
Denne demo genereres ved at specificere -rw
kommandolinjemulighed efterfulgt af jxlrwtest.xls
og navnet på output-regnearket. Overvej følgende kommandolinje:
java -jar jxl.jar -rw jxlrwtest.xls copy.xls
Denne kommandolinje kopieres jxlrwtest.xls
til copy.xls
. Figur 2 viser det andet (modificerede) ark i LibreOffice Calc.
Figur 2. Klik på de originale og ændrede faner for at se de originale og ændrede ark
Herunder JExcelAPI til kompilering og udførelse
Spørgsmål: Hvordan inkluderer jeg JExcelAPI, når jeg kompilerer kildekode og kører en applikation?
EN: For at inkludere JExcelAPI ved kompilering af kildekode og kørsel af et program skal du gøre et af følgende:
- Tilføj
jexcelapi
hjemmekatalogerjxl.jar
fil til dinCLASSPATH
miljøvariabel. - Omfatte
jxl.jar
viajavac
ogjava
program-cp
kommandolinjemulighed.
Programmering med JExcelAPI
Spørgsmål: Hvordan opretter jeg Java-programmer, der udnytter JExcelAPI?
EN: Det jexcelapi
hjemmekatalog indeholder en tutorial.html
fil, der præsenterer en grundlæggende tutorial om programmering med JExcelAPI. Selvstudiet viser dig, hvordan du læser, skriver og kopierer regneark. Selvstudiet diskuterer også formatering.
jexcelapi
inkluderer også en dok
underkatalog, som giver adgang til omfattende API-dokumentation. Peg din webbrowser til denne mappe index.html
fil, og du kan udforske typerne i dette biblioteks fire dokumenterede pakker:
jxl
: hovedpakkens typerjxl.demo
: typer til de forskellige demoerjxl.format
: typer relateret til formateringjxl.write
: typer til skrivning til et regneark
Bemærk, at denne liste ikke er udtømmende. Yderligere pakker som f.eks jxl.læs
er til stede, men er ikke dokumenteret. For at lære om yderligere pakker skal du udføre krukke tvf jxl.jar
og undersøge pakkeoplysningerne i den resulterende JAR-liste.
For at hjælpe dig i gang med JExcelAPI har jeg oprettet en simpel JExcelAPIDemo
applikation, der demonstrerer oprettelse af et nyt regneark, der gemmes i output.xls
og derefter læse og udgive indholdet af dette regneark. Tjek Listing 1.
Notering 1. Skrivning og læsning af et enkelt regneark
import java.io.File; importere java.io.IOException; import jxl.Cell; import jxl.Sheet; importere jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.Number; importer jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import 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 (etiket); Tal nummer = nyt nummer (3, 4, 3.1459); wsheet.addCell (antal); wworkbook.write (); wworkbook.close (); Workbook workbook = Workbook.getWorkbook (ny fil ("output.xls")); Arkark = projektmappe.getSheet (0); Cellecelle1 = ark.getCell (0, 2); System.out.println (cell1.getContents ()); Cellecelle2 = ark.getCell (3, 4); System.out.println (cell2.getContents ()); workbook.close (); }}
Fortegnelse 1 opretter først en skrivbar projektmappe ved at påberåbe sig en af Arbejdsbog
's fabriksmetoder. Der oprettes derefter et skrivbart ark til denne projektmappe, og derefter tilføjes en etiket og et nummer som arkets to celleværdier. Arbejdsbogen skrives derefter og lukkes.
Fortegnelse 1 fortsætter med at få en projektmappe tilknyttet output.xls
og læse dets indhold. Det getSheet ()
metode giver adgang til det første ark i denne projektmappe. Dens getCell ()
metode kaldes for at få adgang til de to celler, hvis indhold derefter sendes ud.
Antages det jxl.jar
er placeret i den aktuelle mappe, udfør følgende kommando for at kompilere liste 1:
javac -cp jxl.jar JExcelAPIDemo.java
Under forudsætning af succes skal du udføre følgende kommando for at køre JExcelAPIDemo
:
java -cp jxl.jar ;. JExcelAPIDemo
Du skal overholde følgende output:
Et labeloptegnelse 3.146
Figur 3 viser dig output.xls
i en LibreOffice-sammenhæng.
Figur 3. Det ensomme ark viser to celleværdier
Hvad er det næste?
Næste gang præsenterer jeg et sæt puslespil, der adresserer udviklingen af Java-biblioteker. Disse puzzlere fokuserer på kilde- og binærkodekompatibilitet mellem klientprogrammer og de biblioteker, som disse programmer bruger.
download Download kilden Hent kildekoden til dette indlægs applikationer. Oprettet af Jeff Friesen til JavaWorldFølgende software blev brugt til at udvikle postens kode:
- 64-bit JDK 7u6
- JExcelAPI 2.6.12
Postens kode blev testet på følgende platforme:
- JVM på 64-bit Windows 7 SP1
Denne historie, "Læsning og skrivning af Excel-regneark", blev oprindeligt udgivet af JavaWorld.