Tải bản đầy đủ (.docx) (38 trang)

Xử lí bảng tính execl với java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.19 MB, 38 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
------------

BÀI TẬP LỚN
LẬP TRÌNH JAVA
Đề tài: Xử lý bảng tính Excel với Java
Giáo viên hướng dẫn:

Ths Hà Quang Huy

Lớp:

202020503175008

Nhóm sinh viên thực hiện:

18

Sinh viên: Nguyễn Anh Minh

Hà Nội: 2021

1


Mục lục

LỜI MỞ ĐẦU
Java (phiên âm Tiếng Việt: "Gia-va") là một ngơn ngữ lập trình hướng đối
tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là


ngơn ngữ lập trình có mục đích chung cho phép các nhà phát triển ứng dụng viết một
lần, chạy ở mọi nơi (WORA), nghĩa là mã Java đã biên dịch có thể chạy trên tất cả
các nền tảng hỗ trợ Java mà không cần biên dịch lại. Các ứng dụng Java thường được
biên dịch thành bytecode có thể chạy trên bất kỳ máy ảo Java (JVM) nào bất kể kiến
trúc máy tính bên dưới. Cú pháp của Java tương tự như C và C++, nhưng có ít cơ
sở cấp thấp hơn các ngôn ngữ trên. Java runtime cung cấp các khả năng động (chẳng
hạn như phản ánh và sửa đổi mã thời gian chạy) thường không có sẵn trong các ngơn
ngữ biên dịch truyền thống. Tính đến năm 2019 Java là một trong những ngôn ngữ
lập trình phổ biến nhất được sử dụng theo GitHub, đặc biệt cho các ứng dụng
web máy khách-máy chủ, với 9 triệu nhà phát triển đã được báo cáo.
Bên cạnh đó, tin học văn phịng cũng ngày càng đóng một vai trò cực kỳ quan
trọng trong đời sống hằng ngày và trong lao động sản xuất, đặc biệt là các phần mềm
tin học văn phịng của Microsoft(Word, Excel, Powerpoint…). Vì thế chúng em xin
được báo cáo bài tìm hiểu đề tài xử lý bảng tính Excel – phần mềm bảng tính phổ
biến nhất thế giới bằng ngôn ngữ Java.
Trước hết bọn em xin chân thành cảm ơn thầy giáo – ThS. Hoàng Quang Huy,
người đã hướng dẫn cho em trong suốt thời gian qua. Thầy đã định hướng đi cho
2


chúng em, để chúng em hoàn thành tốt nhiệm vụ. Một lần nữa em chân thành cảm ơn
thầy và chúc thầy cùng gia đình dồi dào sức khoẻ.
Bên cạnh đó xin cảm ơn tất cả các bạn trong nhóm,lớp đã giúp đỡ, dìu dắt bọn
mình trong suốt quá trình học tập. Tất cả các mọi người đều nhiệt tình giúp đỡ nhau,
bọn mình ln ln lắng nghe các ý kiến giúp đề tài được hồn thiện hơn.
Tuy nhiên vì kiến thức chun mơn cịn hạn chế và chúng em cịn thiếu nhiều
kinh nghiệm thực tiễn nên nội dung của báo cáo khơng tránh khỏi những thiếu xót,
chúng em rất mong nhận sự góp ý, chỉ bảo thêm của thầy để báo cáo này được hoàn
thiện hơn.


3


CHƯƠNG I. GIỚI THIỆU VỀ APACHE POI
1. APACHE POI là gì ?

