Spring-boot : อ่านค่าใน Excel แล้ววิธีอัพลง Database

บทความนี้จะเป็นการเขียน Java กับ Library ของ jExcelAPI เพื่ออ่านข้อมูลจาก Excel ที่อยู่ในรูปแบบของ Cell และ Column มาแสดงผลออกทางหน้าจอ แล้วจากนั้นนำไปเก็บบันทึกลงใน Database ของเรา

สิ่งที่จะต้องมี

  1. IDE : ของผมใช้เป็น Spring tool suite สามารถดาวน์โหลดได้ที่นี่ : https://spring.io/tools หรือใครจะใช้เป็นตัวอื่นก็ได้ครับแล้วแต่ความถนัด
    2. JDK สามารถดาวน์โหลดได้ที่นี่ : Java SE Development Kit 8
    3. DBMS ของผมใช้เป็น MySQL

โดยจะใช้ Maven ในการดาวน์โหลด Dependencies
ก่อนอื่นให้ new project มาก่อนครับ image title เลือก Dependencies ที่ต้องการใช้งาน image title กด ** 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 ผมมีโครงสร้างแบบนี้ image title image title
จากนั้นให้เราเตรียมไฟล์ Excel ที่เราต้องการจะอ่าน ต้องเป็น นามสกุล .xls เท่านั้นนะครับ
ข้อมูลในไฟล์ excel image title

จากนั้นสร้าง packet และ class ตามนี้ image title

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 image title

ลองรันด้วย web browser image title สั่งเกตุทางด้านขวามือ จะปรากฏข้อมูลใน excel ของเรา

ลองเช็คดูว่า update เข้าไปยัง database ของเราหรือยัง image title จะเห็นว่าข้อมูลถูกเพิ่มแล้ว

คราวนี้เพื่อน ๆ ก็สามารถนำไปประยุกต์ใช้ได้ตามต้องการได้เลยครับ

ขอขอบคุณเว็บ http://www.thaicreate.com/java/java-excel-read.html
และพี่ ๆ Aaron , Beer Leo ที่คอยให้คำปรึกษาครับ ^^