JavaExcelAPI总结

Java Excel API的使用

Java Excel是开源项目,使用它可以用纯java来读取Excel文件的内容、创建Excel文件、更新已存在的Excel文件的内容,它不依赖于操作系统,这样可以使大家放心方便的操作Excel'文件。

搭建环境:下载jxl.jar文件,其包含java对Excel操作的类,把jxl.jar放到classpath下。

应用实例

从Excel中读取数据

Java Excel API可以从本地xls文件中读取数据,也可以从输入流中读取Excel数据表,读取的第一 步就是创建一个工作簿Workbook。

//获取文件输入流

InputStream fis=new FileInputStream(sourceFile);

//构建Workbook对象,这里是只读的Workbook对象

//也可以从本地文件中构建Workbook:Workbook.getWorkbook(new File(sourceFile)) jxl.Workbook wbook=Workbook.getWorkbook(fis);

创建Workbook后,可以通过它来访问Excel的sheet(工作表)

//获取第一个工作表对象,getSheet()中的参数表示第几张工作表,索引从0开始 jxl.Sheet sheet=wbook.getSheet(0);

//获取sheet的名字

String sheetName=sheet.getName();

获取Sheet后,可以用它访问Excel Cell(单元格)

//获取第一列第一行的单元格,getCell()中第一个参数是列,第二个参数是行 jxl.Cell cell=sheet.getCell(0,0);

//获取单元格的内容

String cellText=cell.getContents();

//获取单元格的类型,内容为空为Empty,不为空为Label类型

CellType type=cell.getType();

如果仅是活的Cell的内容,我们只用getContents()就可以了,这个方法返回的是字符串类型 操作完后,关闭Workbook对象,释放占用的内存空间

wbook.close();

注:

jxl.Workbook提供的方法

1,int getNumberOfSheets()获取工作簿中工作表的个数

jxl.Workbook wbook=Workbook.getWorkbook(sourceFile);

int sheets=wbook.getNumberOfSheets();

2,Sheet[] getSheets() 获取工作簿中的工作表对象的数组

Sheet[] sheets=wbook.getSheets();

3,String getVersion()返回正在使用的API的版本号,基本没用

String version=wbook.getVersion();

jxl.Sheet提供的方法

Sheet sheet=wbook.getSheet(0);

1,String getName()获取Sheet(工作表)的名字

String sheetName=sheet.getName();

2,int getColumns()获取Sheet表中包含的总列数

int cols=sheet.getColumns();

3,Cell[] getColumn(int column)获取某一列的所有单元格,返回单元格数组

Cell[] colCells=sheet.getColumn(column);

4,int getRows() 获取Sheet表中的包含的总行数

int rows=sheet.getRows();

5,Cell[] getRow(int row)获取某一行的所有单元格,返回单元格数组

Cell[] rowCells=sheet.getRow(row);

6,Cell getCell(column,row)根据列和行获取指定单元格

Cell cell=sheet.getCell(col,row);

生成新的Excel工作簿

Java Excel可以创建本地的xls文件,也可以写入到输出流,让客户端调用生成xls文件。 创建Excel文件的第一步是:利用Workbook创建一个可写入的工作簿(WritableWorkbook).

//创建文件输出流

OutputStream os=new FileOutputStream(targetFile);

//创建可写入的工作簿(writableWorkbook),这里是写入到输出流

//也可以直接写到文件中,Workbook.createWorkbook(targetFile);

jxl.WritableWorkbook wwbook=Workbook.createWorkbook(os);

创建工作簿完毕之后,开始创建可编辑的工作表(Sheet)。

//创建工作表有2个参数,第一个是sheet的名字,第二个是sheet在工作簿中的位置 WritableSheet sheet=wwbook.createSheet("sheetName",0);

设置字符串的格式

//第一个参数:字体WritableFont.TIMES;第二个参数是字号,数字类型

//第三个参数:WritableFont.BOLD或WritableFont.NO_BOLD

jxl.write.WritabelFont font=new WritableFont(字体,字号,粗体或非粗体);

设置带有字符串格式的format对象

jxl.write.WritableCellFormat format=new WritableFormat(font);

设置Label单元格对象,并加入到sheet工作表中

//创建label单元格直接加到sheet中,第一和第二个参数是制定列和行

//第三个参数是单元格内容,第四和是单元格内容的格式,也可以无第四个参数

jxl.Label label=new Label(col,row,content,format);

sheet.addCell(label);

设置Number对象,并加入到sheet工作表中

jxl.write.NumberFormat nFormat=new NumberFormat("#.##");

jxl.write.Number labelNum=new Number(col,row,number,nFormat);

sheet.addCell(labelNum);

添加Boolean对象

jxl.write.Boolean labelB=new Boolean(col,row,false);