Apache POI(Poor Obfuscation Implementation) là một thư viện java mã nguồn
mở để tạo và thao tác các định dạng tệp khác nhau dựa trên Microsoft Office. Sử
dụng POI, người ta có thể thực hiện các thao tác tạo, sửa đổi và hiển thị / đọc trên
các định dạng tệp văn bản của Microsoft. Tuy nhiên Java không cung cấp hỗ trợ tích
hợp để làm việc với các tệp văn bản đó, vì vậy chúng ta cần tìm kiếm các API
nguồn mở cho công việc. Apache POI cung cấp Java API để thao tác với các định
dạng tệp khác nhau dựa trên tiêu chuẩn Office Open XML (OOXML) và tiêu chuẩn
OLE2 của Microsoft. Các bản phát hành Apache POI có sẵn theo Giấy phép Apache
(V2.0).
2. Một số tính năng quan trọng
-

APACHE POI cung câp xử lý dựa trên luồng phù hợp với các tệp lớp và

-

yêu cầu ít bộ nhớ hơn.
APACHE có khả năng xử lý cả hai định dạng XLSX, XLS.
Apache POI chứa triển khai HSSF cho định dạng tệp Excel ’97 (-2007), tức

-

là XLS.
Apache POI HSSF và XSSF API cung cấp các cơ chế để đọc, ghi hoặc sửa


-

đổi bảng tính excel.
Apache POI cũng cung cấp SXSSF API là một phần mở rộng của XSSF để

-

làm việc với các trang tính excel rất lớn.
SXSSF API yêu cầu ít bộ nhớ hơn và phù hợp khi làm việc với các bảng

-

tính rất lớn và bộ nhớ heap bị hạn chế.
Có hai mơ hình để lựa chọn - mơ hình sự kiện và mơ hình người dùng. Mơ
hình sự kiện u cầu ít bộ nhớ hơn vì tệp excel được đọc bằng mã thông
báo và yêu cầu xử lý chúng. Mơ hình người dùng hướng đối tượng hơn và

-

dễ sử dụng.
Apache POI cung cấp hỗ trợ tuyệt vời cho các tính năng bổ sung của excel
như làm việc với Cơng thức, tạo kiểu ô bằng cách tô màu và đường viền,
4


phông chữ, đầu trang và chân trang, xác thực dữ liệu, hình ảnh, siêu liên
kết, v.v.
3. Các thành phần sử dụng trong APACHE POI
- HSSF (Horrible Spreadsheet Format): dùng để đọc hoặc ghi các trang

-

tính theo các định dạng XLS.
XSSF (XML Spread Sheet Format): dùng để đọc hoặc ghi các trang tính

-

theo các định dạng XLSX.
POIFS (Poor Obfuscation Implementation File System) : Thành phần này
là yếu tố cơ bản của tất cả các yếu tố POI khác. Nó được sử dụng để đọc

-

các tệp khác nhau một cách rõ ràng.
HWPF (Horrible Word Processor Format): dùng để đọc hoặc ghi các

-

trang Word theo định dạng doc, docx.
HSLF (Horrible Slide Layout Format): dùng để đọc hoặc ghi các trang

Presentation theo định dạng ppt, pttx.
- …
4. Cài đặt môi trường
Nếu đang làm việc trên một Project Maven thì phải thêm POI dependency vào
file pom.xml đoạn code sau:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>

</dependency>
Để thêm vào Eclipse: đi theo Window -> Show view -> Other -> Maven ->
Maven Repositories.
Nếu Không dùng Maven thì vào trang chủ POI để tải xuống. Sau đó thêm
external JAR file cho Project đó.
Hướng dẫn cài đặt APACHE POI cho Eclipse bằng cách thêm thư viện ngoài:
B1: Tạo 1 Project và download tại poi.apache.org

5


B2: Sau khi tạo, mở Property của project, chọn phần Library

6


B3: Bấm vào
B4: Browse và add tất cả thư viện APACHE POI vào Classpath, bấm Apply.

Như vậy là quá trình cài đặt mơi trường đã hồn thành

7


CHƯƠNG II. SỬ DỤNG POI TRONG JAVA
1.

Nhắc lại một số khái niệm chính của phần mềm bảng tính Excel
1.1.
Workbook


Workbook chính là một cửa sổ làm việc của file Excel, nó chứa một hoặc
nhiều worksheet.
1.2.

