使用java将数据写入Excel中,并根据数据数量分在不同的sheet中
使用java将数据写入Excel中,并根据数据数量分在不同的sheet中
今天任务是将数据写入Excel中(数据直接写在main函数里),使用的开发平台是IDEA。目前的需求是将有限数量的数据,比如13个数据依次写入Excel中,每满五个就自动建一个sheet存入。
引入jar包
因为我们用的是IDEA的开发环境,无需导入外部jar包,只需要将jxl包的代码直接写入pom.xml中即可:
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.12</version>
</dependency>
```
## JAVA实现类的编写:
package com.bjsd.apps.bidding.service.impl;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class ExcelOperaation {
public void writeExcel(String path, List<String[]> list, String sheet, String[] title) {
try {
// 创建Excel工作薄
WritableWorkbook wwb = null;
// 新建立一个jxl文件
OutputStream os = new FileOutputStream(path);
wwb = Workbook.createWorkbook(os);
// 添加第一个工作表并设置第一个Sheet的名字
WritableSheet sheets = wwb.createSheet(sheet, 1);
Label label;
for (int i = 0; i < title.length; i++) {
// Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z
// 在Label对象的子对象中指明单元格的位置和内容
// label = new Label(i, 0, title[i]);
label = new Label(i, 0, title[i], getHeader());
// 设置列宽
sheets.setColumnView(i, 20);
// sheets.setColumnView(4, 100);
// 将定义好的单元格添加到工作表中
sheets.addCell(label);
}
// 设置单元格属性
WritableCellFormat wc = new WritableCellFormat();
// 设置居中
wc.setAlignment(Alignment.CENTRE);
// 设置边框线
wc.setBorder(Border.ALL, BorderLineStyle.THIN);
for (int i = 0; i < list.size(); i++) {
String[] arrData = list.get(i);
for (int j = 0; j < arrData.length; j++) {
// 向特定单元格写入数据
// sheets.setColumnView(j, 20);
label = new Label(j, 1 + i, arrData[j], wc);
sheets.addCell(label);
}
}
// 写入数据
wwb.write();
// 关闭文件
wwb.close();
}
catch (Exception e) {
e.printStackTrace();
return;
}
}
public static WritableCellFormat getHeader() {
// 定义字体
WritableFont font = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD);
try {
// 黑色字体
font.setColour(jxl.format.Colour.BLACK);
}
catch (WriteException e1) {
e1.printStackTrace();
}
WritableCellFormat format = new WritableCellFormat(font);
try {
// 左右居中
format.setAlignment(jxl.format.Alignment.CENTRE);
// 上下居中
format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
// 黑色边框
format.setBorder(Border.ALL, BorderLineStyle.THIN, jxl.format.Colour.BLACK);
// 黄色背景
format.setBackground(jxl.format.Colour.YELLOW);
}
catch (WriteException e) {
e.printStackTrace();
}
return format;
}
public static void main(String args[]) {
ExcelOperaation excel = new ExcelOperaation();
// 文件保存路径
String path = "E:/test.xlsx";
// 准备测试数据
List<String[]> list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
String content[] = { i + "", "hello" };
list.add(content);
}
// sheet页名称
String sheet = "hhh";
// 列名
String title[] = { "id", "content" };
excel.writeExcel(path, list, sheet, title);
}
}
运行代码,在E盘得到一个名为excel文档,里面存放了五行两列的数据,sheet名为:hhh:
接下来我们的任务就是添加更多的数据,并且根据数据数量就数据存放在不同的sheet(sheet名自定义)中,运用代码:int totle = result.size();//获取List集合的size int mus = 5;//每个工作表格最多存储5条数据(注:excel表格一个工作表可以存储65536条) int avg = totle / mus; for (int i = 0; i < avg + 1; i++) { WritableSheet ws = wwb.createSheet("列表" + (i + 1), i); //创建一个可写入的工作表
该循环代码可以实现每5个数据重新建一个新的sheet,直到数据读取结束,从而实现我们的要求。(sheet名可自定义)