poi,jxl读取excel文件

来源:互联网 发布:系统之家数据恢复 编辑:程序博客网 时间:2024/05/29 09:36

poi读取excel文件

package test_poi;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test;

public class TestPoi {
@Test
public void createWorkBook() throws Exception {
Workbook wb = new HSSFWorkbook(); // 创建工作簿
Sheet sheet = wb.createSheet("first sheet"); // 创建工作表并且定义工作表名称
Row createRow = sheet.createRow(0); // 定义第一行
// Row createRow2 = sheet.createRow(1);// 定义第二行
createRow.createCell(0).setCellValue("hehe"); // 第一行第一个列,并赋值
for (int i = 0; i < 10; i++) {
createRow.createCell(i + 1).setCellValue("hehe" + i); // 循环第一行
// createRow2.createCell(i).setCellValue("第二行" + i); // 循环第二行
}
OutputStream fileOut = new FileOutputStream("d:\\poi.xls");// 输出流
wb.createSheet("two");// 创建第二个工作表并定义名称
wb.write(fileOut); // 将文件输出到文件中
fileOut.close(); // 关闭输出流,,
}

@Test
public void readExl() throws Exception {
InputStream is = new FileInputStream("d:\\poi.xls");
POIFSFileSystem fs = new POIFSFileSystem(is);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
// 获得总行数,第一行算标题不算在行数内,所以总的行数应该是lastRowNum+1
int lastRowNum = sheet.getLastRowNum();
System.out.println(lastRowNum);
// 直接根据行号获取信息
HSSFRow row = sheet.getRow(0);// 获取第一行(标题)
// 获取当前行总列数
int physicalNumberOfCells = row.getPhysicalNumberOfCells();
System.out.println("标题总列数=" + physicalNumberOfCells);
// 单元格内容格式
int cellType = row.getCell(3).getCellType();// 格式是:
// HSSFCell.CELL_TYPE_STRING...
// 获取不同类型的值
double numericCellValue = row.getCell(0).getNumericCellValue();
boolean booleanCellValue = row.getCell(1).getBooleanCellValue();
Date dateCellValue = row.getCell(2).getDateCellValue();

System.out.println(cellType + "********");

}

}

jxl读取execl文件创建
创建工作簿,就是一个Excel文档,参数最常用的就是文件输出流和文件,还有的很多。。。

复制代码
WritableWorkbook wwb = null;
File file = new File("D:\\test.xls");
wwb = Workbook.createWorkbook(file);
OutputStream os = new FileOutputStream("D:\\test.xls");
wwb = Workbook.createWorkbook(os);
复制代码
创建工作表

WritableSheet sheet =wwb.createSheet(name, x);//x表示第x+1个工作表,名字是name
添加单元格内容

Label label = new Label(col, rows, content);//表示 第col+1列,第rows+1的单元格的内容是content
sheet.addCell(label);
固定表头

SheetSettings ss = sheet.getSettings();
ss.setVerticalFreeze(1); // 固定表头,无论怎么往下翻页,第一行永远在第一行
填充数据

数据填充这块稍微复杂点,涉及到数据单元格的格式问题。

a)、填充数字
jxl.write.Number numb = new jxl.write.Number(1, 1, 250);
sheet.addCell(numb);

b)、填充格式化的数字
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);
jxl.write.Number n = new jxl.write.Number(2, 1, 2.451, wcf);
sheet.addCell(n);

c)、填充日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String newdate = sdf.format(new Date());
label = new Label(2, 2, newdate);
sheet.addCell(label);

d)、填充文本
label = new Label(3, 3, "周星驰");
sheet.addCell(label);

e)、填充boolean值
jxl.write.Boolean bool = new jxl.write.Boolean(4, 1, true);
sheet.addCell(bool);

合并单元格

通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的。
表示将从第x+1列,y+1行到m+1列,n+1行合并 (四个点定义了两个坐标,左上角和右下角)
结果是合并了m-x+1行,n-y+1列,两者乘积就是合并的单元格数量。

sheet.mergeCells(0, 6, 3, 8);
label = new Label(0, 6, "合并了12个单元格");
sheet.addCell(label);

添加单元格的式样

主要是改变单元格背景、字体、颜色等等。
WritableCellFormat wc = new WritableCellFormat();
// 设置居中
wc.setAlignment(Alignment.CENTRE);
// 设置边框线
wc.setBorder(Border.ALL, BorderLineStyle.THIN);
// 设置单元格的背景颜色
wc.setBackground(jxl.format.Colour.RED);
label = new Label(1, 5, "字体", wc);
sheet.addCell(label);

设置单元格字体

// 设置字体
jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("楷书"), 20);
WritableCellFormat font = new WritableCellFormat(wfont);
label = new Label(2, 6, "楷书", font);
sheet.addCell(label);

将工作写成文件

// 写入数据
wwb.write();
// 关闭文件
wwb.close();

读取
获取工作表(sheet)的值
Workbook workbook = Workbook.getWorkbook(file);
Sheet sheet = workbook.getSheet(0);
String name = sheet.getName();
System.out.println(name);
行列的批量操作
//获取所有的工作表
jxl.write.WritableSheet[] sheetList = wwb.getSheets();
//获取第1列所有的单元格
jxl.Cell[] cellc = sheet.getColumn(0);
//获取第1行所有的单元格
jxl.Cell[] cellr = sheet.getRow(0);
//获取第1行第1列的单元格
Cell c = sheet.getCell(0, 0);

获取单元格的值

//获取单元格的值,不管什么单元格,返回都是字符串
String value = c.getContents();

原创粉丝点击