Excel表单的读取与处理 PHPExcel与Apache POI

近日,连续遇到需要对Excel表单内容进行读取的需求。一个是在php环境下,一个是在java环境下。这里简要记录这两种环境,利用第三方提供的函数库对Excel进行处理的方法。
d0710 : Finish

==============================================================

  • 两个平台的简要介绍以及官方地址

  • PHPExcel的具体使用方法
    从官方GitHub下载得到如下文件
    文件列表

    将其放置当前工程内,其接口为PHPExcel.php。
    在目标文件中包含此入口:

    <?php
    require_once "./XXX/PHPExcel.php";
    ?>

    指定目标Excel文件:

    <?php
    $filename = "./Data/XXX.xls";
    $objReader = PHPExcel_IOFactory::createReaderForFile($filename);
    $objPHPExcel = $objReader->load($filename);
    ?>

    读取具体表格中的文件

    <?php
        $objPHPExcel->setActiveSheetIndex($SheetN);//读取第N表格
        $result = $objPHPExcel->getActiveSheet()->getCell("$X$Y")->getValue();//读取这个表格中的第XY个数据
    ?>

    故完整的流程如下:

    require_once "./XXX/PHPExcel.php";
    $filename = "./Data/XXX.xls";
    $objReader = PHPExcel_IOFactory::createReaderForFile($filename);
    $objPHPExcel = $objReader->load($filename);
    $objPHPExcel->setActiveSheetIndex($SheetN);
        $result = $objPHPExcel->getActiveSheet()->getCell("$X$Y")->getValue();
  • Apache POI的具体使用方法

    • 下载文件目录如下:
      文件路径2

    • 搭建环境:在目标工程右键选择Properties,选择如下对话框中的Java Build Path中的Libraries,再选择Add External JARs,添加刚才目录下的Poi-version-date.jar包即可。
      这里写图片描述

    • 总体思想:Apache POI提供了WorkBook类,Sheet类,Row类,Cell类。从输入流中依次读入WorkBook,从而获取Sheet,Row,从而获取Cell。可以读取Cell中的数据,或者修改此Cell内的数据。
      但是要注意的是,这时仅仅是修改了从输入流中读取的实例化的WorkBook类,若想输出该变化,最终要将WorkBook通过输出流来改变具体的文件。
      同时,Apache POI对空单元格的处理是,对于该cell的指针置空(null),故若想修改空的单元格,最好对目标Excel文件预处理,加入NULL关键字,即可获取其指针再对其值修改。

    • Apache POI处理示例:

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import org.apache.poi.hssf.usermodel.HSSFRichTextString;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    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;
    public class test {
    private static Workbook wb;
    private static int SheetNum = 0; //读取的表格号
    private static int CellNum = 0; //读取第几个cell
    
    public static void main(String[] args) throws Exception {
        String ifile = "IN.xls"; //输入文件的地址
        String ofile = "OUT.xls"; //输出文件的地址
        FileInputStream fis = new FileInputStream(ifile);
        FileOutputStream fos = new FileOutputStream(ofile);
        wb = new HSSFWorkbook(fis); //从输入流实例化workbook
        if (wb != null) {
            Sheet sheet = wb.getSheetAt(SheetNum); //打开workbook中SheetNum的表格
            int totalRows =  sheet.getPhysicalNumberOfRows(); //获取总行数
            for (int r = 1; r < totalRows; r++) { //遍历每一行的数据
                Row row = sheet.getRow(r);//获取第r行的row对象
                if (row == null) continue;
                Cell cell = row.getCell(CellNum);//获取第CellNum的数据,同时可以利用 row.getPhysicalNumberOfCells() 来遍历列
                String old = cell.getStringCellValue();//获取原cell内容
                if("NULL".equals(old)) old = ""; //若为标记单元格,清空
                old += "After modify";
                cell.setCellValue(new HSSFRichTextString(old));//设置修改后的内容
                wb.write(fos); //将workbook写入输出流
                System.out.println("Done");
                fos.close(); //关闭输入输出流
                fis.close();
    }
    }

转载于:https://www.cnblogs.com/he11o-liu/p/7503255.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值