总有那么人,放着美丽的管理平台不用,偏要你做导入导出Excel, 返璞归真吗 ?!!
GitHub地址
PHPExcel:
https://github.com/PHPOffice/PHPExcel
PhpSpreadsheet:
https://github.com/PHPOffice/PhpSpreadsheet
PHPExcel读excel表
public function exportNews(){
//文件上传代码略...
$splInfo = null;
if ($splInfo) {
$filePath = $splInfo->getRealPath() ?: $splInfo->getPathname();
//创建excel读对象
$reader = \PHPExcel_IOFactory::createReader('Excel5');
//得到excel操作对象
$excel = \PHPExcel_IOFactory::load($filePath);
//放入数组
$data = array();
//获取所有工作表名
$SheetNamas = $excel->getSheetNames();
//遍历工作表
for($i = 0; $i < count($SheetNamas); $i++){
//获取当前工作表名
$SheetName = $SheetNamas[$i];
//根据表名切换当前工作表
$excel->setActiveSheetIndexByName($SheetName);
//得到当前工作表对象
$curSheet = $excel->getActiveSheet();
//获取当前工作表最大行数
$rows = $curSheet->getHighestRow();
//获取当前工作表最大列数,返回的是最大的列名,如:B
$cols = $curSheet->getHighestColumn();
//将当前工作表名当键,内容为值存入数组
$data[$SheetName] = array();
//大写字母A的ASCII值是65 A-Z对应65-90
for($j = 'A'; $j <= $cols; $j++ ){
for($k = 1; $k <= $rows; $k++){
$key = $j.$k;
$value = $curSheet->getCell($key)->getValue();
$data[$SheetName][$key] = $value;
}
}
}
print_r($data);exit;
$this->success(__('Upload successful'), null, [
'url' => $uploadDir . $splInfo->getSaveName()
]);
} else {
// 上传失败获取错误信息
$this->error($file->getError());
}
}
PHPExcel写Excel
//数据插入到excel
public function pushExcel($ids = null){
$data = Db::table('fa_news')->field('id,title,content,status,sort,img,create_time,update_time')->select();
//1.文件的创建
//创建PHPExcel对象
$objPHPExcel = new \PHPExcel();
//写入excel操作
//使用工厂的方式创建excel写入对象
//第二个参数可以写'excel2007'或者 ''Excel5''
// $writer = PHPExcel_IOFactory::createWriter($obj, 'Excel5');
//$writer = \PHPExcel_IOFactory::createWriter($obj, 'excel2007');
//或如下方式
//$writer = new PHPExcel_Writer_Excel5($obj);
$letter = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H');
//表头数组
$tableheader = array('ID', '标题', '内筒', '状态值', '排序', 'img', '创建时间','更新时间');
//填充表头信息
for ($i = 0; $i < count($tableheader); $i++) {
$objPHPExcel->getActiveSheet()->setCellValue("$letter[$i]1", "$tableheader[$i]");
}
$excelName = date('Y-m-d') . '-' .mt_rand(100, 999);
/*以下就是对处理Excel里的数据,横着取数据,主要是这一步,其他基本都不要改*/
foreach ($data as $k => $v) {
$num = $k + 1 + 1;
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A' . $num, $v['id'])
->setCellValue('B' . $num, $v['title'])
->setCellValue('C' . $num, $v['content'])
->setCellValue('D' . $num, ($v['status'] == 1) ? '显示' : '隐藏')
->setCellValue('E' . $num, $v['sort'])
->setCellValue('F' . $num, $v['img'])
->setCellValue('G' . $num, $v['create_time'])
->setCellValue('H' . $num, $v['update_time']);
}
$objPHPExcel->getActiveSheet()->setTitle('测试');
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel;charset=UTF-8"');
header('Content-Disposition: attachment;filename="' . $excelName . '.xls"');
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
PhpSpreadsheet 写 excel:
function export()
{
//require_once __DIR__ . '/vendor/autoload.php';
$data = [
['title1' => '111', 'title2' => '222'],
['title1' => '111', 'title2' => '222'],
['title1' => '111', 'title2' => '222']
];
$title = ['第一行标题', '第二行标题'];
// Create new Spreadsheet object
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 方法一,使用 setCellValueByColumnAndRow
//表头
//设置单元格内容
foreach ($title as $key => $value) {
// 单元格内容写入
$sheet->setCellValueByColumnAndRow($key + 1, 1, $value);
}
$row = 2; // 从第二行开始
foreach ($data as $item) {
$column = 1;
foreach ($item as $value) {
// 单元格内容写入
$sheet->setCellValueByColumnAndRow($column, $row, $value);
$column++;
}
$row++;
}
// 方法二,使用 setCellValue
//表头
//设置单元格内容
$titCol = 'A';
foreach ($title as $key => $value) {
// 单元格内容写入
$sheet->setCellValue($titCol . '1', $value);
$titCol++;
}
$row = 2; // 从第二行开始
foreach ($data as $item) {
$dataCol = 'A';
foreach ($item as $value) {
// 单元格内容写入
$sheet->setCellValue($dataCol . $row, $value);
$dataCol++;
}
$row++;
}
// Redirect output to a client’s web browser (Xlsx)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');
exit;
}
PhpSpreadsheet 读excel:
public function readExcel(){
$inputFileName = ROOT_PATH . 'public/01simple.xlsx';
// $inputFileName = ROOT_PATH . 'public/222.xls';
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
print_r($sheetData);
exit;
}
PHPExcel mark:
https://www.cnblogs.com/52lnamp/category/1231737.html
https://www.cnblogs.com/makalochen/p/12834440.html
PhpSpreadsheet mark:
https://www.cnblogs.com/woods1815/p/11372007.html