`

java 读写 excel poi读excel的一个小例子

阅读更多

http://www.apache.org/dyn/closer.cgi/poi/release/bin/poi-bin-3.7-20101029.tar.gz

 

poi读excel的一个小例子

 

---------------------------------------------------------

package com.sztelecom.reportnet.action;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.dao.DataAccessException;

import cn.bstar.gale.boss.dao.OperatorDao;
import cn.bstar.gale.boss.framework.BusinessException;
import cn.bstar.gale.boss.framework.TransException;
import cn.bstar.gale.boss.model.Department;
import cn.bstar.gale.boss.model.Operator;
import cn.bstar.gale.boss.service.ExcelService;
import cn.bstar.gale.boss.util.Tools;

public class Test implements ExcelService {

    private Logger logger = Logger.getLogger(Test.class);

    private OperatorDao operatorDao;

    public void exportAllOperator(OutputStream os) throws BusinessException {
        DetachedCriteria dc = DetachedCriteria.forClass(Operator.class);

        HSSFWorkbook wb = null;
        List operatorList = new ArrayList();

        try {
            operatorList = operatorDao.findOperatorByDc(dc);

            if (operatorList.size() < 1) {
                return;
            }
            wb = generateExcel(operatorList);

            if (wb != null) {
                wb.write(os);
                os.flush();
            } else {
                logger.error("======" + new Date()
                        + ": [error] generator HSSFWorkbook failed");
                throw new BusinessException("error.export.excel.fail");
            }
        } catch (IOException e) {
            logger.error("======" + new Date() + ": [error] exportAllOperator "
                    + e);
            throw new BusinessException("error.export.excel.fail");
        }
    }

    private HSSFWorkbook generateExcel(List operatorList) {
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet();
        wb.setSheetName(0, "人员记录", HSSFCell.ENCODING_UTF_16);
        sheet.setColumnWidth((short) 0, (short) ((15 * 8) / ((double) 1 / 20)));
        sheetIterator(11, sheet);

        HSSFCell cell = null;
        // 创建一个样式
        HSSFCellStyle centerStyle = wb.createCellStyle();
        // 居中对齐
        centerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);

        // sheet 创建一行
        HSSFRow row = sheet.createRow((short) 0);
        // 设定列名
        row.createCell((short) 0).setCellValue("");

        createCell(1, "操作员姓名", centerStyle, row, cell);
        createCell(2, "操作员ID", centerStyle, row, cell);
        createCell(3, "登录密码", centerStyle, row, cell);
        createCell(4, "性别", centerStyle, row, cell);
        createCell(5, "身份证号码", centerStyle, row, cell);
        createCell(6, "专长", centerStyle, row, cell);
        createCell(7, "可用状态", centerStyle, row, cell);
        createCell(8, "电话", centerStyle, row, cell);
        createCell(9, "E-mail", centerStyle, row, cell);
        createCell(10, "学历", centerStyle, row, cell);
        createCell(11, "部门编号", centerStyle, row, cell);

        int s = 1;
        for (int i = 0; i < operatorList.size(); i++) {
            Operator operator = (Operator) operatorList.get(i);
            row = sheet.createRow(s);
            row.createCell((short) 0).setCellValue(s);
            setCellValue(1, operator.getNickName(), row);
            setCellValue(2, operator.getLogId(), row);
            setCellValue(3, operator.getPassword(), row);
            setCellValue(4, operator.getSex().toString(), row);
            setCellValue(5, operator.getIdCard(), row);
            setCellValue(6, operator.getSkill(), row);
            setCellValue(7, operator.getStatus().toString(), row);
            setCellValue(8, operator.getTelNo(), row);
            setCellValue(9, operator.getEmail(), row);
            setCellValue(10, operator.getGraduation(), row);
            if (operator.getDepartment() != null) {
                setCellValue(11, operator.getDepartment().getDeptId()
                        .toString(), row);
            }
            s++;
        }

        return wb;
    }

    public void setOperatorDao(OperatorDao operatorDao) {
        this.operatorDao = operatorDao;
    }

    public void importAllOperator(InputStream is, Long createdBy)
            throws TransException {
        // 读取左上端单元
        HSSFRow row = null;
        HSSFCell cell = null;
        Operator o = null;
        Department department = null;
        List oldLogIdList= null;
        String newLogId=null;
        // 创建对Excel工作簿文件的引用
        HSSFWorkbook workbook;
        try {
            //得到已经存在的人员登录帐户列表
            oldLogIdList=operatorDao.getAllOperatorLogIds();
            workbook = new HSSFWorkbook(is);
        } catch (Exception e) {
            logger.error("======" + new Date() + ": [error] enportAllOperator "
                    + e);
            throw new TransException("error.data.access");
        }

        // 用getSheetAt(int index)按索引引用,
        // 在Excel文档中,第一张工作表的缺省索引是0,
        HSSFSheet sheet = workbook.getSheetAt(0);
        List<Operator> operatorList = new ArrayList<Operator>();
        Date date = new Date();
        for (Iterator it = sheet.rowIterator(); it.hasNext();) {
            row = (HSSFRow) it.next();


            // 第一行不是数据
            if (row == sheet.getRow(0)) {
                continue;
            }

            //判断是否重复插入
            cell = row.getCell((short) 2);
            if (cellNotBlank(cell)){
                newLogId=getStringCellValue(cell);
                //如果数据库中已经存在,则不重复插入
                if(oldLogIdList.contains(newLogId)){
                    continue;
                }
            }else{
                //此字段不能为空
                continue;
            }

            o = new Operator();
            o.setLogId(getStringCellValue(cell));

            cell = row.getCell((short) 1);
            if (cellNotBlank(cell)) {
                o.setNickName(getStringCellValue(cell));
            }

            cell = row.getCell((short) 3);
            if (cellNotBlank(cell)) {
                    o.setPassword(getStringCellValue(cell));
            }

            cell = row.getCell((short) 4);
            if (cellNotBlank(cell)) {
                o.setSex(Long.valueOf(getStringCellValue(cell)));
            }

            cell = row.getCell((short) 5);
            if (cellNotBlank(cell)) {
                o.setIdCard(getStringCellValue(cell));
            }

            cell = row.getCell((short) 6);
            if (cellNotBlank(cell)) {
                o.setSkill(getStringCellValue(cell));
            }

            cell = row.getCell((short) 7);
            if (cellNotBlank(cell)) {
                o.setStatus(Long.valueOf(getStringCellValue(cell)));
            }

            cell = row.getCell((short) 8);
            if (cellNotBlank(cell)) {
                o.setTelNo(getStringCellValue(cell));
            }

            cell = row.getCell((short) 9);
            if (cellNotBlank(cell)) {
                o.setEmail(getStringCellValue(cell));
            }

            cell = row.getCell((short) 10);
            if (cellNotBlank(cell)) {
                o.setGraduation(getStringCellValue(cell));
            }

            cell = row.getCell((short) 11);
            department = new Department();
            if (cellNotBlank(cell)) {
                department.setDeptId(Long.valueOf(getStringCellValue(cell)));
                o.setDepartment(department);
            }
            // 创建时间
            o.setDateCreated(date);
            o.setCreatedBy(createdBy);
            operatorList.add(o);
        }
        try {
            for (int i = 0; i < operatorList.size(); i++) {
                operatorDao.addOperator(operatorList.get(i));
            }
        } catch (Exception be) {
            logger.error("======" + new Date() + ": [error] enportAllOperator "
                    + be);
            throw new TransException("error.data.access");
        }
    }

    private void createCell(int index, String lable, HSSFCellStyle centerStyle,
            HSSFRow row, HSSFCell cell) {
        cell = row.createCell((short) index);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell.setCellStyle(centerStyle);
        cell.setCellValue(lable);
    }

    private void sheetIterator(int time, HSSFSheet sheet) {
        for (int i = 1; i < time; i++) {
            sheet.setColumnWidth((short) i,
                    (short) ((40 * 8) / ((double) 1 / 20)));
        }
    }

    private void setCellValue(int index, String value, HSSFRow row) {
        HSSFCell cell = null;
        cell = row.createCell((short) index);
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        cell.setCellValue(value);
    }

    private boolean cellNotBlank(HSSFCell cell) {
        if (cell != null && !Tools.isBlank(getStringCellValue(cell))) {
            return true;
        }
        return false;
    }

 

   private String getStringCellValue(HSSFCell cell){
        String value=null;
        switch(cell.getCellType())
        {
            case HSSFCell.CELL_TYPE_STRING:
                        value=cell.getStringCellValue().trim();break;
            case HSSFCell.CELL_TYPE_NUMERIC:
                        String number=String.valueOf(cell.getNumericCellValue());
                        value=number.substring(0,number.indexOf("."));break;
            case HSSFCell.CELL_TYPE_FORMULA:
                        value=String.valueOf(cell.getCellFormula()).trim();break;
            case HSSFCell.CELL_TYPE_BOOLEAN:
                        value=String.valueOf(cell.getBooleanCellValue()).trim();break;
        }
        return value;
    }
}

分享到:
评论

相关推荐

    ExcelDemo_Excel导出_下载_POI读excel_JXL读写excel_java读写excel_列宽_读取合并或拆分单元格内容

    以下是一个简单的POI读取Excel文件的例子: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import ...

    java poi操作excel小例子

    Apache POI 是一个流行的开源库,它允许开发者使用 Java 来读写 Microsoft Office 格式的文件,其中包括 Excel 工作簿(.xlsx 和 .xls 文件)。下面我们将深入探讨如何使用 Java POI 库来操作 Excel。 首先,我们...

    java 通过poi操作excel jar包

    Apache POI是一个开源项目,提供了丰富的API,使得Java开发者能够轻松地与MS Office格式交互,包括XLS(Excel 97-2003)和XLSX(Excel 2007及以后的版本)。 标题中的"java通过poi操作excel jar包"指的是使用Apache...

    java导出excel及POI3.10jar包

    以上就是一个简单的Java使用POI 3.10导出Excel的例子。实际应用中,你可能需要处理更复杂的数据结构,如循环创建多行多列,读取数据源填充内容,设置自定义样式等。同时,为了提高性能,可以考虑使用SXSSFWorkbook...

    完美解决java读取excel内存溢出问题.rar

    这个例子展示了如何使用SXSSFWorkbook来读取Excel文件,只保留100行数据在内存中,其他超出的行会被自动写入磁盘。处理完数据后,记得调用`dispose()`方法释放内存。 总结来说,解决Java读取Excel内存溢出问题,...

    java 使用POI框架读写excel doc

    以上就是使用Java的Apache POI框架读写Excel和Word文档的基本操作。实际应用中,你可能需要处理更复杂的情况,如样式设置、公式计算、图表操作等,这都需要进一步学习POI提供的高级API。在实践中不断探索和学习,你...

    java poi处理excel数据

    Java POI是Apache软件基金会下的一个开源项目,主要用于读写Microsoft Office格式的文件,特别是Excel。在Java开发中,当你需要处理Excel数据时,POI库是一个强大的工具。本压缩包包含了一些关键资源,帮助你理解和...

    java poi jxl 操作excel的小例子

    - JXL 是一个轻量级库,也用于读写Excel文件,但它的功能相对较弱,只支持 .xls 格式,不支持 .xlsx。 - 相比于 POI,JXL 的API更加简单易用,适合小型项目或简单的Excel操作。 接下来,我们将详细介绍如何使用...

    java上传并读取excel工具类

    Apache POI是一个广泛使用的开源库,它提供了API来创建、修改和读取Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。在Java中,我们可以使用Apache POI来实现Excel的读写操作。 1. **文件上传**: 在Java ...

    JXL读写Excel小例子

    总的来说,JXL是一个实用的工具,尤其适合那些不希望依赖于Microsoft Office或Apache POI库,但又需要在Java中处理Excel文件的开发者。通过这个"JXL读写Excel小例子",你应该已经对如何使用JXL进行基本的读写操作有...

    java中读取Excel例子

    本文将深入探讨如何使用Java来读取和写入Excel文件,以"java中读取Excel例子"为例,结合提供的文件"ExcellWriter.java",我们将详细讲解这个过程。 首先,Java中读取和写入Excel文件通常使用Apache POI库。Apache ...

    java利用poi对Excel进行读写操作支持多sheet格式

    Java中的Apache POI库是处理Microsoft Office文档的强大工具,尤其在Excel文件的读写操作上。本教程将深入探讨如何使用POI库处理多Sheet格式的Excel文件。 首先,我们需要理解Java POI的基本概念。Apache POI是一个...

    java 操作 读取 写入 excel POI

    Apache POI是一个流行的开源库,它允许程序员使用Java来创建、修改和显示Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文档。本篇文章将深入探讨如何使用POI进行Excel的读取和写入操作。 首先,要使用...

    java poi对于excel的读写与反射的结合使用

    在这个例子中,`readExcel`和`writeExcel`方法接受一个类类型参数,这样它们就可以通过反射获取该类的字段信息。在读取时,它会将每个单元格的数据对应到对象的相应字段;在写入时,它会遍历对象的所有字段并将其值...

    java excel解析jar包 poi

    本压缩包包含的"poi"文件很可能是Apache POI的特定版本或者一个简化版,用于简化Java开发者的工作流程。 Apache POI提供了一组API,允许开发人员在Java应用程序中创建、更新和读取Excel(XLS和XLSX)、Word(DOC和...

    java开发Excel所需 poi jxl两种jar包

    Apache POI是Apache软件基金会的一个开源项目,它提供了一个强大的API,允许Java开发者读取、写入和修改Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。POI库支持HSSF(Horrible Spreadsheet Format...

    java读写导出excel

    以下是一个简单的POI读取Excel文件的例子: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileInputStream; import ...

    Java使用poi读取Excel文件例子

    以下是一个基本示例,展示如何读取一个XLSX类型的Excel文件: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io....

Global site tag (gtag.js) - Google Analytics