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

下面直接列出使用方法:

<?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;

效果图:

PHPExcel的使用方法_数据

说明:

$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​

参考:​

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;
}
}