PHP:使用PHPExcel完成电子表格文件的导出下载和导入操作

view页面:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="../../js/lib/jquery/jquery-1.7.2.min.js"></script>
    </head>
    <body>
        <div>
            <form action="../../src/controller/PHPExcel.php?type=report" method="post">
                <input type="submit" id="excel_report" value="导出"/>
            </form>
            <hr/>
            <form action="../../src/controller/PHPExcel.php?type=import" method="post" enctype="multipart/form-data">
                <input type="file" name="inputExcel">
                <input type="submit" value="导入数据">
            </form>
        </div>
        <script>
            (function() {
            })();
        </script>
    </body>
</html>

后台逻辑处理文件:

<?php

/*
 * PHPExcel.php 使用PHPExcel完成文件的导出下载和导入操作
 * @author zyb_icanplay7 <zyb_icanplay@163.com>
 */
$operation = $_GET['type'];
switch ( $operation ) {
    case 'report':
        //路径按自己项目实际路径修改,文件请到PHPExcel官网下载
        include_once '../../plugin/PHPExcel/PHPExcel.php';
        include_once '../../plugin/PHPExcel/PHPExcel/Writer/Excel2007.php';
        //或者include 'PHPExcel/Writer/Excel5.php'; 用于输出.xls的
        //创建一个excel
        $objPHPExcel = new PHPExcel();
        //保存excel—2007格式
        $objWriter = new PHPExcel_Writer_Excel2007( $objPHPExcel );
        //或者$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel); 非2007格式
        //
        //设置excel的属性:
        //创建人
        $objPHPExcel->getProperties()->setCreator( "ZYB" );
        //最后修改人
        $objPHPExcel->getProperties()->setLastModifiedBy( "ZYB" );
        //标题
        $objPHPExcel->getProperties()->setTitle( "Office 2007 XLSX Test Document" );
        //题目
        $objPHPExcel->getProperties()->setSubject( "Office 2007 XLSX Test Document" );
        //描述
        $objPHPExcel->getProperties()->setDescription( "Test document for Office 2007 XLSX, generated using PHP classes." );
        //关键字
        $objPHPExcel->getProperties()->setKeywords( "office 2007 openxml php" );
        //种类
        $objPHPExcel->getProperties()->setCategory( "Test result file" );
        //
        //设置当前的sheet
        $objPHPExcel->setActiveSheetIndex( 0 );
        //设置sheet的name
        $objPHPExcel->getActiveSheet()->setTitle( '导出表测试' );
        //设置单元格的值
        $subTitle = array( '账号', '姓名', '性别', '地址', '电话', '事由', '复读' );
        $datas = array(
            0 => array( 'ZhangSan', '张三', '男', '广东', '1232323443', '实得分', 1 ),
            1 => array( 'ZhangSan2', '张三2', '男', '广东2', '13454444433', '实得分2', 2 ),
        );
        $colspan = range( 'A', 'G' );
        $count = count( $subTitle );
        // 标题输出
        for ( $index = 0; $index < $count; $index++ ) {
            $col = $colspan[$index];
            $objPHPExcel->getActiveSheet()->setCellValue( $col . '1', $subTitle[$index] );
            //设置font
            $objPHPExcel->getActiveSheet()->getStyle( $col . '1' )->getFont()->setName( 'Candara' );
            $objPHPExcel->getActiveSheet()->getStyle( $col . '1' )->getFont()->setSize( 15 );
            $objPHPExcel->getActiveSheet()->getStyle( $col . '1' )->getFont()->setBold( true );
            $objPHPExcel->getActiveSheet()->getStyle( $col . '1' )->getFont()->getColor()
                    ->setARGB( PHPExcel_Style_Color::COLOR_WHITE );

            //设置填充色彩  
            $objPHPExcel->getActiveSheet()->getStyle( $col . '1' )->getFill()
                    ->setFillType( PHPExcel_Style_Fill::FILL_SOLID );
            $objPHPExcel->getActiveSheet()->getStyle( $col . '1' )->getFill()->getStartColor()->setARGB( 'FF808080' );
            // align 设置居中
            $objPHPExcel->getActiveSheet()->getStyle( $col . '1' )->getAlignment()
                    ->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER );
            if ( $subTitle[$index] == '电话' ) {
                // 设置宽度
                $objPHPExcel->getActiveSheet()->getColumnDimension( $col )->setWidth( 40 );
            }
        }
        // 内容输出
        foreach ( $datas as $key => $value ) {
            $colNumber = $key + 2; //第二行开始才是内容
            foreach ( $colspan as $colKey => $col ) {
                $objPHPExcel->getActiveSheet()->setCellValue( $col . $colNumber, $value[$colKey] );
            }
        }
        //
        //在默认sheet后,创建一个worksheet  
        $objPHPExcel->createSheet();
        $fileName = "xxx.xlsx";
        $objWriter->save( $fileName );
        download( $fileName, true );
        break;

    case 'import':
        //路径按自己项目实际路径修改,文件请到PHPExcel官网下载
        include_once '../../plugin/PHPExcel/PHPExcel.php';
        include_once '../../plugin/PHPExcel/PHPExcel/IOFactory.php';
        include_once '../../plugin/PHPExcel/PHPExcel/Reader/Excel5.php';

        $fileName = $_FILES['inputExcel']['name'];
        $fileTmpAddr = $_FILES['inputExcel']['tmp_name'];
        //获取上传文件的扩展名
        $extend = strrchr( $fileName, '.' );
        //上传后的文件名
        $fileDesAddr = '../../upload/' . date( "Y-m-d-H-i-s" ) . $extend; //上传后的文件名地址
        $result = move_uploaded_file( $fileTmpAddr, $fileDesAddr );
        if ( $result ) {
            $readerType = ($extend == ".xlsx") ? "Excel2007" : "Excel5";
            $objPHPExcel = PHPExcel_IOFactory::createReader( $readerType )->load( $fileDesAddr );
            $sheet = $objPHPExcel->getSheet( 0 );
            $highestRow = $sheet->getHighestRow(); // 取得总行数 
            $highestColumn = $sheet->getHighestColumn(); // 取得总列数
            $colspan = range( 'A', $highestColumn );
            $datas = array( );
            //循环读取excel文件
            for ( $j = 2; $j <= $highestRow; $j++ ) {
                $array = array( );
                foreach ( $colspan as $value ) {
                    $array[] = $objPHPExcel->getActiveSheet()->getCell( $value . $j )->getValue();
                }
                $datas[] = $array;
            }
            //读取完成,最后删除文件
            unlink( $fileDesAddr );
        }
        echo '<pre>';
        print_r( $datas );
        exit;
        break;
}

