利用jxl实现excel操作

前面引用一段摘抄下来的关于jxl的介绍:
Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该 API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、 Servlet来调用API实现对Excel数据表的访问。

以下是我根据网上和api写的一个简单的例子:
package excel;

import java.io.*;

import jxl.*;
import jxl.write.*;
import jxl.format.*;

/**
 * 实现对Excel报表的操作.调用了开源框架jxl.
 * 
@author shengyan
 * 
@since 
 * 
@version 0.0.0.1
 
*/

public class ExcelHandle {

    
/**
     * 实现对excel报表的读取.
     * 
@param sourcefile <code>String<code> parse path of file
     
*/

    
public void readExcel(String sourcefile) {
        
try {
            
// 构建Workbook对象, 只读Workbook对象
            
// 直接从本地文件创建Workbook
            
// 从输入流创建Workbook
            InputStream is = new FileInputStream(sourcefile);
            
//获得workbook 工作薄
            Workbook rwb = Workbook.getWorkbook(is);
            
//Workbook rwb = Workbook.getWorkbook(new File(sourcefile));
            
// 获取第一张Sheet 工作表
            Sheet rs = rwb.getSheet(0);
            
// 获取第一行,第一列的值
            Cell c00 = rs.getCell(00);
            String strc00 
= c00.getContents();
            
// 获取第一行,第二列的值
            Cell c10 = rs.getCell(10);
            String strc10 
= c10.getContents();
            
// 获取第二行,第二列的值
            Cell c11 = rs.getCell(11);
            String strc11 
= c11.getContents();
            
// 获得cell具体类型值的方式
            if (c00.getType() == CellType.LABEL) {
                LabelCell labelc00 
= (LabelCell) c00;
                System.out.println(labelc00.getString());
            }

            System.out.println(
"Cell(0, 0)" + " value : " + strc00
                    
+ "; type : " + c00.getType());
            System.out.println(
"Cell(1, 0)" + " value : " + strc10
                    
+ "; type : " + c10.getType());
            System.out.println(
"Cell(1, 1)" + " value : " + strc11
                    
+ "; type : " + c11.getType());
            rwb.close();
            is.close();
        }
 catch (Exception e) {
            e.printStackTrace();
        }


    }

    
    
/**
     * 实现写Excel报表
     * 
@param sourcefile <code>String<code> parse path of file
     
*/

    
public void writeExcel(String sourcefile) {
            
try {
                File file 
= new File(sourcefile);
                file.createNewFile();
                OutputStream os 
= new FileOutputStream(file);
                
// 获得workbook
                WritableWorkbook wwb = Workbook.createWorkbook(os);
                
//WritableWorkbook wwb = Workbook.createWorkbook(new File(sourcefile));
                
// 获得sheet 1.名字, 2.下标(从0开始)
                WritableSheet ws = wwb.createSheet("Test Sheet 1"0);
                
                
// 行高和列宽
                
//将第一行的高度设为200
                ws.setRowView(0,200);
                
//将第一列的宽度设为30
                ws.setColumnView(0,30);
                
                
//1. 添加的字体样式 
                /*
                 * 获得字体
                 * 第一个: TIMES是字体大小,他写的是18 
                 * 第二个: BOLD是判断是否为斜体,选择true时为斜体 
                 * 第三个: ARIAL 
                 * 第四个: UnderlineStyle.NO_UNDERLINE 下划线 
                 * 第五个: jxl.format.Colour.RED 字体颜色是红色的
                 
*/

                WritableFont wf 
= new WritableFont(WritableFont.TIMES, 18,
                        WritableFont.BOLD, 
true);
                WritableCellFormat wcfF 
= new WritableCellFormat(wf);
                
/*
                 * 在Label()方法里面有三个参数 
                 * 第一个是代表列数, 
                 * 第二是代表行数, 
                 * 第三个代表要写入的内容 
                 * 第四个是可选项,是输入这个label里面的样式 
                 
*/

                Label labelC 
= new Label(10"This is a Label cell", wcfF);
                
// 把内容写进sheet里面
                ws.addCell(labelC);
                
                
//合并cell 单元格
                Range rang = ws.mergeCells(0627);
                WritableCellFormat ccf
= new WritableCellFormat();
                
//把水平对齐方式指定为居中
                ccf.setAlignment(jxl.format.Alignment.CENTRE);
                
//设置自动换行
                ccf.setWrap(true);
                Label labelz 
= new Label(06"merge label", ccf);
                
//Cell cell = rang.getTopLeft();
                ws.addCell(labelz);
                
                
// 3.添加Number对象 
                
// 3.1显示number对象数据的格式
                
// 带有formatting的Number对象 
                NumberFormat nf = new jxl.write.NumberFormat("#.##"); 
                WritableCellFormat wcfN 
= new jxl.write.WritableCellFormat(nf);
                
/*
                 * Number()方法参数说明: 
                 * 前两上表示输入的位置 
                 * 第三个表示输入的内容
                 
*/

                jxl.write.Number labelNF 
= new jxl.write.Number(113.1415926, wcfN); 
                ws.addCell(labelNF); 
                
                
// 4. 添加Boolean对象 
                jxl.write.Boolean labelB = new jxl.write.Boolean(02false); 
                ws.addCell(labelB);

                
// 5.添加DateTime对象 
                /*
                 * DateTime()方法的参数说明 
                 * 前两个表示输入的位置 
                 * 第三个表示输入的当前时间
                 
*/

                jxl.write.DateTime labelDT 
= new jxl.write.DateTime(03new java.util.Date()); 
                ws.addCell(labelDT); 
                
                
// 6.添加带有formatting的DateFormat对象 
                jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss"); 
                jxl.write.WritableCellFormat wcfDF 
= new jxl.write.WritableCellFormat(df); 
                jxl.write.DateTime labelDTF 
= new jxl.write.DateTime(13new java.util.Date(), wcfDF); 
                ws.addCell(labelDTF);

                
// 7.添加带有字体颜色Formatting的对象 
                jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED); 
                jxl.write.WritableCellFormat wcfFC 
= new jxl.write.WritableCellFormat(wfc);

                
// 8.设置单元格样式
                wcfFC.setBackground(jxl.format.Colour.RED); //设置单元格的颜色为红色 
                ws.addCell(new jxl.write.Label(6,0,"i love china",wcfFC));

                
// 9.添加图片对象,jxl只支持png格式图片*pV)-s
                File image = new File("c:/2.png");
                WritableImage wimage 
= new WritableImage(0,1,2,2,image);
                ws.addImage(wimage);

                
// 写入excel
                wwb.write();
                wwb.close();
                os.close();
            }
 catch (Exception e) {
                e.printStackTrace();
            }

    }

     
    