sheet.addCell(labelB);

添加日期对象(带有format)

jxl.write.DateFormat dateFormat=new DateFormat("yyyy-MM-dd hh:mm:ss");

jxl.write.WritableCellFormat format=new WritableCellFormat(dateFormat);

jxl.write.DateTime date=new DateTime(col,row,new java.util.Date(),format);

sheet.addCell(date);

写入工作表

wwbook.write();

关闭工作表,释放内存空间

wwbook.close();

注:

jxl.WritableSheet提供的方法

1,mergeCells(startCol,startRow,endCol,endRow);合并单元格

2, sheet.setRowView(row, height);设置行高

3,sheet.setColumnView(column, width);设置列宽

jxl.write.WritableFormat提供的方法

1,format.setAlignment(jxl.format.Alignment.CENTRE)把水平方式定义为居中

2,format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE)把垂直方式定为居中 3,format.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN)设置单元格 的边框

复制和更新Excel工作簿

创建只读的工作簿对象

jxl.Workbook wbook=WorkBook.getWorkbook(new File(sourceFile));

创建一个可编辑的副本

jxl.WritableWorkbook wwbook=Workbook.createWorkbook(new File("*.xls"),wbook); 然后可以用副本wwbook进行Excel表的更新,跟创建Excel表的流程一样

最后关闭写入到副本中

wwbook.write();

关闭副本和只读文件

wwbook.close();

wbook.close();

 

第二篇:Java导出Excel总结

写Excel的方法类为JxlExcelWriter:

import jxl.Workbook;

import jxl.format.UnderlineStyle;

import jxl.format.Colour;

import jxl.write.*;

import jxl.write.biff.RowsExceededException;

import java.io.IOException;

import java.io.OutputStream;

import java.util.Date;

import java.util.List;

public class JxlExcelWriter {

public void writeExcel(OutputStream out, List datas, String[] title) {

if (datas == null) {

throw new IllegalArgumentException("写excel流需要List参数!");

}

try {

WritableWorkbook workbook = Workbook.createWorkbook(out);

WritableSheet ws = workbook.createSheet("sheet1", 0);

int rowNum = 1; //要写的行

if (title != null) {

putDescription(ws);

putTitle(ws, 1, title);//压入标题

Object[] cells = (Object[]) datas.get(0);

putRow(ws, rowNum, cells); //压一行到sheet

}

int dataNum = 2; //要写的数据行

for(int i = 1; i < datas.size(); i++, dataNum++) { //把数据写进sheet

Object[] cells = (Object[]) datas.get(i);

putDatas(ws, dataNum, cells); //压入一行数据到sheet

}

putTime(ws); //压入时间

workbook.write();

workbook.close(); //一定要关闭, 否则没有保存Excel

} catch (RowsExceededException e) {

System.out.println("jxl write RowsExceededException: " + e.getMessage());

} catch (WriteException e) {

System.out.println("jxl write WriteException: " + e.getMessage());

} catch (IOException e) {

System.out.println("jxl write file i/o exception!, cause by: " + e.getMessage()); }

}

private void putTime(WritableSheet ws) throws RowsExceededException, WriteException {

DateFormat df = new DateFormat("yyyy-MM-dd hh:mm:ss");

WritableCellFormat wcfDF = new WritableCellFormat(df);

DateTime labelDT = new DateTime(4, 10, new Date(), wcfDF);

ws.addCell(labelDT);

}

private void putDescription(WritableSheet ws) throws RowsExceededException,WriteException{

WritableFont wfc = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLUE);

WritableCellFormat wcfFC = new WritableCellFormat(wfc);

String description = "合计与盘盈的数量(条)不区分(联通、网通)、是否上市"; String unit = "单位:元";

Label descriptions = new Label(2, 0, "" + description, wcfFC);

ws.addCell(descriptions);

Label units = new Label(4, 0, "" + unit);

ws.addCell(units);

}

private void putTitle(WritableSheet ws, int rowNum, Object[] titles) throws

RowsExceededException, WriteException {

for (int j = 1; j < titles.length + 1; j++) {//写一行

Label title = new Label(j, rowNum, "" + titles[j-1]);

ws.addCell(title);

}

}

private void putRow(WritableSheet ws, int rowNum, Object[] cells) throws

RowsExceededException, WriteException {

for (int j = 1; j < cells.length + 1; j++) {//写一行

Label cellRows = new Label(0, j, "" + cells[j-1]);

// Label(0, j, "" + "String") 表示列不变行变,也就是说在第0列有n行数据 ws.addCell(cellRows);

}

}

private void putDatas(WritableSheet ws, int dataNum, Object[] cells) throws

