将PHPExcel 类库放到 ThinkPHP 的 Vendor 目录下

在使用的地方 使用Vendor() 引入
/**
* 数据导入
* @param string $file excel文件
* @param string $subtype 节点id
* @return string 返回解析数据
* @throws PHPExcel_Exception
* @throws PHPExcel_Reader_Exception
*/
function importLedgerExecl($filename = '', $subtype)
{
Vendor('PHPExcel.PHPExcel'); //引入PHP EXCEL类
}
Excel 2005 和 2007 使用不同的方法加载
$extension = strrchr($filename, '.');
if ($extension == '.xlsx') {
$objReader = new \PHPExcel_Reader_Excel2007();
$objPHPExcel = $objReader->load($filename);
} else if ($extension == '.xls') {
$objReader = new \PHPExcel_Reader_Excel5();
$objPHPExcel = $objReader->load($filename);
}
获取Excel 内工作表数量[ Sheet ]
$sheetCount = $objPHPExcel->getSheetCount();
for ($i = 0; $i < $sheetCount; $i++)
{
$objWorksheet = $objPHPExcel->getSheet($i);
}
// 如果只有一个工作表
// $objWorksheet = $objPHPExcel->getActiveSheet();
获取工作表名称
$sheetTitle = $objWorksheet->getTitle();
获取Excel 最大行数
$highestRow = $objWorksheet->getHighestRow();
获取Excel 最大列数
$highestColumn = $objWorksheet->getHighestColumn();
将列名称转换为数字 [ A->0 ,B->1]【如果列数超过Z列,自行百度处理方法】
$highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn);
获取公式的值
getFormattedValue()
获取文本值
getValue()
循环行列获取单元格内的数据
// 第二行开始是数据
$excelData = array();
for ($row = 2; $row <= $highestRow; $row++) {
//根据第二行获取第0列的值
$indexColVal = (string)$objWorksheet->getCellByColumnAndRow(0, $row)->getValue();
//如果第二行第一列的值为空则结束遍历
if ($indexColVal == '') {
break;
}
for ($col = 0; $col < $highestColumnIndex; $col++) {
$excelData[$row][] = (string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
}
获取Excel 文档中所有图片
// 返回值为集合
//$objWorksheet->getDrawingCollection()
foreach ($objWorksheet->getDrawingCollection() as $drawing) {
}
获取图片所在行和列[ Excel 内图片和文本值是分开的,所以如果既要读取文本又要读取图片,必须分开的读取 ]
list($startColumn, $startRow) = \PHPExcel_Cell::coordinateFromString($drawing->getCoordinates());
获取图片的路径
$fileName = $drawing->