public static void main(String[] args) {
        ExcelHandle re 
= new ExcelHandle();
        String sourcefile 
= "c:/Book1.xls";
        String tagfile 
= "c:/Book1.xls";
        re.writeExcel(sourcefile);
        re.readExcel(tagfile);
    }


}

在jsp中做相关测试,创建一个writeExcel.jsp
<%
response.reset();//清除Buffer
response.setContentType("application/vnd.ms-excel");
File fileWrite = new File("f:/testWrite.xls");
fileWrite.createNewFile();
new FileOutputStream(fileWrite);
ExcelHandle.writeExcel(new FileOutputStream(fileWrite));
%>
在IE中浏览writeExcel.jsp就可以动态生成Excel文档了,其中response.setContentType ("application/vnd.ms-excel");语句必须要,才能确保不乱码,在jsp中输入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。


下面是jxl中经常使用的几个类或接口的中文注释.

Workbook类提供的方法

1. int getNumberOfSheets()

获得工作薄(Workbook)中工作表(Sheet)的个数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

int sheets = rwb.getNumberOfSheets();

2. Sheet[] getSheets()

返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

Sheet[] sheets = rwb.getSheets();

3. String getVersion()

返回正在使用的API的版本号,好像是没什么太大的作用。

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

String apiVersion = rwb.getVersion();

Sheet接口提供的方法

1) String getName()

获取Sheet的名称,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

String sheetName = rs.getName();

2) int getColumns()

获取Sheet表中所包含的总列数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

int rsColumns = rs.getColumns();

3) Cell[] getColumn(int column)

获取某一列的所有单元格,返回的是单元格对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));

jxl.Sheet rs = rwb.getSheet(0);

Cell[] cell = rs.getColumn(0);

4) int getRows()

获取Sheet表中所包含的总行数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsRows = rs.getRows();

5) Cell[] getRow(int row)

获取某一行的所有单元格,返回的是单元格对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);

6) Cell getCell(int column, int row)

获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同。

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell cell = rs.getCell(0, 0);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值