RowsExceededException, WriteException {

for (int j = 1; j < cells.length + 1; j++) {//写一行

Label cellRows = new Label(j, dataNum, "" + cells[j-1]);

ws.addCell(cellRows);

}

}

}

导出Excel的类为ExportLtTotalExcel:

import com.sino.ams.bean.JxlExcelWriter;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.ServletOutputStream;

import java.util.List;

import java.util.ArrayList;

import java.util.StringTokenizer;

import java.io.*;

import java.sql.Connection;

public class ExportLtTotalExcel {

protected Connection conn = null; protected HttpServletResponse res = null; protected String fileName = "固定资产-清查总体情况表"; //保存Excel时的名字 public ExportLtTotalExcel(Connection conn, HttpServletResponse res) {

this.conn = conn;

this.res = res;

}

public ExportLtTotalExcel(HttpServletResponse res) {

this.res = res;

}

public void writeExcel(String[] normal, String[] free, String[] damaged, String[] loss, String[] total, String[] win) {

List datas = new ArrayList();

String[] rows = {"集团总部", "在用", "闲置", "损毁", "盘亏", "总部资产合计", "总部资产盘盈"};

String[] struct = {"原值", "累计折旧(或摊销)", "净值", "数量(条)"};

datas.add(rows);

datas.add(normal);

datas.add(free);

datas.add(damaged);

datas.add(loss);

datas.add(total);

datas.add(win);

try {

res.setContentType("application/vnd.ms-excel");

if (!fileName.equals("")) {

String header = "attachment; filename=" + new String((fileName

+ ".xls").getBytes(), "iso8859-1");

res.setHeader("Content-Disposition", header);

}

ServletOutputStream out = res.getOutputStream();

JxlExcelWriter jxlExcelWriter = new JxlExcelWriter();

jxlExcelWriter.writeExcel(out, datas, struct);

out.close();

res.flushBuffer();

} catch (IOException e) {

e.printStackTrace();

}

}

负责跟Web接口的Servlet类为LtAssetsTotalDataServlet:

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServlet;

public class LtAssetsTotalDataServlet extends HttpServlet {

public void performTask(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

String forwardURL = "";

Message message = SessionUtil.getMessage(req);

Connection conn = null;

try{

String action = dto.getAct();

conn = getDBConnection(req);

if (action.equals(AssetsActionConstant.EXPORT_ACTION)) {

//下面String[]数组中的值都是从Model里查出来的String型的字符串值 String[] normal = {normalCostS, normalDeprnReserveS, normalNetAssetValueS, normalTotalS};

String[] free = {freeCostS, freeDeprnReserveS, freeNetAssetValueS,

freetotalS};

String[] damaged = {damagedCostS, damagedDeprnReserveS,

damagedNetAssetValueS, damagedTotalS};

String[] loss = {lossCostS, lossDeprnReserveS, lossNetAssetValueS,

lossTotalS};

String[] total = {sumCostS, sumDeprnReserveS, sumNetAssetValueS, sumTotalS}; String[] win = {"", "", "", winTotalS};

ExportLtTotalExcel exportExcel = new ExportLtTotalExcel(res);

exportExcel.writeExcel(normal, free, damaged, loss, total, win);

forwardURL = AssetsURLList.LT_ASSETS_TOTAL;

}

}

}

 

第三篇:Excel总结

自动套用格式:全选------“格式”菜单下的“自动套用格式”

设置边框线:选中----“格式”----单元格-----边框选项卡

字体设置: 选中--“格式”--单元格--字体选项卡

设置填充色:选中--“格式”--单元格--图案选项卡

对齐方式(水平、垂直):选中--“格式”-单元格--对齐选项卡

合并单元格:选中--“格式”--单元格--对齐选项卡下的“合并单元格” 货币格式: 选中--“格式”--单元格---数字选项卡下的货币

数字格式: 选中--“格式”--单元格--数字选项卡下的数值

最合适的列宽:选中列--“格式”--列----最合适的列宽

工作表:插入 右击工作表标签---选插入

重命名 右击工作表标签--选重命名

设置页脚: “视图”---页眉和页脚---自定义页脚

增加一列(行):选中位置,利用“插入”菜单下的列(行)

公式:

求和:光标定位到存放结果的单元格---点击编辑栏中的“=”---选择Sum----确定 求平均数:光标定位到存放结果的单元格---点击编辑栏中的“=”---选择Average---确定

排序:

全部 选中要排序的所有数据(标题不要选)--点击“数据”菜单下的排序 部分 单击要排序的数据的任意一个单元格-----点击工具栏上的升序降序按钮

自动筛选:选中数据,点击“数据”菜单下的“筛选”——“自动筛选” 图表:选中要设置图表的数据-----点击“插入”菜单下的图表

相关推荐