Worksheet

8


Worksheet chính là một trang tính, mỗi một trang tính đều có tên và chỉ thuộc
một Workbook duy nhất.
1.3.

Row, Collumn
Row và Column chính là hàng và cột của 1 trang tính.

1.4.

Cell
Cell là một trang tính, được xác định bởi cột và hàng, ví dụ như ơ a1, a2,d7.

9


2.



Các Interface cà Class của thư viện APACHE POI


Workbook: Interface đại diện cho 1 Excel workbook. XSSFWorkbook và
SXSSFWorkbook là những class implement từ nó.
10






Sheet: Interface đại diện cho 1 Excel worksheet. XSSFSheet và SXSSFSheet
là các class implement từ Sheet.
Row: Đại diện cho một cột trong Excel worksheet. Có XSSFCell và
SXSSFCell là 2 implement class.
CellStyle: Đại diện cho style, format của một cột trong Excel file.
XSSFCellStyle là một implement class chúng ta sẽ thao tác trực tiếp với nó.

11


CHƯƠNG III. LẬP TRÌNH JAVA VỚI POI
1. Một số phương thức của
1.1.
XSSFWorkbook
- Constructor

các class XSSFWorkbook, XSSFSheet, Row, Cell

Construtor
XSSFWorkbook()


Mô tả
Khởi tạo 1 SpreadsheetML workbook
mới.
XSSFWorkbook(java.io.File file)
Khởi tạo 1 đối tượng XSSFWorkbook
từ 1 file cho sẵn.
XSSFWorkbook(java.io.FileInputStre Constructs a XSSFWorkbook object,
am is)
by buffering the whole stream into
memory
and
then
opening
an OPCPackage object for it.
XSSFWorkbook(OPCPackage pkg)
Khởi tạo 1 đối tượng XSSFWorkbook
từ 1 đối OpenXML4J Package, xem
thêm />XSSFWorkbook(PackagePart part)
Khởi tạo 1 đối tượng XSSFWorkbook
Package Part.
XSSFWorkbook(java.lang.String
Khởi tạo 1 đối tượng XSSFWorkbook
path)
với đường dẫn
XSSFWorkbook(XSSFWorkbookTyp Khởi tạo 1 SpreadsheetML workbook
e workbookType)
mới.
- Một số Methods hay dùng
Modifier and Type

XSSFSheet
XSSFSheet
void
XSSFFont
int

Method
createSheet(int sheetNum);
khởi tạo 1 sheet mới
createSheet(int sheetNum, String
name);
Khởi tạo 1 sheet mới(num, name);
close();
Đóng file
createFont();
Tạo font
addPicture(byte [] pictureData, int
format);
Thêm dữ liêu ảnh dạng byte

12



1.2.

XSSFWorksheet
- Constructor
Contructor


Mô tả

protected XSSFSheet()

Khởi tạo 1 Sheet mới

protected
path)

