บทความนี้จะเป็นการเขียน Java กับ Library ของ jExcelAPI เพื่ออ่านข้อมูลจาก Excel ที่อยู่ในรูปแบบของ Cell และ Column มาแสดงผลออกทางหน้าจอ แล้วจากนั้นนำไปเก็บบันทึกลงใน Database ของเรา
- IDE : ของผมใช้เป็น Spring tool suite สามารถดาวน์โหลดได้ที่นี่ : https://spring.io/tools หรือใครจะใช้เป็นตัวอื่นก็ได้ครับแล้วแต่ความถนัด
2. JDK สามารถดาวน์โหลดได้ที่นี่ : Java SE Development Kit 8
3. DBMS ของผมใช้เป็น MySQL
โดยจะใช้ Maven ในการดาวน์โหลด Dependencies
ก่อนอื่นให้ new project มาก่อนครับ
เลือก Dependencies ที่ต้องการใช้งาน
กด ** Finish**
แก้ไข pom.xml เพิ่ม dependencies jxl เข้าไปในส่วน dependencies configuration
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demoExcel</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ส่วนของ application.properties
server.port=80
spring.datasource.url=jdbc:mysql://localhost:3306/excel
spring.datasource.username=root
spring.datasource.password=toor
spring.datasource.test-while-idle=true
spring.datasource.validationQuery = SELECT 1
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5Dialect
โดยผมจะให้ server ทำงานใน port 80 และให้ทำการเชื่อมต่อกับ mysql ผ่าน jdbc โดยมี Schema ชื่อว่า excel
บรรทัดที่ 4 username ของ database เรา
บรรทัดที่ 5 password ของ database เรา
โดย Database ผมมีโครงสร้างแบบนี้
จากนั้นให้เราเตรียมไฟล์ Excel ที่เราต้องการจะอ่าน ต้องเป็น นามสกุล .xls เท่านั้นนะครับ
ข้อมูลในไฟล์ excel
จากนั้นสร้าง packet และ class ตามนี้
DemoExcelApplication.java
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoExcelApplication {
public static void main(String[] args) {
SpringApplication.run(DemoExcelApplication.class, args);
}
}
Products.java
package com.example.Product;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="product")
public class Products {
@Id @Column(name="id")
private String id;
@Column(name="name")
private String name;
@Column(name="price")
private String price;
public Products(String id, String name, String price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Products [id=" + id + ", name=" + name + ", price=" + price + "]";
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public Products() {
super();
}
}
ProductsPDO.java
package com.example.Product;
import javax.transaction.Transactional;
import org.springframework.data.repository.CrudRepository;
@Transactional
public interface ProductsPDO extends CrudRepository<Products, String>{
}
ExcelController.java
package com.example.ProductController;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.Product.Products;
import com.example.Product.ProductsPDO;
import jxl.Sheet;
import jxl.Workbook;
@Controller
public class ExcelController {
@Autowired
private ProductsPDO productsPDO;
Products products = new Products();
@RequestMapping("/")
@ResponseBody
public String excel() {
try {
String fileName = "F:\\exceltest.xls";
Workbook workbook = Workbook.getWorkbook(new File(fileName));
Sheet ws = workbook.getSheet(0);
List list = new ArrayList<>();
for (int i = 0; i < ws.getRows(); i++) {
String id = ws.getCell(0, i).getContents();
String name = ws.getCell(1, i).getContents();
String price = ws.getCell(2, i).getContents();
System.out.println("ID : " + id);
System.out.println("Name : " + name);
System.out.println("Price : " + price);
products = new Products(id, name, price);
list.add(products);
}
for (int i = 0; i < list.size(); i++) {
products = (Products) list.get(i);
productsPDO.save(products);
}
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
return "บันทึกสำเร็จ";
}
}
Run โดยคลิกขวาที่โปรเจคของเราและคลิก Run As -> Spring Boot App
ลองรันด้วย web browser สั่งเกตุทางด้านขวามือ จะปรากฏข้อมูลใน excel ของเรา
ลองเช็คดูว่า update เข้าไปยัง database ของเราหรือยัง
จะเห็นว่าข้อมูลถูกเพิ่มแล้ว
ขอขอบคุณเว็บ http://www.thaicreate.com/java/java-excel-read.html
และพี่ ๆ Aaron , Beer Leo ที่คอยให้คำปรึกษาครับ ^^