Čtení Excel dokumenty v jazyce Java
Z nějakého důvodu jsem našel Apache POI obtížné používat pro čtení Excel, pokud jde o pojmenování úmluv a kód, takže jsem hledal jiné knihovny pro čtení Excel v jazyce Java a zastavil jsem se v JXL.
Java Excel API sice JXL je Java API, který nám umožňuje čtení / zápis / upravit Excel. Mezi hlavní, že jsem rád na to byla jeho jednoduchost přes Apache POI balíček. Tento článek vám ukáže, jak můžeme číst Excel pomocí JXL.
Teď tady budu číst Excel s obsahem:
| EmpId | Jméno | Označení |
| 1 | ABC | Software Engineer |
| 2 | DFG | Sr Software Engineer |
| 3 | LOI | Team Leader |
| 4 | LKJ | Project Manager |
| 5 | QWE | Software Architech |
Mám nahrané stejný Excel na server, můžete si jej stáhnout zde: Stáhnout Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | ; import java.io.FileInputStream ; import java.io.IOException ; import java.io.InputStream ; import java.util.Locale ; import jxl.Cell ; import jxl.Sheet ; import jxl.Workbook ; import jxl.WorkbookSettings ; import jxl.read.biff.BiffException ; import jxl.DateCell ; public class ReadXLSheet { public void init ( String filePath ) { FileInputStream fs = null ; try { fs = new FileInputStream ( new File ( filePath ) ) ; contentReading ( fs ) ; } catch ( IOException e ) { e. printStackTrace ( ) ; } catch ( Exception e ) { e. printStackTrace ( ) ; } finally { try { fs. close ( ) ; } catch ( IOException e ) { e. printStackTrace ( ) ; } } } //Returns the Headings used inside the excel sheet public void getHeadingFromXlsFile ( Sheet sheet ) { int columnCount = sheet. getColumns ( ) ; for ( int i = 0 ; i < columnCount ; i ++ ) { System . out . println ( sheet. getCell ( i, 0 ) . getContents ( ) ) ; } } public void contentReading ( InputStream fileInputStream ) { WorkbookSettings ws = null ; Workbook workbook = null ; Sheet s = null ; Cell rowData [ ] = null ; int rowCount = '0' ; int columnCount = '0' ; DateCell dc = null ; int totalSheet = 0 ; try { ws = new WorkbookSettings ( ) ; ws. setLocale ( new Locale ( "en" , "EN" ) ) ; workbook = Workbook. getWorkbook ( fileInputStream, ws ) ; totalSheet = workbook. getNumberOfSheets ( ) ; if ( totalSheet > 0 ) { System . out . println ( "Total Sheet Found:" + totalSheet ) ; for ( int j = 0 ; j < totalsheet ; j ++ ) { System . out . println ( "Sheet Name:" + workbook. getSheet ( j ) . getName ( ) ) ; } } //Getting Default Sheet ie 0 s = workbook. getSheet ( 0 ) ; //Reading Individual Cell getHeadingFromXlsFile ( s ) ; //Total Total No Of Rows in Sheet, will return you no of rows that are occupied with some data System . out . println ( "Total Rows inside Sheet:" + s. getRows ( ) ) ; rowCount = s. getRows ( ) ; //Total Total No Of Columns in Sheet System . out . println ( "Total Column inside Sheet:" + s. getColumns ( ) ) ; columnCount = s. getColumns ( ) ; //Reading Individual Row Content for ( int i = 0 ; i < rowCount ; i ++ ) { //Get Individual Row rowData = s. getRow ( i ) ; if ( rowData [ 0 ] . getContents ( ) . length ( ) != 0 ) { // the first date column must not null for ( int j = 0 ; j < columnCount ; j ++ ) { switch ( j ) { case 0 : System . out . println ( "Employee Id:" + rowData [ j ] . getContents ( ) ) ; case 1 : System . out . println ( "Employee Name:" + rowData [ j ] . getContents ( ) ) ; case 2 : System . out . println ( "Employee Designation:" + rowData [ j ] . getContents ( ) ) ; default : break ; } } } } workbook. close ( ) ; } catch ( IOException e ) { e. printStackTrace ( ) ; } catch ( BiffException e ) { e. printStackTrace ( ) ; } } public static void main ( String [ ] args ) { try { ReadXLSheet xlReader = new ReadXLSheet ( ) ; xlReader. init ( "/home/hitesh/Desktop/test.xls" ) ; } catch ( Exception e ) { e. printStackTrace ( ) ; } } } import java.io.File, import java.io.FileInputStream, import java.io.IOException, import java.io.InputStream, import java.util.Locale, import jxl.Cell, import jxl.Sheet, import jxl.Workbook; import jxl.WorkbookSettings, import jxl.read.biff.BiffException, import jxl.DateCell, public class ReadXLSheet (public void init (String filePath) (FileInputStream fs = null; try (fs = new FileInputStream (new File (filePath)); contentReading (FS);) chytit (IOException e) (e. printStackTrace ();) catch (Exception e) (e. printStackTrace ();) finally (try (FS. close ();) chytit (IOException e) (e . printStackTrace ();))) / / Vrací Nadpisy použité uvnitř Excel public void getHeadingFromXlsFile (Sheet list) (int columnCount = list. getColumns (); for (int i = 0; i <columnCount; i + +) (System. ven. System.out.println (sheet. getCell (i, 0). getContents ());)) public void contentReading (InputStream fileInputStream) (WorkbookSettings byla = null; sešitu sešit = null; Sheet s = null; Mobilní rowData [] = null; int rowCount = '0 '; int columnCount = '0'; DateCell dc = null; int totalSheet = 0; try (byl = new WorkbookSettings (); byl. setlocale (nové lokalizace ("en", "EN" )); sešit = sešit. getWorkbook (fileInputStream, byl), totalSheet = sešitu. getNumberOfSheets (); if (totalSheet> 0) (System. ven. System.out.println ("Celkem Sheet Nalezeno:" + totalSheet) for (int j = 0; j <totalsheet; j + +) (System. ven. System.out.println ("název listu:" + sešit. getSheet (j). getName ());)) / / Získání Výchozí Sheet tj. 0 s = sešitu. getSheet ( 0), / / Čtení jednotlivé buňky getHeadingFromXlsFile (y) / / Celkem Celkem č. řádků v tabulce, vrátí vám žádná z řad, které jsou obsazené s nějakým informačním systému. ven. System.out.println ("Řádků celkem uvnitř listu:" + s . getRows ()); rowCount = s. getRows (); / / Celkem Celkem č. sloupců v listu systému. ven. System.out.println ("Celkem sloupec uvnitř Sheet:" + s. getColumns ()); columnCount = s. getColumns ( ); / / Čtení Jednotlivé řádku Obsah for (int i = 0; i <rowCount; i + +) (/ / Získání jednotlivých řádků rowData = s. getRow (i); if (rowData [0]. getContents (). délku ()! = 0) (/ / první sloupec datum, nesmí null for (int j = 0; j <columnCount; j + +) (switch (j) (case 0: System. ven. System.out.println ("Zaměstnanec Id: "+ rowData [j]. getContents ()); case 1: System. ven. System.out.println (" Jméno zaměstnance: "+ rowData [j]. getContents ()); case 2: System. ven. System.out.println (" Zaměstnanec Určení: "+ rowData [j]. getContents ()); default: break;)))) sešitu. close ();) chytit (IOException e) (e. printStackTrace ();) chytit (BiffException e) (e. printStackTrace ( );)) public static void main (String [] args) (try (ReadXLSheet xlReader = new ReadXLSheet (); xlReader. init ("/ home / Hitesh / Desktop / test.xls");) catch (Exception e) ( e. printStackTrace ();))) |
Celkem Sheet Nalezeno: 3 ---------------------------------------------- Název listu: List1 Název listu: List2 Název listu: List3 ---------------------------------------------- Záhlaví sloupce: EmpId Záhlaví sloupce: jméno Záhlaví sloupce: Označení ---------------------------------------------- Řádků celkem uvnitř listu: 6 ---------------------------------------------- Celkem Sloupec uvnitř Sheet: 3 ---------------------------------------------- Zaměstnanec Id: EmpId Jméno zaměstnance: Jméno Zaměstnanec Označení: Označení ---------------------------------------------- Zaměstnanec ID: 1 Jméno zaměstnance: ABC Zaměstnanec Označení: Software Engineer ---------------------------------------------- Zaměstnanec ID: 2 Jméno zaměstnance: DFG Zaměstnanec Označení: SR Software Engineer ---------------------------------------------- Zaměstnanecké ID: 3 Jméno zaměstnance: LOI Zaměstnanec Označení: Team Leader ---------------------------------------------- Zaměstnanecké ID: 4 Jméno zaměstnance: LKJ Zaměstnanec Označení: Project Manager ---------------------------------------------- Zaměstnanec Id: 5 Jméno zaměstnance: QWE Zaměstnanec Označení: Software Architect
S ohledem na tato písemná kódu jsem schopen provádět následující operace:
- Spočítejte celkový počet listů v rámci Excel
- Seznam všech Název Sheet použité uvnitř Excel
- Přečtěte si jednotlivé buňky pro specifikaci buněk pozice - v kódu si přečetl na záhlaví sloupce, tj. první řádek
- Přečtěte si celkového upraveného řádky v Excel
- Přečtěte si celkového upraveného Sloupce v Excel
- Přečtěte si Jednotlivé řádku Obsah

Vlastní vyhledávání


































Pokud mám napsat tento kód pomocí POI, splnit úkoly, které jste provedli, by kód byl do jisté míry podobný s velmi podobné volání API. Vidím obtížnost jako více či méně stejný ve srovnání s POI. Moje otázka je, jak se liší od POI?
Ahoj Surya,
Rozdíl přichází s balíčkem konvence používané. JXL je čistě pro Excel v jazyce Java. Tam, kde stejně jako v Apache POI tam jsou různé projekty z různých Microsoft Office soubory, např. HWPF, HSSF, HPSF atd. Nyní jako vývojář budete se muset podívat, který z nich, pokud pro Excel parsování, download balíčku a následně realizovat jej.
Ahoj,
Líbilo se mi váš tutorial.
Manish
to je problém, zatímco s více listy v xls souboru. Chci accsess více listů hodnot najednou, ale vrací ovelap hodnotu ze dvou vrstev.
ale tutorial je příliš dobrý.
plz vyřešit problém
Ahoj Avijit,
Můžete vložit do zdrojového kódu, který používáte.
Hitesh Agarwal
Ahoj Hitesh,
Velmi pěkný tutorial muž. Jen tak dál
Ahoj Hitesh,
Dobrá práce člověk. Měl jsem otázku. Je možné psát makra aplikace Excel v jazyce Java a popravit ty makra při práci na tabulku.
Díky
Abhi
Velká tutorial, thx lottt ...
Ahoj,
Za prvé, děkuji za tutorial.
Mám problém. Já si stáhli API, ale já nevím, kde ji uložit do zatmění. Důvodem je to, že jsem putted rozbalené soubory z API do složky plugin, ale program si dal jako příklad stále žádá o jxl.
Mohl byste, prosím pomoci?
Díky.
Velmi pěkné xls číst kód .. thanx hodně.
Velmi pěkný tutorial spatřují excel čtení. Díky
Jak číst data ze souboru aplikace Excel pomocí názvu sloupce.
Řekněme, že pro např.
Místo Země
Chennai Indie
Mumbai Indie
Nutnost číst pomocí sloupce Place, Country.
Prosím, pomozte mi.
Ahoj, pokud excel soubor se 18bm, jak číst?
hej ..
Snažím se spustit program ročně, ale stále na to, aby mě špatně Java verze by měla být 50,0 49,0.
Dosent JXL pracovat s Java 1.5?
Dejte mi vědět, jestli tam je anythign im chybí?
Jak můžeme vložit nový řádek do plechu?
Jak můžeme kopírovat stávající řádek formátu na nový řádek?
Ahoj Hitesh,
Nice knihovna, zachovat to, užitečné pro lidi.
Jak můžeme vložit nový řádek do plechu?
Jak můžeme kopírovat stávající řádek formátu na nový řádek?
Rgds
Swamy.
Suresh Hitesh,
hi Hitesh,
Ahoj Hitesh,
Tutorial byl G8 Nápověda
Díky
Ahoj Hitesh,
Mám následující výjimku, kdy jsem se snažil běžet ReadXLSheet.java.
jxl.read.biff.BiffException: Nelze uznat OLE proudu
V jxl.read.biff.CompoundFile. (CompoundFile.java: 116)
V jxl.read.biff.File. (File.java: 127)
V jxl.Workbook.getWorkbook (Workbook.java: 268)
V com.sample.ReadXLSheet.contentReading (ReadXLSheet.java: 65)
V com.sample.ReadXLSheet.init (ReadXLSheet.java: 30)
V com.sample.ReadXLSheet.main (ReadXLSheet.java: 20)
Co by mohlo být důvodem.
Zpočátku jsem dostal následující výjimkou případu, kdy jsem se snažil běžet ReadXLSheet.java.
java.lang.UnsupportedClassVersionError: Bad version číslo. třídě souboru
Později jsem souladu jexcelapi_2_6_12 zdroj s mým JVM a používá generované jar. Teď jsem ne prospěch tato dluh, ale já am prospěch
jxl.read.biff.BiffException. pocínovat u být příjemný pomoci mne až k vyřešení tohoto problému.
díky,
Ganesh
Ahoj Ganesh,
Se nesetkala s touto chybou. Bude se muset podívat na to.
Díky,
Hitesh Agarwal
Ahoj Hitesh,
Thanku pro ur připomínky a tutorial.
Mám problém týkající se excel list.
Mám dvě Excel, oba jsou na stejném systému.
Pokud se mi změna v jedné aplikaci Excel list, pak je vliv na ostatní Excel.
Jsem schopen ping jiného systému a může odeslat zprávu jiným systémem pomocí socket programování.
ale já nemám ponětí, jak aktualizovat Excel, který je na druhé straně systému stejné im dělá, když Excel ve stejném systému.
Odpovězte, prosím, ASAP
Díky předem.
@ Ganesh
Zkontrolujte, zda je ur použití. XLSX místo. Xls
JÁ brát tato výjimka (Nelze uznat OLE stream), pokud mohu použít nový XLSX soubor.
Takže s použitím jexcelapi_2_6_12 vyřeší xlsx formát problém?
@ Ganesh
Zkontrolujte, zda soubor test.xls je blokován .. Klikněte pravým tlačítkem myši a přejděte na vlastnosti. Pokud je zablokována, odblokovat .. Některé funkce zabezpečení v systému Windows, které blokuje některé stažené soubory, dokud si je odblokovat .. Zkuste jestli to pomůže!
Díky za váš tutorial ^ _ ^
Mockrát vám děkuji, jsem pracoval na problém, kdy jsem potřeboval řemen xls soubor (400 +) - pouze jednou. Zachránil jste mi den s touto JAR!
Ahoj všichni,
Kód funguje docela dobře s jednou změnou.
Po každém případě prohlášení přidat "break"
tak revidovaném kodexu chování by bylo:
switch (j) (
case 0:
System.out.println ("Zaměstnanec Id:" + rowData [j]. GetContents ());
break;
Případ 1:
System.out.println ("Jméno zaměstnance:" + rowData [j]. GetContents ());
break;
Případ 2:
System.out.println ("Zaměstnanec Určení:" + rowData [j]. GetContents ());
break;
default:
break;
)
S kódem, jak je uvedeno, že smyčky přes všechny tři podmínky, a dává chybný výstup.
Díky za kód.
Bylo velmi užitečné ... skvělá práce
@ Ganesh
JÁ am prospěch člen určitý týž dluh jako Ganesh dostal. Můj soubor je uložen jako. Xls a odblokování, ale stále dostává stejnou BiffException.Please Nápověda
Ahoj díky za kód ... ... ...
Kód pracoval pokuta Když spustím poprvé dostal výsledek příliš ....
Ale když jsem běžet stejný kód po třech časech exection ... ... její poskytování soubor nebyl nalezen a null bod výjimkou ... ... ... .. cesta jméno je také správná .... plzzzz mi zpátky s řešením co nejrychleji ... ... ..
Ahoj díky za kód ... ... ...
Kód pracoval pokuta Když spustím poprvé dostal výsledek příliš ....
Ale když jsem běžet stejný kód po třech časech exection ... ... její poskytování soubor nebyl nalezen a null bod výjimkou ... ... ... .. plzzzz mi zpátky s řešením co nejrychleji ... ... ..
Díky předem ... ... ... ... ... ...
Kde získám jar soubor?
Ahoj Hitesh,
Činit u mít nějakou představu o tom písemně. Xlsx soubory. Pokud ano, může u pls sdílet některé ukázky kódu.
Díky
Ahoj Meneka,
Poslední Apache POI podporuje xslx souboru.
Díky,
Hitesh Agarwal
Stáhl jsem si váš kód a tryied jej spustit v ubuntu platformě s jdk6
ale v době běhu jeho ukázal tento
Výjimka ve vlákně \ Main \ java.lang.NoClassDefFoundError: ReadXLSheet
V java.lang.Class.initializeClass (libgcj.so.10)
Způsobena: java.lang.ClassNotFoundException: jxl.Cell nebyl nalezen v gnu.gcj.runtime.SystemClassLoader (URL adresy = [soubor :./], mateřské = gnu.gcj.runtime.ExtensionClassLoader (adresy URL = [], rodiče = null ))
V java.net.URLClassLoader.findClass (libgcj.so.10)
V java.lang.ClassLoader.loadClass (libgcj.so.10)
V java.lang.ClassLoader.loadClass (libgcj.so.10)
V java.lang.Class.initializeClass (libgcj.so.10)
místo výstupu
Můžete mi prosím řekněte mi co je problém s mým kódem nejsem schopen dostat a jeho urget
hledá k pomoci ...
Díky předem
Ahoj Gaurav,
Budete muset přidat JExcel API ve vaší třídě cestu, zatímco sestavení java soubor, můžete si stáhnout JExcelAPI z http://jexcelapi.sourceforge.net/
Díky,
Hitesh Agarwal
Ahoj,
Napsal jsem tyto funkce:
veřejné čtení void () throws IOException (
Soubor inputWorkbook = new File ("c: / temp / test.xls");
Sešit w;
try (
w = Workbook.getWorkbook (inputWorkbook);
...
) Chytit (BiffException e) (
e.printStackTrace ();
)
)
Když jsem se spustit tuto funkci v rámci běžného Java aplikací spolu se vším, co JFace funguje. Ale když spustím této funkce v rámci projektu RCP dostanu následující chybu:
java.lang.ClassNotFoundException: jxl.read.biff.BiffException
V org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal (BundleLoader.java: 494)
V org.eclipse.osgi.internal.loader.BundleLoader.findClass (BundleLoader.java: 410)
V org.eclipse.osgi.internal.loader.BundleLoader.findClass (BundleLoader.java: 398)
V org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass (DefaultClassLoader.java: 105)
V java.lang.ClassLoader.loadClass (Neznámý Source)
V model.CollectionManager.newOilFor (CollectionManager.java: 120)
V model.CollectionManager.loadCollection (CollectionManager.java: 107)
V model.CollectionManager.getCollection (CollectionManager.java: 56)
V hellooil.CollectionViewContentProvider.getElements (CollectionViewContentProvider.java: 39)
...
Má někdo vědět, co by mohlo být špatně?
JÁ am prospěch tato dluh, když jsem spustit kód posta výše. I dont opravdu porozumět problému. Díky předem.
jxl.read.biff.BiffException: Nelze uznat OLE proudu
V jxl.read.biff.CompoundFile. (CompoundFile.java: 116)
V jxl.read.biff.File. (File.java: 127)
V jxl.Workbook.getWorkbook (Workbook.java: 268)
V ReadXLSheet.contentReading (ReadXLSheet.java: 55)
V ReadXLSheet.init (ReadXLSheet.java: 20)
V ReadXLSheet.main (ReadXLSheet.java: 109)
Může mi někdo pomoct písemně obsah souboru aplikace Excel do souboru XML v Javě.
Vlastně im schopen číst soubor aplikace Excel, ale snažím se výstupní data do souboru XML pomocí objektu FileWriter ale nefunguje ...
Uveďte prosím mi nějaký lepší kód.
_________________________________________________
To je můj kód, který se snažím spustit:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util .*;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ReadExcel (
public static void main (String [] args) throws IOException (
Řetězec Vstupní_soubor = "c: / data.xls";
Soubor inputWorkbook = new File (Vstupní_soubor);
Soubor fileout = new File ("C: / data.xml");
FileWriter FW = new FileWriter (fileout);
fw.write ("");
Sešit w;
try (
w = Workbook.getWorkbook (inputWorkbook);
/ / Získání prvního listu
List list = w.getSheet (0);
/ / Smyčka přes prvních 10 sloupců a řádků
for (int i = 0; sheet.getColumns i <(); i + +) (
for (int j = 0; j <sheet.getRows (); j + +) (
Buňka buňky = sheet.getCell (j, i);
/ / CellType type = cell.getType ();
if (cell.getType () == CellType.LABEL) (
fw.write ("" + cell.getContents ()+"");
)
if (cell.getType () == CellType.NUMBER) (
fw.write ("" + cell.getContents ()+"");
)
)
)
fw.write ("");
) Chytit (BiffException e) (
e.printStackTrace ();
)
)
)
Může mi někdo pomoct písemně obsah souboru aplikace Excel do souboru XML v Javě.
Vlastně im schopen číst soubor aplikace Excel, ale snažím se výstupní data do souboru XML pomocí objektu FileWriter ale nefunguje ...
Uveďte prosím mi nějaký lepší kód.
_________________________________________________
To je můj kód, který se snažím spustit:
** Poznámka: Nebyl jsem schopen napsat značky na této stránce, takže jsem použil složených závorek pro značky namísto hranaté závorky
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util .*;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ReadExcel (
public static void main (String [] args) throws IOException (
Řetězec Vstupní_soubor = "c: / data.xls";
Soubor inputWorkbook = new File (Vstupní_soubor);
Soubor fileout = new File ("C: / data.xml");
FileWriter FW = new FileWriter (fileout);
fw.write ("() root");
Sešit w;
try (
w = Workbook.getWorkbook (inputWorkbook);
/ / Získání prvního listu
List list = w.getSheet (0);
/ / Smyčka přes prvních 10 sloupců a řádků
for (int i = 0; sheet.getColumns i <(); i + +) (
for (int j = 0; j <sheet.getRows (); j + +) (
Buňka buňky = sheet.getCell (j, i);
/ / CellType type = cell.getType ();
if (cell.getType () == CellType.LABEL) (
fw.write ("() značka" + cell.getContents ()+"{/ značku) ");
)
if (cell.getType () == CellType.NUMBER) (
fw.write ("() značka" + cell.getContents ()+"{/ značku) ");
)
)
)
fw.write ("(/ root)");
) Chytit (BiffException e) (
e.printStackTrace ();
)
)
)
Ahoj může někdo mi říct, odkud si mám stáhnout jxl balíčku a kde mám umístit zkompilovat můj zdrojový kód.