欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java jxl操作Excel

程序员文章站 2024-02-24 13:11:23
...
package com.phluency.tpgroupbuying.util;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.servlet.http.HttpServletResponse;

import jxl.Cell;
import jxl.CellType;
import jxl.DateCell;
import jxl.LabelCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class ExcelUtil {

/**把数组内容变为excel格式并写到response
* 需要提前声明类型
* response.setContentType("Application/msexcel");
response.setHeader("Content-Disposition","attachment; filename=\""+GlobalUtil.getFormatTime(null,"yyyyMMddHHmmss")+".xls\"");
* @param data 包含行列的数组
* @return 字节数组
* @author yaofuyuan
* @createTime 2012-04-28 16:00
*/
public static void writeExcel(HttpServletResponse response,ArrayList<ArrayList<String>> data){
WritableWorkbook wwb = null;
OutputStream os = null;
try {
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
os = response.getOutputStream();
wwb =Workbook.createWorkbook(os);
} catch (IOException e) {
e.printStackTrace();
}
if(wwb!=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);

//下面开始添加单元格
for(int i=0,rowLen=data.size();i<rowLen;i++){
ArrayList<String> row=data.get(i);
for(int j=0,colLen=row.size();j<colLen;j++){
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC = new Label(j, i, row.get(j));
try {
//将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
try {
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}

/**把数组内容写到Excel文件,写到本地文件中
* @param data 包含行列的数组
* @return 字节数组
* @author yaofuyuan
* @createTime 2012-04-28 16:00
*/
public static void writeExcel(String filname,ArrayList<ArrayList<String>> data){
WritableWorkbook wwb = null;
try {
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb =Workbook.createWorkbook(new File(filname));
} catch (IOException e) {
e.printStackTrace();
}
if(wwb!=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);

//下面开始添加单元格
for(int i=0,rowLen=data.size();i<rowLen;i++){
ArrayList<String> row=data.get(i);
for(int j=0,colLen=row.size();j<colLen;j++){
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC = new Label(j, i, row.get(j));
try {
//将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
try {
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}

/**把数组内容变为excel格式并写到字节数组中
* @param data 包含行列的数组
* @return 字节数组
* @author yaofuyuan
* @createTime 2012-04-28 16:00
*/
public static byte[] writeExcel(ArrayList<ArrayList<String>> data){
WritableWorkbook wwb = null;
ByteArrayOutputStream os=null;
byte[] b=null;
try {
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
os = new ByteArrayOutputStream();
wwb =Workbook.createWorkbook(os);
} catch (IOException e) {
e.printStackTrace();
}
if(wwb!=null){
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);

//下面开始添加单元格
for(int i=0,rowLen=data.size();i<rowLen;i++){
ArrayList<String> row=data.get(i);
for(int j=0,colLen=row.size();j<colLen;j++){
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC = new Label(j, i, row.get(j));
try {
//将生成的单元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
try {
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
try {
if(os!=null){
b=os.toByteArray();
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return b;
}

/**读取Excel文件的内容
* @param file 待读取的文件
* @return ArrayList<ArrayList<String>> 包括excel里的第一个工作簿的所有行列
* @author yaofuyuan
* @createTime 2012-04-28 16:00
*/
public static ArrayList<ArrayList<String>> readExcel(String fileName){
ArrayList<ArrayList<String>> data=new ArrayList<ArrayList<String>>();
Workbook wb = null;
try {
//构造Workbook(工作薄)对象
wb=Workbook.getWorkbook(new File(fileName));
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(wb==null)
return data;

//获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet[] sheet = wb.getSheets();
if(sheet!=null&&sheet.length>0){
Sheet sheet0=sheet[0];
//得到当前工作表的行数
int rowNum = sheet0.getRows();
for(int i=0;i<rowNum;i++){
//得到当前行的所有单元格
Cell[] cells = sheet0.getRow(i);
ArrayList<String> row=new ArrayList<String>();
if(cells!=null&&cells.length>0){
int cellNum=cells.length;
//对每个单元格进行循环
for(int j=0;j< cellNum;j++){
//读取当前单元格的值
Cell c=cells[j];
String cellValue = cells[j].getContents();
if(c.getType() == CellType.LABEL)
{
LabelCell labelc00 = (LabelCell)c;
cellValue = labelc00.getString();
}else
if(c.getType() == CellType.NUMBER)
{
NumberCell numc10 = (NumberCell)c;
cellValue = getFormatNumber(numc10.getValue());
}else
if(c.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)c;
cellValue = getFormatTime(datec11.getDate());
}

row.add(cellValue);
}
}
data.add(row);
}

}
//最后关闭资源,释放内存
wb.close();
return data;
}
/**
* 时间格式转换
* @author yaofuyuan
* @createTime 2012-04-28 16:00
*/
public static String getFormatTime(Date logtime) {
if (null == logtime) {
logtime = new Date();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time = "";
try {
time = sdf.format(logtime);
} catch (Exception e) {
e.printStackTrace();
}

return time;
}
/**
* 小数格式转换
* @author yaofuyuan
* @createTime 2012-04-28 16:00
*/
public static String getFormatNumber(double n) {
DecimalFormat df = new DecimalFormat("#.##########");
return df.format(n);
}
public static void main(String[] argv){

// //测试写
// ArrayList<ArrayList<String>> test=new ArrayList<ArrayList<String>>();
// ArrayList<String> row=new ArrayList<String>();
// row.add("a");
// row.add("b");
// test.add(row);
// row=new ArrayList<String>();
// row.add("a");
// row.add("b");
// test.add(row);
// row=new ArrayList<String>();
// row.add("a");
// row.add("b");
// test.add(row);
// row=new ArrayList<String>();
// row.add("a");
// row.add("b");
// test.add(row);
// //writeExcel("D:/a.xls",test);
// try {
// FileOutputStream fos=new FileOutputStream(new File("D:/b.xls"));
// try {
// fos.write(writeExcel(test));
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// try {
// fos.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// //System.out.print(new String());
// } catch (FileNotFoundException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }

//测试读
ArrayList<ArrayList<String>> data=readExcel("D:/20120419.XLS");
for(int i=0;i<data.size();i++){
ArrayList<String> row1=data.get(i);
System.out.print("|");
for(String col1:row1){
System.out.print(col1+"|");
}
System.out.println();
}
}

}
相关标签: java jxl Excel