XSSFSheet(PackagePart Khởi tạo 1 sheet từ 1 package và
relationship có sẵn
1.1.1.Một số method hay dùng
Modifier and Type

java.lang.String

getSheetName();
Trả về String sheet name
getTopRow();
Trả về giá trị dịng đầu tiên
createRow(int rownum);
Tạo row
getWorkbook();
Trả về workbook cha

short
void
XSSFWorkbook
1.3.


Method

XSSFRow
1.1.2.Constructor
Contructor

Mơ tả

protected
XSSFRow(org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow row, XSSFSheet she
et)

Khởi tạo 1
Row mới

1.1.3.Một

số methods hay dùng

Modifier and Type
XSSFCell
short
void
XSSFCellStyle
1.4.

Method
createCell(int cellIndex);
Tạo 1 cell
getHeight();

Trả về độ cao hiệ tại row
removeCell(Cell cell);
Xóa cell đã tạo
getCellStyle()
Trả về XSSFCellStyle của cả Row

XSSFCell
13


1.1.4.Constructor

Contructor

Mô tả

XSSFCell(XSSFRow row,
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell ce
ll)

1.1.5.Một

Khởi tạo 1 Cell mới

số methods hay dùng

Modifier and Type
void

setCellValue(boolean bool)

Thiết Đặt giá trị boolean cell
setCellValue(int value);
Thiết đặt giá trị int cho cell
setCellStyle
Thiết đặt dang style
getStringCellValues()
trả về giá trị String của cell

void
void
String

2.

Method

Tạo và ghi file excel đầu tiên

File và set giá trị file excel
Để tạo workbook rất đơn giản, chúng ta cần thực hiện những bước sau đây :
B1. Tạo 1 Workbook.
B2. Tạo 1 Worksheet cho workbook vừa tạo.
B3. Tạo Row cho worksheet vừa tạo.
B4. Tạo Cell cho Row vừa tạo.
B5. Gán giá trị cho cell đó.
Chương trình ví dụ:
//Trước hết import các thư viện
import
import
import

import

java.io.File;
java.io.FileNotFoundException;
java.io.FileOutputStream;
java.io.IOException;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
14


import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class test {
public static void main(String[] args) {
// Tạo 1 workbook
XSSFWorkbook workbook = new XSSFWorkbook();
// Tạo 1 worksheet từ workbook vừa tạo
XSSFSheet sheet = workbook.createSheet("Sheet1");
// Tạo 1 row (hàng) tại vị trí 0
Row row = sheet.createRow(0);
// Tạo 1 cell (ơ) tại vị trí 0 của row
Cell cell = row.createCell(0);
// Gán giá trị cho cell đó
cell.setCellValue("My first Excel");
// Như vậy tại cell[0] của row[0] hay cách khác tại ô vị trí A1 sẽ có
giá trị dạng String "My First Excel"
try {
FileOutputStream fos = new FileOutputStream(new File("My

First Excel Program.xlsx"));
workbook.write(fos);
System.out.println("Ghi thành Cơng");
} catch (IOException e) {
e.printStackTrace();
}
}
}

Kết quả chạy chương trình:

15


Đọc và hiển thị file Excel
Ta sẽ tiến hành đọc file vừa tạo ở trên :
package BTL;
import
import
import
import

java.io.File;
java.io.FileInputStream;
java.io.FileNotFoundException;
java.io.IOException;

import
import
import

import

org.apache.poi.ss.usermodel.Cell;
org.apache.poi.ss.usermodel.Row;
org.apache.poi.xssf.usermodel.XSSFSheet;
org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Read {
public static void main(String[] args) throws IOException {
// tạo luồng file đầu vào
FileInputStream fis = new FileInputStream(new File("My First Excel
Program.xlsx"));
// Tạo 1 XSSFWorkbook có đầu vào
XSSFWorkbook workbook = new XSSFWorkbook(fis);
// Lấy sheet tại vị trí 0
XSSFSheet sheet = workbook.getSheetAt(0);
16


// Lấy dịng tại vị trí 0
Row row = sheet.getRow(0);
// Lấy giá trị cell tại vị trí 0
Cell cell = row.getCell(0);
String getString = cell.toString();
System.out.println(getString);
}
}

Kết quả chạy chương trình:
My first Excel

3.

Một số kỹ thuật cơ bản trong Excel với APACHE POI
3.1. Set font chữ cho workbook trong java bằng APACHE POI

import
import
import
import
import

java.io.File;
java.io.FileNotFoundException;
java.io.FileOutputStream;
java.io.IOException;
java.io.File;

import
import
import
import
import
import

org.apache.poi.ss.usermodel.Cell;
org.apache.poi.ss.usermodel.CellStyle;
org.apache.poi.ss.usermodel.Font;
org.apache.poi.ss.usermodel.Row;
org.apache.poi.xssf.usermodel.XSSFSheet;
org.apache.poi.xssf.usermodel.XSSFWorkbook;


public class testFont {
public static void main(String[] args) {
XSSFWorkbook workbook =new XSSFWorkbook();
//Tạo font cho workbook
Font font = workbook.createFont();
font.setFontName("Times New Romans");
font.setBold(true);
font.setItalic(true);
//Tạo Style
CellStyle style = workbook.createCellStyle();
style.setFont(font);//Thêm font vào cho style
//Tạo Sheet
XSSFSheet sheet = workbook.createSheet("Test");
//Tạo row
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Chúc thầy và gia đình mạnh khỏe!");
cell.setCellStyle(style);
//xuất file
try {
17


FileOutputStream fos = new FileOutputStream(new
File("testFont.xlsx"));
workbook.write(fos);
} catch (IOException e) {
e.printStackTrace();
}

}
}
-

3.2.

Kết quả chạy:

Tô màu chữ và tô màu ô trong Excel

import
import
import
import
import
import
import
import
import
import
import
import

java.io.File;
java.io.FileNotFoundException;
java.io.FileOutputStream;
java.io.IOException;
org.apache.poi.ss.usermodel.IndexedColors;
org.apache.poi.ss.usermodel.Cell;
org.apache.poi.ss.usermodel.CellStyle;

org.apache.poi.ss.usermodel.Font;
org.apache.poi.ss.usermodel.Row;
org.apache.poi.xssf.usermodel.XSSFSheet;
org.apache.poi.xssf.usermodel.XSSFWorkbook;
org.apache.poi.ss.usermodel.FillPatternType;

public class testStyleRow {
public static void main(String[] args) {
18


XSSFWorkbook workbook = new XSSFWorkbook();
// Tạo font cho workbook
Font font = workbook.createFont();
font.setFontName("Times New Romans");
font.setBold(true);
font.setItalic(true);
font.setColor(IndexedColors.RED1.getIndex());
// Tạo Style
CellStyle style = workbook.createCellStyle();
style.setFont(font);// Thêm font vào cho style
style.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());//
Lấy giá trị index của màu vàng;
style.setFillPattern(FillPatternType.DIAMONDS);// Lấy kiểu Pattern
diamond
// Tạo Sheet
XSSFSheet sheet = workbook.createSheet("Test");
// Tạo row
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);

cell.setCellValue("Chúc thầy và gia đình mạnh khỏe!");
cell.setCellStyle(style);
// xuất file
try {
FileOutputStream fos = new FileOutputStream(new
File("teststyle.xlsx"));
workbook.write(fos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Kết quả chạy:

19


3.3.

Fomula- Công thức trong excel

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import
import
import
import

import
import

org.apache.poi.ss.usermodel.Cell;
org.apache.poi.ss.usermodel.CellType;
org.apache.poi.ss.usermodel.Row;
org.apache.poi.ss.util.CellReference;
org.apache.poi.xssf.usermodel.XSSFSheet;
org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class testFormula {
public static void main(String[] args) {
// Tạo 1 workbook
XSSFWorkbook workbook = new XSSFWorkbook();
// Tạo 1 worksheet
XSSFSheet sheet = workbook.createSheet("Test Formula");
// Tạo row tại vị trí 0
Row row = sheet.createRow(0);
//Tạo cell tại vị trí 0 của row
Cell cell = row.createCell(0);
//Gán giá trị
cell.setCellValue(431);
// tạo row tại vị trí 1
row = sheet.createRow(1);
// tạo cell tại vi trí 0 của row
cell = row.createCell(0);
cell.setCellValue(542);
20



//Tạo row tại vị trí 2
row = sheet.createRow(2);
//tạo cell với kiểu formula (Công thức)
cell = row.createCell(0, CellType.FORMULA);
cell.setCellFormula("sum(a1:a2)");
try {
FileOutputStream fos = new FileOutputStream(new
File("testformula.xlsx"));
workbook.write(fos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

Sau khi chạy, kết quả:

4.

Ô A1 và A2 chứa hai giá trị, trong khi đó ơ A3 là kiều Formula (Cơng thức).
Các kỹ thuật nâng cao
4.1. Tạo và ghi một list đối tượng
Trong thực tế, ta không thể ghi một file excel một cách bừa bài mà chúng ta
cần phải ghi một cách tuần tự, các bước rõ ràng. Sau đây là một ví dụ:
21


Tạo một class Student


public class Student {
private String studentId;
private String firstName;
private String lastName;
private byte age;
private float mathPoints;
private float physicsPoints;
private float chemistryPoints;
// Constructor
public Student() {
}
public Student(String studentId, String firstName, String lastName, byte
age, float mathPoints, float physicsPoints,
float chemistryPoints) {
this.studentId = studentId;
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.mathPoints = mathPoints;
this.physicsPoints = physicsPoints;
this.chemistryPoints = chemistryPoints;
}
// Getter methods
public String getStudentId() {
return studentId;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {

return lastName;
}
public byte getAge() {
return age;
}
public float getMathPoints() {
22


return mathPoints;
}
public float getPhysicsPoints() {
return physicsPoints;
}
public float getChemistryPoints() {
return chemistryPoints;
}
// Setter methods
public void setStudentId(String studentId) {
this.studentId = studentId;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setAge(byte age) {
this.age = age;
}

public void setMathPoints(float mathPoints) {
this.mathPoints = mathPoints;
}
public void setPhysicsPoints(float physicsPoints) {
this.physicsPoints = physicsPoints;
}
public void setChemistryPoints(float chemistryPoints) {
this.chemistryPoints = chemistryPoints;
}
// Other methods
@Override
public String toString() {
return "Student [studentId=" + studentId + ", firstName=" +
firstName + ", lastName=" + lastName + ", age="
+ age + ", mathPoints=" + mathPoints + ",
physicsPoints=" + physicsPoints + ", chemistryPoints="
+ chemistryPoints + "]";
23


}
}

24


Ghi danh sách vừa tạo vào Excel
CODE:
import
import

import
import
import
import
import
import
import

java.io.File;
java.io.FileOutputStream;
java.io.IOException;
java.util.ArrayList;
java.util.List;
org.apache.poi.ss.usermodel.Cell;
org.apache.poi.xssf.usermodel.XSSFSheet;
org.apache.poi.xssf.usermodel.XSSFWorkbook;
org.apache.poi.ss.usermodel.Row;

/**
* Hàm sinh ngẫu nhiên một List students
*
* @param size
* @return
*/
public static List<Student> generateArrayStudent(int size) {
// Tạo danh sách id học sinh, tên, tên đệm, điểm các môn
String[] studentId = { "a", "ba", "c1", "a2", "e", "h", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "0", "A",
"a3", "c4", "abc12", "abc11", "abc13", "abc14", "11" };
String[] firstName = { "Anh", "Chi", " Hùng", "Linh", "Huy", "Hòa",

"Trang", "Huyền", "Thúy", "Trang", "Hưng",
"Hùng", "Tài", "Tồn", "Bình", "Long", "Vũ" };
String[] lastName = { "Nguyễn", "Nguyễn Văn", "Dỗn", "Dỗn Chí",
"Phạm", "Trần", "Phạm", "Phạm Thị",
"Phạm Văn" };
// Danh sách trung gian
List<Student> list = new ArrayList<Student>();
// Sinh ngẫu nhiên
for (int i = 0; i < size; i++) {
// khởi tạo cho từng học sinh
list.add(new Student(studentId[(int) (Math.random() *
studentId.length)],
lastName[(int) (Math.random() * lastName.length)],
firstName[(int) (Math.random() * firstName.length)],
(byte) (Math.random() * 5 + 18),
(float) (Math.random() * 10), (float) (Math.random() *
10), (float) (Math.random() * 10)));
}
return list;
}
/**
* Hàm ghi Excel
25


×