Programmering

Læsning og skrivning af Excel-regneark

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:

  1. Ret din browser til JExcelAPIs SourceForge-websted.
  2. Klik på jexcelapi link.
  3. Klik på et af mappelinkene på den resulterende side. For eksempel klikkede jeg på 2.6.12 link.
  4. Klik på distributionsarkivets filnavn på den resulterende side. For eksempel klikkede jeg på jexcelapi_2_6_12.zip link.
  5. 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 hjemmekataloger jxl.jar fil til din CLASSPATH miljøvariabel.
  • Omfatte jxl.jar via javac og java 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 typer
  • jxl.demo: typer til de forskellige demoer
  • jxl.format: typer relateret til formatering
  • jxl.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 JavaWorld

Fø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.