PHPExcel的使用方法

首先需要申明的是,直接用会报错,则个文件很多地方都有问题,我这个是更正过后的效果。更正过程请参考:

http://blog.csdn.net/zhezhebie/article/details/76974534

下面直接列出使用方法:

<?php
//屏蔽所有错误
error_reporting(0);
require_once 'Excel/reader.php';

$data = new SpreadsheetExcelReader();

// Set output Encoding.
$data->setOutputEncoding('utf-8');


//测试你要打开的xls文件,自带的那个cvs文件已经损坏,这是我用WPS编写的一个xls文件,就正常编辑
$data->read('test.xls');

// 表的行数
$numRows = $data->sheets[0]['numRows'];
//表的列数
$numCols = $data->sheets[0]['numCols'];
//表里面的数据,二维数组格式
echo "<pre>";
print_r($data->sheets[0]['cells']);
echo "</pre>";
exit;

效果图:
这里写图片描述

说明:


$data->sheets[0]['numRows'] - count rows
$data->sheets[0]['numCols'] - count columns
$data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column

$data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell

$data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
if 'type' == "unknown" - use 'raw' value, because  cell contain value with format '0.00';
$data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
$data->sheets[0]['cellsInfo'][$i][$j]['colspan']
$data->sheets[0]['cellsInfo'][$i][$j]['rowspan']

复杂的例子:
批量导入n个excel文件数据到数据库。

<?php

//显示所有错误
// error_reporting(-1);

//屏蔽所有错误
error_reporting(0);

//不限制php执行时间
set_time_limit(0);

//引入需要的文件
require_once 'Excel/reader.php';
require '../pdo_ht_location.php';

//取出所有的文件路径
$all_files = read_all_dir('../data');
$files = $all_files['file'];

foreach ($files as $key => $file) {
    preg_match('/\d+/', $file, $arr);
    $int = 'K' . $arr[0];
    
    //实例化excelReader,不知道怎么优化,如果有更好的方法,请留言
    $data = new SpreadsheetExcelReader();
    
    //设置字符集
    $data->setOutputEncoding('utf-8');
    
    //读取文件内容
    $data->read($file);

	//取出表格里面的数据,变成数组
    $aa = $data->sheets[0]['cells'];
    
    //去除第一个数据,也就是表头
    array_shift($aa);

    foreach ($aa as &$v) {
        array_push($v, $int);
        
        //转义单双引号,不然数据库会报错
        $v[2] = addslashes($v[2]);
		//组合sql语句
        $sql = "INSERT INTO `lesson_data`(page_no, page_title, data, template_num) VALUES('{$v[1]}','{$v[2]}','{$v[3]}','{$v[4]}') ;";
        //执行sql语句
        $pdo->exec($sql);
        // die($sql);
    }
}

//递归遍历所有目录
function read_all_dir($dir) {
    $result = array();
    $handle = opendir($dir);
    if ($handle) {
        while (($file = readdir($handle)) !== false) {
            if ($file != '.' && $file != '..') {
                $cur_path = $dir . DIRECTORY_SEPARATOR . $file;
                if (is_dir($cur_path)) {
                    $result['dir'][$cur_path] = read_all_dir($cur_path);
                } else {
                    $result['file'][] = $cur_path;
                }
            }
        }
        closedir($handle);
    }
    return $result;
}

================== 分割线 2019-12-04 =============
老项目用的phpexcel,上面的那个更老。这个例子来自:

github地址:https://github.com/PHPOffice/PHPExcel

参考:https://blog.csdn.net/lamp_yang_3533/article/details/69055144

PHPExcel/PHPExcel下载:

/**
 * 导出excel表格(适合没有单元格合并的情况)
 * @param array $data 二维数组
 * @param array $table_head 表头(即excel工作表的第一行标题)
 * @param array $exclude 不需要的字段
 * @param string $file_name 文件名
 * @param string $sheet_name 工作表名
 */
public function simple_export_excel(array $table_head = array(), array $data = array(), array $exclude = array(), $file_name = 'excel', $download = 1, $sheet_name = 'sheet') {
    App::import('Vendor', 'PHPExcel/PHPExcel/IOFactory');
    App::import('Vendor', 'PHPExcel/PHPExcel');

    $objPHPExcel = new PHPExcel();  // 创建PHPExcel对象

    // 设置excel文件的属性,在excel文件->属性->详细信息,可以看到这些值
    $objPHPExcel->getProperties()  //获得文件属性对象,给下文提供设置资源
                ->setCreator("admin")     //设置文件的创建者
                ->setLastModifiedBy("admin")    //最后修改者
                ->setTitle("Office 2007 XLSX Record Document" )    //标题
                ->setSubject("Office 2007 XLSX Record Document" )  //主题
                ->setDescription("Record document for Office 2007 XLSX, generated using PHP classes.") //描述
                ->setKeywords("office 2007 openxml php")    //关键字
                ->setCategory("export file");               //类别

    // 设置Excel文档的第一张sheet(工作表)为活动表,即当前操作的表。
    $objPHPExcel->setActiveSheetIndex(0);

    // 获取当前操作的工作表
    $activeSheet = $objPHPExcel->getActiveSheet();

    // 设置工作表的名称
    $activeSheet->setTitle($sheet_name);

    // 返回字符A的  ASCII 码值
    $column = ord('A');

    // 设置工作表的表头
    foreach ($table_head as $k=>$v) {
        // 字体大小
        $activeSheet->getStyle(chr($column)."1")->getFont()->setSize(13);
        // 加粗
        $activeSheet->getStyle(chr($column)."1")->getFont()->setBold(true);
        // 列宽
        $chars = strlen($v);   // 统计字节数
        $activeSheet->getColumnDimension(chr($column))->setWidth($chars*2);
        // 设置单元格的值
        $activeSheet->setCellValue(chr($column)."1", $v);
        // 设置左对齐
        $activeSheet->getStyle(chr($column))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

        $column++;
    }

    $column = ord('A');   // 返回字符的  ASCII 码值
    // 将$data中的数据填充到单元格中
    foreach ($data as $row=>$col) {
        $i=0;
        foreach ($col as $k=>$v ) {
            // 排除一些key值 by yangshuiping 2019-12-03
            if (!in_array($k, $exclude) || empty($exclude)) {
                $activeSheet->setCellValue(chr($column+$i).($row+2), $v);
                $i++;
            }
        }
    }

    // 导出Excel表格
    $file_name .= date('Ymd_His');   // 文件名
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
    // $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

    if ($download) {
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'. $file_name .'.xlsx"');
        // header('Content-Disposition: attachment;filename="'.$file_name.'.xls"');
        header('Cache-Control: max-age=0');
        $objWriter->save('php://output');
        exit;
    }else{
        $file_path = WWW_ROOT . "cache/attach/" . $file_name . '.xlsx';//#hardcode
        $objWriter->save($file_path);
        return $file_path;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SHUIPING_YANG

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值