รับทำเว็บไซต์ครบวงจร
เลือกภาษา Thai English     facebook
รายการหลัก



บทความ


Page Ranking Tool

อ่านข้อมูลจากไฟล์ excel ด้วย Java โดยใช้ jXLS


สอน JSP
> อ่านข้อมูลจากไฟล์ excel ด้วย Java โดยใช้ jXLS


เริ่มต้นสร้างจาวาโปรเจ็ค

โปรเจ็คนี้ จะเป็นการรวมเอาการอ่านและเขียนไฟล์ excel โดยตัวอย่างการเขียนข้อมูลลงไฟล์ excel ได้เคยทำไว้แล้ว ในบทความนี้จะทำตัวอย่างการอ่านข้อมูลไฟล์ excel เมื่อทำเสร็จ ก็จะรวม2ออปชั่น เข้าด้วยกัน และสามารถเลือกได้ว่า จะ อ่านข้อมูล หรือเขียนข้อมูล

สเปค โปรแกรมและlibrary ที่ใช้
OS : Ubuntu 12.10
IDE : Eclipse Juno 4.2.1
JDK : 1.7.0_11
Libraries :
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-digester-2.1.jar
commons-jexl-2.0.1.jar
commons-logging.jar
jxls-core-1.0.1.jar
jxls-reader-1.0.1.jar
poi-3.8-20120326.jar
oi-ooxml-3.8-20120326.jar

สร้างคลาส Student

[1] File >> New >> Java Project โดยบทความนี้ตั้งชื่อว่า JxlsExample

[2] สร้าง Class Student โดยใช้ Class Student จากตัวอย่างเก่า และเพิ่ม contructor เพิ่มขึ้นมา


  Code
package com.devsharing.example.jxls;
public class Student {
int id;
String name;
String lastName;
String address;

//Constructor
public Student(int id, String name, String lastName, String address) {
this.id = id;
this.name = name;
this.lastName = lastName;
this.address = address;
}

public Student() {
// TODO Auto-generated constructor stub
}

//Getter and Setter
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}



สร้างคลาส Reader

สร้างคลาสสำหรับอ่านข้อมูล Excel ตั้งชื่อคลาสว่า JxlsReader.java


  Code
package com.devsharing.example.jxls;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

import net.sf.jxls.reader.ReaderBuilder;
import net.sf.jxls.reader.ReaderConfig;
import net.sf.jxls.reader.XLSDataReadException;
import net.sf.jxls.reader.XLSReadStatus;
import net.sf.jxls.reader.XLSReader;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.xml.sax.SAXException;