//==============================================================================================
function download( $fileName, $delDesFile = false, $isExit = true ) {
    if ( file_exists( $fileName ) ) {
        header( 'Content-Description: File Transfer' );
        header( 'Content-Type: application/octet-stream' );
        header( 'Content-Disposition: attachment;filename = ' . basename( $fileName ) );
        header( 'Content-Transfer-Encoding: binary' );
        header( 'Expires: 0' );
        header( 'Cache-Control: must-revalidate, post-check = 0, pre-check = 0' );
        header( 'Pragma: public' );
        header( 'Content-Length: ' . filesize( $fileName ) );
        ob_clean();
        flush();
        readfile( $fileName );
        if ( $delDesFile ) {
            unlink( $fileName );
        }
        if ( $isExit ) {
            exit;
        }
    }
}
?>


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 使用 EasyExcel 进行简单的表格导入导出功能,需要遵循以下步骤: 1. 安装 EasyExcel 使用 composer 安装 EasyExcel: ```bash composer require alibaba/easyexcel ``` 2. 导出 Excel ```php use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; use AlibabaCloud\Ecs\Ecs; require_once __DIR__ . '/vendor/autoload.php'; use EasyExcel\Factory; // 定义导出数据 $data = [ ['姓名', '年龄', '性别'], ['张三', 20, '男'], ['李四', 25, '女'], ['王五', 30, '男'], ]; // 导出 Excel $exportFile = 'example.xlsx'; $exportPath = __DIR__ . '/' . $exportFile; $writer = Factory::createWriter('Xlsx'); $writer->openToFile($exportPath); $writer->addRows($data); $writer->close(); // 下载 Excel header('Content-type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename="' . $exportFile . '"'); readfile($exportPath); exit; ``` 3. 导入 Excel ```php use AlibabaCloud\Client\AlibabaCloud; use AlibabaCloud\Client\Exception\ClientException; use AlibabaCloud\Client\Exception\ServerException; use AlibabaCloud\Ecs\Ecs; require_once __DIR__ . '/vendor/autoload.php'; use EasyExcel\Factory; // 上传 Excel $importFile = $_FILES['file']['tmp_name']; // 导入 Excel $reader = Factory::createReader('Xlsx'); $reader->open($importFile); $data = $reader->getSheetData(); // 处理导入数据 array_shift($data); // 去掉表头 foreach ($data as $row) { $name = $row[0]; $age = $row[1]; $gender = $row[2]; // 处理数据... } ``` ### 回答2: EasyExcel是一个基于Java的开源框架,用于在Excel文件和Java对象之间进行简单、高效的导入导出操作。虽然问题中提到了"easyexcel php",但实际上EasyExcel是Java库,并没有针对PHP的版本。 使用EasyExcel进行表格导入导出功能非常简单。首先,我们需要引入EasyExcel的依赖库,在项目中创建一个Excel导入导出的工具类。在这个工具类中,我们可以定义导入方法和导出方法。 对于导入功能,我们需要调用EasyExcel提供的方法,传入要导入的Excel文件路径和导入后的数据处理器。数据处理器可以是实现了EasyExcel的ReadListener接口的类,这样我们可以在读取Excel数据完成后对数据进行自定义处理。 对于导出功能,我们需要将要导出的数据转化为相应格式,并调用EasyExcel提供的写方法,指定导出的Excel文件路径和数据源即可。 总的来说,EasyExcel提供的API非常简洁易用,可以大大简化我们对Excel文件导入导出操作。无论是简单的还是复杂的表格导入导出功能,都可以轻松实现。 ### 回答3: EasyExcel是一款基于Java语言开发的开源库,可以轻松实现Excel文件的读写操作。但是您的问题中提到的是PHP语言,由于EasyExcel是基于Java语言的库,所以无法直接在PHP使用它。 不过,您可以通过其他方式来实现PHP中的表格导入导出功能。PHP提供了PHPExcel库,也是一个开源、易于使用的Excel文件操作工具。它可以帮助我们在PHP中读取和写入Excel文件。 对于表格导出,您可以使用PHPExcel提供的相关类和方法来创建一个Excel文件,并通过设置单元格的值、样式和格式来填充数据。最后,使用PHPExcel提供的方法将文件保存为Excel格式。 对于表格导入,您可以使用PHPExcel提供的相关类和方法来打开一个已存在的Excel文件,并通过遍历和读取单元格的值来读取数据。可以根据文件中的格式和结构来逐行或逐列地读取数据,并进行后续的处理和操作。 总结来说,虽然没有使用EasyExcel库,但是通过使用PHPExcel库,我们同样可以在PHP中实现简单的表格导入导出功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值