`
lgstarzkhl
  • 浏览: 330648 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

jxl操纵excel(转)

    博客分类:
  • java
阅读更多
http://www.iteye.com/topic/624334

是操作excel的几个类文件

import java.io.File;   
import java.io.FileInputStream;   
import java.io.FileOutputStream;   
import java.io.IOException;   
import java.io.OutputStream;   
import java.text.DecimalFormat;   
import java.util.ArrayList;   
import java.util.List;   
  
import javax.servlet.http.HttpServletResponse;   
  
import org.apache.poi.hssf.usermodel.HSSFCell;   
import org.apache.poi.hssf.usermodel.HSSFRichTextString;   
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.Cell;   
import org.apache.poi.ss.usermodel.Row;   
import org.apache.poi.ss.usermodel.Sheet;   
import org.apache.poi.ss.usermodel.Workbook;   
/**  
 * 封装对excel的操作,包括本地读写excel和流中输出excel<br/>  
 * 关联jar poi-3.5-beta5-20090219.jar<br/>  
 * 有参构造函数参数为excel的全路径<br/>  
 * @author 沙琪玛  
 *  
 */  
public class ExcelUtils {   
  
    // excel文件路径   
    private String path = "";   
    /**  
     * 无参构造函数 默认  
     */  
    public  ExcelUtils() {   
  
    }   
    /**  
     * 有参构造函数  
     * @param path excel路径  
     */  
    public  ExcelUtils(String path) {   
        this.path = path;   
    }   
    /**  
     * 在磁盘生成一个含有内容的excel,路径为path属性  
     * @param sheetName 导出的sheet名称  
     * @param fieldName 列名数组  
     * @param data 数据组  
     * @throws IOException   
     */  
    public void makeExcel(String sheetName,String[] fieldName,List<String[]> data) throws IOException {   
        //在内存中生成工作薄   
        HSSFWorkbook workbook = makeWorkBook(sheetName,fieldName,data);   
        //截取文件夹路径   
        String filePath=path.substring(0,path.lastIndexOf("\\"));   
        // 如果路径不存在,创建路径   
        File file = new File(filePath);   
        //System.out.println(path+"-----------"+file.exists());   
        if (!file.exists())   
            file.mkdirs();   
        FileOutputStream fileOut = new FileOutputStream(path);   
        workbook.write(fileOut);   
        fileOut.close();   
    }   
    /**  
     * 在输出流中导出excel  
     * @param excelName 导出的excel名称 包括扩展名  
     * @param sheetName 导出的sheet名称  
     * @param fieldName 列名数组  
     * @param data 数据组  
     * @param response response  
     */  
    public void makeStreamExcel(String excelName, String sheetName,String[] fieldName   
            , List<String[]> data,HttpServletResponse response) {   
         OutputStream os = null;   
         try {   
            response.reset(); // 清空输出流   
            os = response.getOutputStream(); // 取得输出流   
            response.setHeader("Content-disposition", "attachment; filename="  
                    + new String(excelName.getBytes(), "ISO-8859-1")); // 设定输出文件头   
            response.setContentType("application/msexcel"); // 定义输出类型   
        } catch (IOException ex) {// 捕捉异常   
            System.out.println("流操作错误:" + ex.getMessage());   
        }   
        //在内存中生成工作薄   
        HSSFWorkbook workbook = makeWorkBook(sheetName,fieldName,data);   
        try {   
            os.flush();   
            workbook.write(os);   
        } catch (IOException e) {   
            e.printStackTrace();   
            System.out.println("Output is closed");   
        }   
    }   
    /**  
     * 根据条件,生成工作薄对象到内存  
     * @param sheetName 工作表对象名称  
     * @param fieldName 首列列名称  
     * @param data 数据  
     * @return HSSFWorkbook  
     */  
    private HSSFWorkbook makeWorkBook(String sheetName,String[] fieldName   
            , List<String[]> data)   
    {   
        // 产生工作薄对象   
        HSSFWorkbook workbook = new HSSFWorkbook();   
        // 产生工作表对象   
        HSSFSheet sheet = workbook.createSheet();   
        // 为了工作表能支持中文,设置字符集为UTF_16   
        workbook.setSheetName(0, sheetName);   
        // 产生一行   
        HSSFRow row = sheet.createRow(0);   
        // 产生单元格   
        HSSFCell cell;   
        // 写入各个字段的名称   
        for (int i = 0; i < fieldName.length; i++) {   
            // 创建第一行各个字段名称的单元格   
            cell = row.createCell((short) i);   
            // 设置单元格内容为字符串型   
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);   
            // 为了能在单元格中输入中文,设置字符集为UTF_16   
            // cell.setEncoding(HSSFCell.ENCODING_UTF_16);   
            // 给单元格内容赋值   
            cell.setCellValue(new HSSFRichTextString(fieldName[i]));   
        }   
        // 写入各条记录,每条记录对应excel表中的一行   
        for (int i = 0; i < data.size(); i++) {   
            String[] tmp = data.get(i);   
            // 生成一行   
            row = sheet.createRow(i + 1);   
            for (int j = 0; j < tmp.length; j++) {   
                cell = row.createCell((short) j);   
                //设置单元格字符类型为String   
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);   
                cell.setCellValue(new HSSFRichTextString((tmp[j] == null) ? "" : tmp[j]));   
            }   
        }   
        return workbook;   
    }   
  
    public void write(int sheetOrder,int colum, int row, String content) throws Exception {   
        Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(   
                new FileInputStream(path)));   
        Sheet sheet = workbook.getSheetAt(sheetOrder);   
        Row rows = sheet.createRow(row);   
        Cell cell = rows.createCell(colum);   
        cell.setCellValue(content);   
        FileOutputStream fileOut = new FileOutputStream(path);   
        workbook.write(fileOut);   
        fileOut.close();   
  
    }   
    /**  
     * 得到一个工作区最后一条记录的序号  
     * @param sheetOrder 工作区序号  
     * @return int  
     * @throws IOException  
     */  
    public int getSheetLastRowNum(int sheetOrder) throws IOException   
    {   
        Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(   
                new FileInputStream(path)));   
        Sheet sheet = workbook.getSheetAt(sheetOrder);   
        return sheet.getLastRowNum();   
    }   
    public String read(int sheetOrder,int colum, int row) throws Exception {   
        Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(   
                new FileInputStream(path)));   
        Sheet sheet = workbook.getSheetAt(sheetOrder);   
        Row rows = sheet.getRow(row);   
        Cell cell = rows.getCell(colum);   
        String content = cell.getStringCellValue();   
        return content;   
    }   
    /**  
     * 根据path属性,在磁盘生成一个新的excel  
     * @throws IOException  
     */  
    public void makeEmptyExcel() throws IOException {   
        Workbook wb = new HSSFWorkbook();   
        Sheet sheet = wb.createSheet("new sheet");   
        //截取文件夹路径   
        String filePath=path.substring(0,path.lastIndexOf("\\"));   
        // 如果路径不存在,创建路径   
        File file = new File(filePath);   
        if (!file.exists())   
            file.mkdirs();   
        FileOutputStream fileOut = new FileOutputStream(filePath + "\\" + path.substring(path.lastIndexOf("\\")+1));   
        wb.write(fileOut);   
        fileOut.close();   
    }   
    /**  
     * 根据工作区序号,读取该工作去下的所有记录,每一条记录是一个String[]<br/>  
     * 注意如果单元格中的数据为数字将会被自动转换为字符串<br/>  
     * 如果单元格中存在除数字,字符串以外的其他类型数据,将会产生错误  
     * @param sheetOrder 工作区序号  
     * @return  
     * @throws IOException   
     * @throws    
     */  
    public List<String[]> getDataFromSheet(int sheetOrder) throws IOException   
    {   
        Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(   
                new FileInputStream(path)));   
        Sheet sheet = workbook.getSheetAt(sheetOrder);   
        List<String[]> strs=new ArrayList<String[]>();   
        //注意得到的行数是基于0的索引 遍历所有的行   
        //System.out.println(sheet.getLastRowNum());   
        for(int i=0 ; i<=sheet.getLastRowNum() ; i++){   
            Row rows = sheet.getRow(i);   
            String[] str =new String[rows.getLastCellNum()];   
            //遍历每一列   
            for (int k = 0; k < rows.getLastCellNum(); k++) {   
                Cell cell = rows.getCell(k);   
                //数字类型时   
                if(0==cell.getCellType()){   
                    //用于格式化数字,只保留数字的整数部分   
                    DecimalFormat df=new DecimalFormat("########");      
                    str[k]=df.format(cell.getNumericCellValue());   
                }   
                else  
                    str[k] =cell.getStringCellValue();   
                //System.out.println(cell.getCellType()+"-------------"+str[k]);   
            }   
            strs.add(str);   
        }   
        return strs ;   
    }   
    //   public static void main(String[] args) throws Exception {   
    //   ExcelUtils eu=new ExcelUtils("D:\\Tomcat 5.5\\webapps\\sms\\UserFiles\\log\\2009-11-16 16:47:20 导入手机号码日志.xls");   
    //   List<String[]> ss=new ArrayList<String[]>();   
    //   ss.add(new String[]{"你撒地方","sdfds"});   
    //   ss.add(new String[]{"瓦尔","撒地方"});   
    //   eu.makeExcel("smsLog", new String[]{"色粉","的是否"}, ss);   
    // List<String[]> strs=excelUtils.getDataFromSheet(0);   
    // for (String[] str : strs) {   
    // for (String s : str) {   
    // System.out.println(s);   
    // }   
    // }   
    // String content = "Hello Worlds";   
    // excelUtils.write(2, 3, content);   
    // String newContent = excelUtils.read(0,1, 1);   
    // System.out.println(newContent);   
    // excelUtils.makeEmptyExcel("d:\\a\\ab", "a.xls");   
    //  }   
}  

分享到:
评论

相关推荐

    java操纵excel的jar包(jxl.jar包 源码)

    java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵excel的jar包(jxl.jar包 源码)java操纵...

    jxl 生成excel 简易教程

    jxl是对excel强有力的操纵工具,它具有丰富的API可以满足对excel的各种开发需要。

    JxL EXcel操纵工具

    JAVA操纵Excel的很好工具。是个开源包,能够用于Excel表的读取,和Excel表向其他数据库转换!

    Java操纵excel的jar包(jxl.jar包 源码)

    Java操纵excel的jar包(jxl.jar包 源码)

    jxl.jar可以操纵excel文件

    用这个控件可以很容易的对excel文件进行读写操作。

    使用jxl技术:jxl教程

    使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在...

    Excel数据操纵-jar包-jxl.jar

     读的时候是这样的一个思路,先用一个输入流(InputStream)得到Excel文件,然后用jxl中的Workbook得到工作薄,用Sheet从工作薄中得到工作表,用Cell得到工作表中得某个单元格.  InputStream-&gt;Workbook-&gt;Sheet-&gt;Cell,就...

    java操纵excel的jar包

    本篇文章将深入探讨如何使用JXL.jar包来实现Java对Excel的操纵。 首先,JXL库提供了一个直观的API,使Java程序员能够处理Excel文件中的工作簿(Workbook)、工作表(Worksheet)、行(Row)和单元格(Cell)。这个...

    使用Java操纵Excel表.docx

    import jxl.*; public class ExcelReading { public static void main(String[] args) { try { // 从本地文件创建只读Workbook对象 FileInputStream fis = new FileInputStream(new File("sourcefile.xls")); ...

    使用Java操纵Excel表.doc

    import jxl.Workbook; File sourcefile = new File("path_to_your_file.xls"); try { FileInputStream fis = new FileInputStream(sourcefile); Workbook workbook = Workbook.getWorkbook(fis); } catch ...

    使用Java操纵Excel表.pdf

    import jxl.Workbook; try { // 从本地文件创建Workbook Workbook rwb = Workbook.getWorkbook(new File("sourcefile.xls")); // 或者从输入流创建Workbook FileInputStream is = new FileInputStream("source...

    利用 JAVA 操作 EXCEL 文件

    这样只是说可以访问到 Excel 文件,但是还不能真正的操纵 Excel 文件,本文将给大家一个惊喜,向大家介绍一个开放源码项目,Java Excel API,使用它大家就可以方便地操纵 Excel 文件了。 jxl.jar 在我的资源中也有...

    java操纵EXCEL

    java实现对EXCEL的操作,网上下载jxl.jar包

    jxlreport web组件

    在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,并要求在浏览器中展现报表,通过开放源码项目——Java Excel API简称JXL,使用它大家就可以方便地操纵Excel文件了。实现Excel项目报表的处理。 ...

    jxl、javascript、dhtml的api参考手册包

    JXL是一个Java库,用于读取、写入和修改Excel电子表格文件。它提供了丰富的API,允许开发者在Java应用中方便地处理Excel数据。`jxl API`的CHM文件涵盖了各种类和方法,如Workbook、Sheet、Cell等,它们分别代表Excel...

    Java中操控Excel表格.pdf

    在Java中操纵Excel文件时,首先需要导入必要的库,如`jxl`。然后,可以使用`Workbook`类来表示Excel文件,它是整个Excel工作簿的容器。`Workbook`可以从本地文件系统加载,也可以从输入流中创建,例如通过`...

    JSP动态输出Excel及中文乱码的解决

    最近在网上看到一个用java来操纵excel的open source,在weblogic上试用了一下,觉得很不错,特此向大家推荐一下。  首先去http://www.andykhan.com/jexcelapi/index.html下载最新的JExcelApi,把jxl.jar置于你的...

Global site tag (gtag.js) - Google Analytics