public class JxlsReader {
static String pathXML = "res/report/student-config.xml";
static String pathXLS = "res/template/Student-Import.xls";

public XLSReadStatus importFile(Map<String, Object> model) {

ReaderConfig.getInstance().setSkipErrors(true);
InputStream inputXML = null;
InputStream inputXLS = null;
try {

inputXML = new FileInputStream(new File(pathXML));
inputXLS = new FileInputStream(new File(pathXLS));

XLSReader mainReader = ReaderBuilder.buildFromXML( inputXML );
mainReader.read( inputXLS, model);

} catch (InvalidFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (XLSDataReadException e) {
e.printStackTrace();
}finally {

try {
inputXML.close();
inputXLS.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
}



อธิบายโค๊ดด้านบน ดังนี้ เป็นการใช้งาน คลาส XLSReader สิ่งที่จำเป็นคือ ไฟล์ xls และไฟล์ xml (สำหรับคอนฟิคค่า) จึงต้องทำการกำหนด path ที่อยู่ให้กับทั้งสองไฟล์ เก็บไว้ที่ pathXML และ pathXLS

เพิ่ม Library

ทำการเพิ่ม Libraries ทั้งหมด ที่ต้องใช้


  Code
|-- JxlsExample
|--src
|-- main.java.com.devsharing.example.jxls
|--Student.java
|--JxlsReport.java
|--JxlsReader.java
|--lib
|--commons-beanutils-1.8.3.jar
|--commons-collections-3.2.1.jar
|--commons-digester-2.1.jar
|--commons-jexl-2.0.1.jar
|--commons-logging.jar
|--jxls-core-1.0.1.jar
|--jxls-reader-1.0.1.jar
|--poi-3.8-20120326.jar
|--poi-ooxml-3.8-20120326.jar
|--res
|--report
|--template
|--Student.xls



ตั้งค่าการอ่านไฟล์

สร้างไฟล์ Student.xml


  Code
<?xml version="1.0" encoding="utf-8"?>
<workbook>
<worksheet name="Student">
<section startRow="0" endRow="1">
</section>
<loop startRow="2" endRow="2" items="studentList" var="student" varType="com.devsharing.example.jxls.Student">
<section startRow="2" endRow="2">
<mapping row="2" col="0">student.id</mapping>
<mapping row="2" col="1">student.name</mapping>
<mapping row="2" col="2">student.lastName</mapping>
<mapping row="2" col="3">student.address</mapping>
</section>
<loopbreakcondition>
<rowcheck offset="0">
<cellcheck offset="0">-STOP-</cellcheck>
</rowcheck>
</loopbreakcondition>
</loop>
</worksheet>
</workbook>


อธิบาย โค๊ดในไฟล์ Student.xml worksheet คือชื่อชีทที่เราจะตั้งในไฟล์ excel เช่น Sheet 1
แท็ก section startRow=”0&#8243; endRow=”1&#8243; คือ เลือกแถวที่ 1 และ 2 ในไฟล์ excel ( นับ 0 เป็นแนวที่ 1 เหมือนนับ array)
และภายในบอดี้แท็ก section ไม่ได้กำหนดค่าอะไร เพราะเนื่องจากเป็นในส่วน title และ ชื่อคอลั่ม

ต่อมา เริ่มวนลูป โดยใช้ แท็ก loop , items ในแท็กคือ ข้อมูล collection ของ Student ชือ studentList var เหมือนกับประกาศ variable ให้ student = studentList เวลาเรียกใช้ จะได้สั้นลง varType คืออ้างอิงคลาสของ Student(ต้องใช้ ชื่อ package ด้วย)

ต่อมาภายใน section startRow=”2&#8243; endRow=”2&#8243; กำหนดให้ค่าจากแถวที่ 2 คอลั่ม1 ให้ไปเก็บไว้ที่ field id ในคลาส Student , คอลั่มที่ 2 กำหนดไว้ที่ field name , field lastName , field address ตามลำดับ

loopbreakcondition คือ ใช้เพื่อจบการวนลูป โดยใส่เงื่อนไขคือ เมื่อเจอคำว่า -STOP- จะสิ้นสุดการทำงานของโปรแกรม

สร้างคลาส MainApp

ทำการสร้างคลาส MainApp.java
โดยใช้ do loop และปริ้นเมนู ให้เลือก ว่าจะทำการ อ่านไฟล์ excel หรือเขียนไฟล์ excel
หากเลือก ข้อ 1 ก็จะไปเรียก เมธอด jXLSWriter() หากเลือกข้อ 2 ก็จะเรียก เมธอด jXLSReader()


  Code
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class MainApp {

public static void main(String[] args) {
boolean state = true;
Scanner scan = new Scanner(System.in);
do{
System.out.println("Choose option below ");
System.out.println("1 : jXLS Writer");
System.out.println("2 : jXLS Reader");
switch (scan.nextInt()) {
case 1:
jXLSWriter();
state = false;
break;
case 2:
jXLSReader();
state = false;
break;
default:
System.out.println("Please choose only 1 or 2");
}

}while(state);
scan.close();
}
}



เพิ่มเมธอด reader

สร้าง เมธอด reader ใน class MainApp เพื่อไว้เรียก class JxlsReader


  Code
public static void jXLSReader () {
List studentList = new ArrayList();
Map<String, Object> model = new HashMap<String, Object>();
model.put("studentList", studentList);

JxlsReader reader = new JxlsReader();
reader.importFile(model);

for (Student stu : studentList) {
System.out.println( stu.getId() + " " +
stu.getName() + " " +
stu.getLastName() + " " +
stu.getAddress());
}
}


เพิ่มเมธอด writer


เพิ่ม method writer ในคลาส MainApp( ตัวนี้นำมาจากบทความก่อน เรื่องการเขียนข้อมูลจากไฟล์ excel)


  Code
public static void jXLSWriter () {
//Initial student
Student student = new Student(1,"Somsak","Somboon","Bangkok");
Student student2 = new Student(2,"Peter","Ayothaya","ChiangMai");
Student student3 = new Student(3,"Jack","Sparrow","savvy");

//Create List of student
List studentList = new ArrayList();
studentList.add(student);
studentList.add(student2);
studentList.add(student3);

Map<String, Object> modelList = new HashMap<String, Object>();
modelList.put("student", studentList);

JxlsReport jxls = new JxlsReport();
String status = jxls.export(modelList);
System.out.println(status);
}



ใส่ข้อมูลให้ excel

สุดท้าย เพิ่ม data ให้กับไฟล์ excel ที่จะทำการอ่าน โดยอ้างอิงตำแหน่ง row column จากการคอนฟิคที่ student.xml
และตั้งชื่อว่า Student-Import.xls และเก็บไว้ที่ path /res/template ภายในโปรเจ็ค

รับทำเว็บ  webUB.com

แสดงผลลัพธ์

เมื่อรันโปรแกรม


  Code
Choose option below
1 : jXLS Writer
2 : jXLS Reader





  Code
1
Complete to Write Excel File.
Location : /home/devsharing/Exercises/Devx/JXLS/JxlsExample/res/report/StudentCompleted.xls





  Code
2
Jan 19, 2013 7:02:20 PM net.sf.jxls.reader.XLSReaderImpl readSheet
INFO: Processing sheet Student
1 Leonel Messi Argentina
2 Cristiano Ronaldo Portugal
3 Radamel Falcao Columbia
4 Zinedine Zidane France
5 Teerasil Dangda Thailand



สรุป

นี่เป็นเพียงแค่ตัวอย่างการใช้งาน jXLS Reader และ jXLS Writer อย่างง่ายครับ ขั้นตอนจริงๆเมื่อนำไปใช้งาน อาจจะอยู่ในรูปแบบ Web Application และรับส่งข้อมูลผ่าน database เช่น MySQL , ProsgeSQL ครับโดยคลาส JxlsWriter อาจจะไปดึงข้อมูลจาก database มาเขียน เช่นเดียวกัน คลาส JxlsReader อ่านข้อมูลจาก excel เมื่อนำไปใช้งานจริงๆ ไม่ได้กำหนด path ภายในโปรเจ็คแบบนี้ อาจจะต้องอยู่ในรูปแบบ file upload ใน html ครับ ให้ผู้ใช้ ทำการอัพโหลด ไฟล์ excel ที่ฟอแมตตรงกับที่ได้ตั้งค่าไว้ student.xml

refer: http://devsharing.com/2013/java/java-jxls-file-reader/
Download Source Code : JxlsExample 2013-Jan-19

Short URL click!
<< กลับคืน : เข้าชม 8,894 ครั้ง : ขึ้นไปด้านบน

รับทำเว็บไซต์ รับสร้างเว็บไซต์ รับออกแบบเว็บ รับเขียนเว็บ รับสอนทำเว็บ รับเช่า hosting รับเช่าพื้นที่เว็บไซต์ จดชื่อเว็บ รับโปรโมทเว็บไซต์ รับดูแลเว็บ SiteMap
สปริงเกอร์http://www.xn--22c2c4blb9n.xn--o3cw4h/