Excel基础知识
单元格的内容决定了单元格的类型,POI中定义的7种单元格类型:
1.Excel的基本操作
想要学习Excle的基本读写,首先我们得了解常见得Excel得基本格式03与07版excel的区别.
1.03与07版excel的区别
2.使用对象不同 03使用HSSFWorkbook, 07使用XSSWorkbook
3.HSSFWORKbook最大只能导入65536行,XSSWorkbook版可导入1048576行
4.文件后缀名不同,HSSFWORKbook的后缀名为xls,XSSWorkbook的后缀为xlsx
(1).使用HSSFWorkbook对象进行Excel数据的写操作
String PATH = "F:\\io_test_file\\excel_file\\";
// 03版Excel HSSFWorkBook
@Test
public void testWrite03() throws IOException {
long l = System.currentTimeMillis();
// 创建一个工作簿
Workbook workbook = new HSSFWorkbook();
// 创建一个工作表
Sheet sheet = workbook.createSheet("工作量统计");
// 创建一个行 其实下标为0
Row row1 = sheet.createRow(0);
// 创建一个单元格(1,1)
Cell cell11 = row1.createCell(0);
// 向表格中填充数据
cell11.setCellValue("卸货");
//(1,2)
Cell cell12 = row1.createCell(1);
cell12.setCellValue("16箱水果");
// 第二行
Row row2 = sheet.createRow(1); // 创建行
// 创建列(2,1)
Cell cell21 = row2.createCell(0);
// 为第二行第一列设置值
cell21.setCellValue("拖地");
// 在行的基础上 创建列(2,2)
Cell cell22 = row2.createCell(1);
// 设置列22 对应的值
String currntTime = new DateTime().toString("10次");
cell22.setCellValue(currntTime);
// 生成一张表(IO流) 注03 HSSF版本使用xls结尾
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "工作量统计.xls");
// 输出
workbook.write(fileOutputStream);
// 关闭流
if (null != fileOutputStream) {
fileOutputStream.close();
}
if (null != workbook) {
workbook.close();
}
System.out.println("写入耗时: "+(System.currentTimeMillis() - l));
}
(2).使用XSSWorkboot进行Excel的写操作
String PATH = "F:\\io_test_file\\excel_file\\";
/**
* XSSWorkboot 的写操作
* @throws IOException
*/
@Test
public void growStaticTable() throws IOException {
long l = System.currentTimeMillis();
// 创建工作簿
Workbook workbook = new XSSFWorkbook();
// 利用工作簿对象 创建工作表
Sheet sheet = workbook.createSheet("布布和一二");
// 在工作表中创建一行
Row row1 = sheet.createRow(0);
// 创建第二行
Row row2 = sheet.createRow(1);
// 创建第一行 第一列
Cell cell11 = row1.createCell(0);
// 在第一行第一列中写入值
cell11.setCellValue("布布");
// 在第一行中创建第二列
Cell cell12 = row1.createCell(1);
// 在第一行第二列中设置值
cell12.setCellValue("胖黑的bubu");
// 创建第二行 第一列
Cell cell21 = row2.createCell(0);
cell21.setCellValue("一二");
// 创建第二行 第二列
Cell cell22 = row2.createCell(1);
// 设置值
cell22.setCellValue("白胖的一二");
// 创建输出流对象
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "布布和一二.xlsx");
// 调用工作簿对象 惊醒写入操作
workbook.write(fileOutputStream);
// 关流
if (fileOutputStream != null) {
fileOutputStream.close();
}
if (workbook != null) {
workbook.close();
}
System.out.println("写入耗时: "+(System.currentTimeMillis() - l));
}
(3).使用HSSFWorkbook进行批量读操作
String PATH = "F:\\io_test_file\\excel_file\\";
/**
* Excel读操作 HSSFWorkbook
*/
@Test
public void excelReadOpt() throws IOException {
//获取文件流
FileInputStream inputStream = new FileInputStream(PATH + "工作量统计.xls");
//1.创建一个工作簿。使用excel能操作的这边都可以操作
Workbook workbook = new HSSFWorkbook(inputStream);
//2.得到表
Sheet sheet = workbook.getSheetAt(0);
// 输出表中所有的数据
// 获取表中记录数
int recordNum = sheet.getPhysicalNumberOfRows();
// 获取所有记录中的值
for (int rowNum = 0; rowNum < recordNum; rowNum++) {
// 根据记录索引 获取记录对应的数据
Row rowData = sheet.getRow(rowNum);
// 行不为空 获取列数据
if (rowData != null) {
// 获取行对应的列数
int cellCount = rowData.getPhysicalNumberOfCells();
// 根据列数 逐列读取数据
for (int cellNum = 0; cellNum < cellCount; cellNum++) {
// 获取单元格
Cell cell = rowData.getCell(cellNum);
// 获取单元格的数据类型
CellType cellType = cell.getCellTypeEnum();
String cellVal = "";
// 创建计算器对象
FormulaEvaluator hssfFormulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
// 依据单元格数据类型输出数据
switch (cellType) {
case NUMERIC:
double numericCellValue = cell.getNumericCellValue();
System.out.println("numericCellValue = " + numericCellValue);
break;
case STRING:
String stringCellValue = cell.getStringCellValue();
System.out.println("stringCellValue = " + stringCellValue);
break;
case BOOLEAN:
boolean booleanCellValue = cell.getBooleanCellValue();
System.out.println("booleanCellValue = " + booleanCellValue);
break;
case FORMULA: // 公式类型
String cellFormula = cell.getCellFormula();
System.out.println("cellFormula = " + cellFormula);
// 使用计算器 依据公式计算 单元格的值
CellValue evaluateRet = hssfFormulaEvaluator.evaluate(cell);
// 将计算结果 格式化为字符串
String cellValue = evaluateRet.formatAsString();
// 输出计算结果
System.out.println("cellValue = " + cellValue);
break;
case BLANK: // 空单元格 没值 但有样式
System.out.println("空单元格 没值 但有样式");
break;
case ERROR:
System.out.print("【数据类型错误】");
break;
default:
System.out.println("未知类型");
break;
}
}
}
}
}
(4).XSSFWorkbook的读操作同(3),替换操作对象即可,此处略.