使用Workbook类实现数据库表格导出 1首先创建一个表格有3个版本 Workbook workbook = new HSSFWorkbook (); //这是03年以前的版本 格式是xls Workbook workbook = new XSSFWorkbook (); //这是07年以后的版本 格式
使用Workbook类实现数据库表格导出
1首先创建一个表格有3个版本
Workbook workbook=new HSSFWorkbook(); //这是03年以前的版本 格式是xlsWorkbook workbook=new XSSFWorkbook(); //这是07年以后的版本 格式是xlsxWorkbook workbook=new SXSSFWorkbook(); //这是07年以后大数据的加快版 格式是xlsx2基础代码的意思(07年的为例子)
public void testWrite07() throws Exception {
String PATH="D:\\Learning\\SpringMVC\\com.mac\\src\\main\\java\\";
//1.创建一个工作蒲07
Workbook workbook=new XSSFWorkbook();
//2.创建一个工作表
Sheet sheet = workbook.createSheet("第一次希望成功");
//3.创建一个行,从零开始
Row row1=sheet.createRow(0); //第一行
Cell cell11 = row1.createCell(0);
cell11.setCellValue("第一行的第一个数据");
Cell cell12 = row1.createCell(1);
cell12.setCellValue("第一行的第二个数据");
Row row2 = sheet.createRow(1); //第二行
Cell cell21 = row2.createCell(0);
cell21.setCellValue("第二行的第一个数据");
Cell cell22 = row2.createCell(1);
String s = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
cell22.setCellValue(s);
//生成一张表(IO流) 03版本就是xls结尾
FileOutputStream fileOutputStream = new FileOutputStream(PATH+ "test07.xlsx");
//数据写入
workbook.write(fileOutputStream);
//关闭流
fileOutputStream.close();
System.out.println("文件生成完毕");
}
简单的解释一下:这个代码以后就是生成了一个名字叫test07.xlsx表格,存放的路劲在
PATH="D:\\Learning\\SpringMVC\\com.mac\\src\\main\\java\\这个目录下面,它的表名叫“第一次希望成功“。没看明白的多看几遍就理解了。 忘记放依赖了,这三个包就全放进去就对了
<dependencies><dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
</dependencies>
3,实际中怎么去遍历一个数据库的数据然后放在Excel中呢
这里我就已一个springboot Controller层的实际的代码为例了
(tags = "生成一个学生信息Excel表的类")public class ExcelController {
private StudentService studentService;
//存放Excel的地址
String PATH="D:\\Learning\\SpringMVC\\yq_go\\src\\main\\java\\";
("/creatStudentExcel")
public String creatStudentExcel(){
//把你数据库的数据全部查询出来
List<Student> students = studentService.queryAll();
//创建一个簿,创建表
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("学生疫情信息统计表");
//写入数据,
System.out.println(students.size());
System.out.println(students);
//标志数据,控制下面这个赋值循环结束的
int rowNum=0;
//遍历数据,我们用标志数据来控制行,然后每行的列我们就可以自己手动控制来赋值上去
for (Student student : students) {
//创建一个行
Row row = sheet.createRow(rowNum);
//下面的所有都是在这个行上面加列
Cell cell1 = row.createCell(0);
cell1.setCellValue(student.getDate());
Cell cell2 = row.createCell(1);
cell2.setCellValue(student.getStudentID());
Cell cell3 = row.createCell(2);
cell3.setCellValue(student.getFullName());
Cell cell4 = row.createCell(3);
cell4.setCellValue(student.getHealthCode());
Cell cell5 = row.createCell(4);
cell5.setCellValue(student.getTripCode());
Cell cell6 = row.createCell(5);
cell5.setCellValue(student.getTemperature());
Cell cell7 = row.createCell(6);
cell5.setCellValue(student.getCellPhoneNumber());
//控制退出
rowNum++;
if (rowNum>students.size()){ break;}
}
//真正创建表,并且把数据写进去
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "学生疫情信息统计表.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
return "后台Excel更新成功";
}
}
可以根据上面这个类去理解修改自己的类就OK了。 其他几个版本的你只需要把我最上面的那个版本换上去就可以了。注意要使用加速类在最后加上,放在流关闭的前面一行
//关闭零时文件((SXSSFWorkbook)workbook).close();
4这里放几个无聊的测试代码给你们玩玩
package com.mac;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;
import java.io.FileOutputStream;
public class EccelWriteTest {
String PATH="D:\\Learning\\SpringMVC\\com.mac\\src\\main\\java\\";
/*
* 03年的
* */
public void testWrite03() throws Exception {
//1.创建一个工作蒲
Workbook workbook=new HSSFWorkbook();
//2.创建一个工作表
Sheet sheet = workbook.createSheet("第一次希望成功");
//3.创建一个行,从零开始
Row row1=sheet.createRow(0);
Cell cell11 = row1.createCell(0);
cell11.setCellValue("第一行的第一个数据");
Cell cell12 = row1.createCell(1);
cell12.setCellValue("第一行的第二个数据");
//第二行
Row row2 = sheet.createRow(1);
Cell cell21 = row2.createCell(0);
cell12.setCellValue("第二行的第1个数据");
Cell cell22 = row2.createCell(1);
cell22.setCellValue("第二行的第2个数据");
Cell cell23 = row2.createCell(2);
String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
cell23.setCellValue(time);
//生成一张表(IO流) 03版本就是xls结尾
FileOutputStream fileOutputStream = new FileOutputStream(PATH+ "test03.xls");
//数据写入
workbook.write(fileOutputStream);
//关闭流
fileOutputStream.close();
System.out.println("文件生成完毕");
}
/*
* 07年的
* */
public void testWrite07() throws Exception {
//1.创建一个工作蒲07
Workbook workbook=new XSSFWorkbook();
//2.创建一个工作表
Sheet sheet = workbook.createSheet("第一次希望成功");
//3.创建一个行,从零开始
Row row1=sheet.createRow(0); //第一行
Cell cell11 = row1.createCell(0);
cell11.setCellValue("第一行的第一个数据");
Cell cell12 = row1.createCell(1);
cell12.setCellValue("第一行的第二个数据");
Row row2 = sheet.createRow(1); //第二行
Cell cell21 = row2.createCell(0);
cell21.setCellValue("第二行的第一个数据");
Cell cell22 = row2.createCell(1);
String s = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
cell22.setCellValue(s);
//生成一张表(IO流) 03版本就是xls结尾
FileOutputStream fileOutputStream = new FileOutputStream(PATH+ "test07.xlsx");
//数据写入
workbook.write(fileOutputStream);
//关闭流
fileOutputStream.close();
System.out.println("文件生成完毕");
}
/*
* 03的大数据
* */
public void testWrite03BigData() throws Exception {
long begin = System.currentTimeMillis();
//创建一个簿
Workbook workbook=new HSSFWorkbook();
//创建表
Sheet sheet = workbook.createSheet();
//写入数据
for (int rowNum = 0; rowNum <65536 ; rowNum++) {
Row row = sheet.createRow(rowNum);
for (int cellNum = 0; cellNum < 10; cellNum++) {
Cell cell = row.createCell(cellNum);
cell.setCellValue(cellNum);
}
}
System.out.println("大数据03执行完毕");
//写入文件
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite03BigData.xls");
workbook.write(fileOutputStream);
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println((double) (end-begin)/1000);
}
/*
* 07的大数据
* */
public void testWrite07BigData() throws Exception {
long begin = System.currentTimeMillis();
//创建一个簿
Workbook workbook=new XSSFWorkbook();
//创建表
Sheet sheet = workbook.createSheet();
//写入数据
for (int rowNum = 0; rowNum <65536 ; rowNum++) {
Row row = sheet.createRow(rowNum);
for (int cellNum = 0; cellNum < 10; cellNum++) {
Cell cell = row.createCell(cellNum);
cell.setCellValue(cellNum);
}
}
System.out.println("大数据03执行完毕");
//写入文件
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite07BigData.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println((double) (end-begin)/1000);
}
/*
* 07的大数据加速
* */
public void S() throws Exception {
long begin = System.currentTimeMillis();
//创建一个簿
Workbook workbook=new SXSSFWorkbook();
//创建表
Sheet sheet = workbook.createSheet();
//写入数据
for (int rowNum = 0; rowNum <65536 ; rowNum++) {
Row row = sheet.createRow(rowNum);
for (int cellNum = 0; cellNum < 10; cellNum++) {
Cell cell = row.createCell(cellNum);
cell.setCellValue(cellNum);
}
}
System.out.println("大数据03执行完毕");
//写入文件
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite07BigDataS.xlsx");
workbook.write(fileOutputStream);
//关闭零时文件
((SXSSFWorkbook)workbook).close();
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println((double) (end-begin)/1000);
}
}