`

生成和解析excel文件

 
阅读更多

jxl.jar:下载地址:http://download.csdn.net/detail/xuxu198899223/7717737


package excel;


public class BookVO {

    public String bookName;
    
    public String bookAuthor;
    
    public String bookPrice;
    
    public String bookConcern;

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getBookAuthor() {
        return bookAuthor;
    }

    public void setBookAuthor(String bookAuthor) {
        this.bookAuthor = bookAuthor;
    }

    public String getBookPrice() {
        return bookPrice;
    }

    public void setBookPrice(String bookPrice) {
        this.bookPrice = bookPrice;
    }

    public String getBookConcern() {
        return bookConcern;
    }

    public void setBookConcern(String bookConcern) {
        this.bookConcern = bookConcern;
    }
    
    
}

2、生成excel文件:
package excel;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

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.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 * 生成excel文件
 * @author lizhiyong
 * @version $Id: ExcelOpt.java, v 0.1
		2014年8月5日 上午11:43:27 Exp $
 */
public class ExcelOpt {
    /**
    * 生成一个Excel文件 jxl
    * @param fileName 要生成的Excel文件名 
    * @jxl.jar 版本:2.6 
    */
    public static void writeExcel(String fileName) {
        WritableWorkbook wwb = null;
        try {
            //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象 
            wwb = Workbook.createWorkbook(new File(fileName));

        } catch (IOException e) {
            e.printStackTrace();
        }
        if (wwb != null) {
            //创建一个可写入的工作表 
            //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置 
            WritableSheet ws = wwb.createSheet("工作表名称", 0);

            //下面开始添加单元格 
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < 5; j++) {
                    //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行 
                    Label labelC = new Label(j, i, "这是第" + (i + 1) + "行,第" + (j + 1) + "列");
                    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文件POI
    * @param inputFile 输入模板文件路径 
    * @param outputFile 输入文件存放于服务器路径 
    * @param dataList 待导出数据 
    * @throws Exception 
    * @roseuid: 
    */

    @SuppressWarnings({ "rawtypes", "deprecation" })
    public static void exportExcelFile(String inputFile, String outputFile, List dataList)
                                                                                          throws Exception {
        //用模板文件构造poi 
        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));
        //创建模板工作表 
        HSSFWorkbook templatewb = new HSSFWorkbook(fs);
        //直接取模板第一个sheet对象 
        HSSFSheet templateSheet = templatewb.getSheetAt(1);
        //得到模板的第一个sheet的第一行对象 为了得到模板样式 
        HSSFRow templateRow = templateSheet.getRow(0);

        //HSSFSheet timplateSheet = templatewb.getSheetAt(1); 
        //取得Excel文件的总列数 
        int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();
        // Debug.println("columns is : " + columns); //=========================
        //创建样式数组 
        HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];

        //一次性创建所有列的样式放在数组里 
        for (int s = 0; s < columns; s++) {
            //得到数组实例 
            styleArray[s] = templatewb.createCellStyle();
        }
        //循环对每一个单元格进行赋值 
        //定位行 
        for (int rowId = 1; rowId < dataList.size(); rowId++) {
            //依次取第rowId行数据 每一个数据是valueList 
            List valueList = (List) dataList.get(rowId - 1);
            //定位列 
            for (int columnId = 0; columnId < columns; columnId++) {
                //依次取出对应与colunmId列的值 
                //每一个单元格的值 
                String dataValue = (String) valueList.get(columnId);
                //取出colunmId列的的style 
                //模板每一列的样式 
                HSSFCellStyle style = styleArray[columnId];
                //取模板第colunmId列的单元格对象 
                //模板单元格对象 
                HSSFCell templateCell = templateRow.getCell((short) columnId);
                //创建一个新的rowId行 行对象 
                //新建的行对象 
                HSSFRow hssfRow = templateSheet.createRow(rowId);
                //创建新的rowId行 columnId列 单元格对象 
                //新建的单元格对象 
                HSSFCell cell = hssfRow.createCell((short) columnId);
                //如果对应的模板单元格 样式为非锁定 
                if (templateCell.getCellStyle().getLocked() == false) {
                    //设置此列style为非锁定 
                    style.setLocked(false);
                    //设置到新的单元格上 
                    cell.setCellStyle(style);
                }
                //否则样式为锁定 
                else {
                    //设置此列style为锁定 
                    style.setLocked(true);
                    //设置到新单元格上 
                    cell.setCellStyle(style);
                }
                //设置编码 
                cell.setEncoding(HSSFCell.ENCODING_UTF_16);
                //Debug.println("dataValue : " + dataValue); 
                //设置值 统一为String 
                cell.setCellValue(dataValue);
            }
        }
        //设置输入流 
        FileOutputStream fOut = new FileOutputStream(outputFile);
        //将模板的内容写到输出文件上 
        templatewb.write(fOut);
        fOut.flush();

        //操作结束,关闭文件 
        fOut.close();

    }

    /**
    * 生成数据为XLS格式
    * @param filePath 生成Excel文件Path
    * @param dataList 要导入的数据
    */
    @SuppressWarnings("rawtypes")
    public static void writeExcelBo(String filePath, List dataList) {
        WritableWorkbook wwb = null;
        try {
            wwb = Workbook.createWorkbook(new File(filePath));
            WritableSheet ws = wwb.createSheet("上市新书", 10);
            ws.addCell(new jxl.write.Label(0, 1, "书名"));
            ws.addCell(new jxl.write.Label(1, 1, "作者"));
            ws.addCell(new jxl.write.Label(2, 1, "定价"));
            ws.addCell(new jxl.write.Label(3, 1, "出版社"));
            int bookSize = dataList.size();
            BookVO book = new BookVO();
            for (int i = 0; i < bookSize; i++) {
                book = (BookVO) dataList.get(i);
                ws.addCell(new jxl.write.Label(0, i + 2, "" + book.getBookName()));
                ws.addCell(new jxl.write.Label(1, i + 2, book.getBookAuthor()));
                ws.addCell(new jxl.write.Label(2, i + 2, "" + book.getBookPrice()));
                ws.addCell(new jxl.write.Label(3, i + 2, book.getBookConcern()));

            }
            // jxl.write.WritableFont wfc=
            //new jxl.write.WritableFont(WritableFont.ARIAL,255,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);
            //jxl.write.WritableCellFormat wcfFC= new jxl.write.WritableCellFormat(wfc);
            ws.addCell(new jxl.write.Label(0, 0, "2007年07月即将上市新书!"));
            wwb.write();
            // 关闭Excel工作薄对象
            wwb.close();
        } catch (IOException e) {
        } catch (RowsExceededException e) {

        } catch (WriteException e) {
        }
    }

    /**往Excel中插入图片 
    * @param dataSheet 待插入的工作表 
    * @param col 图片从该列开始 
    * @param row 图片从该行开始 
    * @param width 图片所占的列数 
    * @param height 图片所占的行数 
    * @param imgFile 要插入的图片文件 
    */
    public static void insertImg(WritableSheet dataSheet, int col, int row, int width, int height,
                                 File imgFile) {
        WritableImage img = new WritableImage(col, row, width, height, imgFile);
        dataSheet.addImage(img);
    }

    /**
     * 往Excel中插入图片 
     * @param file
     * @throws IOException 
     * @throws WriteException 
     */
    public static boolean insertImg(String filePath,String imgPath) throws IOException, WriteException {
        try {
            //创建一个工作薄 
            WritableWorkbook workbook = Workbook.createWorkbook(new File(filePath));
            //待插入的工作表 
            WritableSheet imgSheet = workbook.createSheet("Images", 0);
            //要插入的图片文件 
            File imgFile = new File(imgPath);
            //图片插入到第二行第一个单元格,长宽各占六个单元格 
            insertImg(imgSheet, 0, 1, 6, 6, imgFile);
            workbook.write();
            workbook.close();
            return true;
        } catch (IOException e) {
            throw e;
        } catch (WriteException e) {
            throw e;
        }
        
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void main(String[] args) throws WriteException, IOException {
        writeExcel("c:\\Test测试Excel.xls");
        System.out.println("OK");
        ArrayList list = new ArrayList();

        for (int i = 0; i < 10; i++) {
            BookVO book = new BookVO();
            book.setBookName("WebWork in action+" + i);
            book.setBookAuthor("李四+" + i);
            book.setBookPrice("39元+" + i);
            book.setBookConcern("飞思科技+" + i);
            list.add(book);
        }

        writeExcelBo("c:\\上市新书.xls", list);
        System.err.println("Book OK!!!");

        //System.out.println(insertImg("c:\\上市新书.xls","C:\\2.png"));
    }

}

3、解析excel文件:
package excel;

import java.io.File;
import java.io.IOException;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 * 解析excel文件
 * @author lizhiyong
 * @version $Id: ReadExcel.java, v 0.1
		2014年8月5日 上午11:43:44 Exp $
 */
public class ReadExcel {
    /**读取Excel文件的内容 
    * @param file 待读取的文件 
    * @return 
    */
    public static String readExcel(File file) {
        StringBuffer sb = new StringBuffer();

        Workbook wb = null;
        try {
            //构造Workbook(工作薄)对象 
            wb = Workbook.getWorkbook(file);
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        if (wb == null)
            return null;

        //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了 
        Sheet[] sheet = wb.getSheets();

        if (sheet != null && sheet.length > 0) {
            //对每个工作表进行循环 
            for (int i = 0; i < sheet.length; i++) {
                //得到当前工作表的行数 
                int rowNum = sheet[i].getRows();
                for (int j = 0; j < rowNum; j++) {
                    //得到当前行的所有单元格 
                    Cell[] cells = sheet[i].getRow(j);
                    if (cells != null && cells.length > 0) {
                        //对每个单元格进行循环 
                        for (int k = 0; k < cells.length; k++) {
                            //读取当前单元格的值 
                            String cellValue = cells[k].getContents();
                            sb.append(cellValue + "\t");
                        }
                    }
                    sb.append("\r\n");
                }
                sb.append("\r\n");
            }
        }
        //最后关闭资源,释放内存 
        wb.close();
        return sb.toString();
    }

    /**搜索某一个文件中是否包含某个关键字 
    * @param file 待搜索的文件 
    * @param keyWord 要搜索的关键字 
    * @return 
    */
    public static boolean searchKeyWord(File file, String keyWord) {
        boolean res = false;
        Workbook wb = null;
        try {
            //构造Workbook(工作薄)对象 
            wb = Workbook.getWorkbook(file);
        } catch (BiffException e) {
            return res;
        } catch (IOException e) {
            return res;
        }
        if (wb == null) {
            return res;
        }
        //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了 
        Sheet[] sheet = wb.getSheets();
        boolean breakSheet = false;
        if (sheet != null && sheet.length > 0) {
            //对每个工作表进行循环 
            for (int i = 0; i < sheet.length; i++) {
                if (breakSheet) {
                    break;
                }
                //得到当前工作表的行数 
                int rowNum = sheet[i].getRows();
                boolean breakRow = false;
                for (int j = 0; j < rowNum; j++) {
                    if (breakRow) {
                        break;
                    }
                    //得到当前行的所有单元格 
                    Cell[] cells = sheet[i].getRow(j);
                    if (cells != null && cells.length > 0) {
                        boolean breakCell = false;
                        //对每个单元格进行循环 
                        for (int k = 0; k < cells.length; k++) {
                            if (breakCell) {
                                break;
                            }
                            //读取当前单元格的值 
                            String cellValue = cells[k].getContents();
                            if (cellValue == null) {
                                continue;
                            }
                            if (cellValue.contains(keyWord)) {
                                res = true;
                                breakCell = true;
                                breakRow = true;
                                breakSheet = true;
                            }
                        }
                    }
                }
            }
        }
        //最后关闭资源,释放内存 
        wb.close();
        return res;
    }

    public static void main(String[] a) {
        String filePath = "c:\\上市新书.xls";
        File file = new File(filePath);
        System.out.println(readExcel(file));
        
        System.out.println(searchKeyWord(file,"出版社32"));
    }
}



分享到:
评论

相关推荐

    java利用POI生成与解析EXCEL所需JAR

    以上就是使用Java POI库生成和解析Excel文件的基本操作。在实际应用中,你可以根据需求进行更复杂的操作,如处理公式、图表、数据验证等。记得在操作完成后始终关闭工作簿和输入/输出流,以释放资源。此外,对于大型...

    生成和下载excel文件 生成和下载excel文件

    ### 生成和下载Excel文件知识点解析 在当前的软件开发领域中,经常需要将数据库中的数据导出为Excel文件,并提供给用户下载的功能。本文将详细介绍如何使用C#结合ADO.NET来实现这一功能,包括创建Excel文件、填充...

    qt解析excel直接生成ts文件

    标题"qt解析excel直接生成ts文件"涉及到的技术点主要有三个:Qt、XML解析以及多语言资源管理。这个过程通常是为了简化多语言支持的更新和维护,尤其是在有大量字符串需要翻译的情况下。 首先,Qt库提供了丰富的功能...

    解析excel、生成excel所需要的jar包

    在Java编程环境中,生成和解析Excel文件是一项常见的任务,尤其在数据分析、报表生成或数据导入导出场景下。为了实现这个功能,开发者通常会依赖一些第三方库,如Apache POI项目提供的API。以下是对给定标题和描述中...

    C# 生成和读取EXCEL文件

    本主题聚焦于如何使用C#来生成和读取Excel文件,这在数据处理和报告生成等领域非常常见。Excel文件(.xlsx)通常采用Microsoft Office的Open XML格式,这种格式允许开发者使用XML解析器或特定库来操作文件内容。 ...

    java 解析、生成 Excel XML 四个实例

    实例一:解析Excel文件 使用Apache POI库是Java中解析Excel文件的常见方式。POI提供了HSSF(旧版Excel .xls格式)和XSSF(新版本Excel .xlsx格式)API。以下是一个简单的读取Excel文件的例子: 1. 引入Apache POI库...

    java解析EXCEL文件实例

    在Java编程中,解析Excel文件是一项常见的任务,尤其在数据处理、数据分析或报表生成等场景中。本实例将深入探讨如何使用Java来读取和解析Excel文件,主要涉及的工具有Apache POI库,它是一个强大的API,允许我们与...

    excel文档解析和生成xml文件

    本主题将详细探讨如何使用Java的Apache POI库读取Excel文件,并利用JDOM库生成XML文件。 首先,Apache POI是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。在Java中,我们可以...

    POI 生成、解析excel,demo

    此外,POI 还支持读取和写入 PowerPoint 和 Word 文件,不过这些不在这个“POI 生成、解析excel,demo”的标签范围内。 对于提供的“poi-3.8”压缩包,这应该是 Apache POI 的一个旧版本。尽管较新的版本可能包含更...

    perl解析excel文件

    Perl是一种强大的脚本编程语言,尤其在文本处理和系统管理任务方面表现突出。...总的来说,使用Perl解析Excel文件是一项常见的任务,通过利用Perl的强大功能和丰富的生态系统,可以高效地完成数据提取和处理工作。

    LDF生成;位定义生成,Excel生成;LDF转Excel;Excel转LDF源码

    详情:可以通过客户给的Excel矩阵表通过配置生成LDF文件和位定义文件,也可以通过客户给的LDF文件生成Excel矩阵表和位定义文件, 附件里有demo模板,可自己创建配置ini文件。 具体使用说明:...

    java解析excel文件源码

    Java解析Excel文件是Java开发中常见的任务,尤其在数据处理、报表生成或数据分析等领域。Excel文件通常使用两种主要格式:老式的`.xls`(BIFF8格式)和较新的`.xlsx`(OOXML格式)。本示例关注的是`.xls`格式,因为...

    文件上传Excel解析相关的jar

    在上传并解析Excel文件后,我们可能需要将数据存储到数据库或进行进一步的数据处理。例如,可以遍历每个`Row`,获取`Cell`的值,然后根据业务逻辑进行处理。如果需要下载Excel,SpringMVC也提供了便捷的方式。可以...

    C++ 解析Excel文件, 不需要安装office libxl(最新的, 成功的)

    非常好的一个Excel解析库 里面提供了样例, 双击exe就可以看到效果. rar文件中的代码路径: libxl-3.1\libxl-3.1\libxl-3.1.0\examples\c++\vs2010\extract 更新了以下的版本: 结合: ...

    前端解析EXCEL.zip

    本文将详细探讨如何使用纯JavaScript在前端解析Excel文件,不依赖后端服务,且兼容各大主流浏览器。我们将主要关注以下几个关键知识点: 1. **Excel文件格式**: Excel文件通常以`.xlsx`为扩展名,采用OpenXML标准...

    导入Excel快速生成DTO

    1. Excel文件读取:解析Excel文件的行和列,识别数据类型和字段名。 2. Java Bean模板生成:根据Excel数据结构,自动生成符合命名规范的Java Bean类。 3. 注释添加:为生成的Java Bean类添加字段注释,方便理解每个...

    POI解析excel2007和生成excel2007.pdf

    POI解析excel2007和生成excel2007.pdf Apache POI 是一个开源的 Java 库,用于读取和写入各种 Microsoft Office 文件格式,包括 Excel、Word、PowerPoint 等。今天,我们将讨论如何使用 Apache POI 来解析 excel...

    java解析excel文件 jxl.jar

    Java解析Excel文件是Java开发中常见的任务,尤其是在处理数据导入导出、数据分析或者报表生成时。JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。在Java中,JXL.jar库提供了一种简单且高效的...

    java解析excel表格

    接下来,我们可以创建一个Java类,用于解析Excel文件。首先,我们需要创建一个`FileInputStream`对象来读取Excel文件,然后使用`WorkbookFactory.create()`方法创建一个`Workbook`对象,它是Excel文件的容器。例如:...

    解析excel、xml配置文件&&输出java测试文件Demo

    1. **解析Excel文件**: - Java中处理Excel文件主要使用Apache POI库。POI是Apache软件基金会的开放源代码项目,提供了API来读写Microsoft Office格式的文件,包括Excel。 - 使用POI,我们可以创建`HSSFWorkbook`...

Global site tag (gtag.js) - Google Analytics