链接:https://pan.baidu.com/s/1crwJuRH9hEJfZYya4j-hyw 密码:wq06
导入包下载....中间出了点bug,无法导出 发现这个包只能5.5+
//导出所有
public function export()
{
$tzw = D('jishu');
$list = $tzw->select();
ini_set('memory_limit', '1000M');
date_default_timezone_set('Asia/Shanghai');
require_once 'Public/PHPExcel/PHPExcel.php';
$cacheMethod = \PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array(' memoryCacheSize ' => '8MB');
\PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$objPHPExcel = new \PHPExcel();
$objActSheet = $objPHPExcel->getActiveSheet();
// 设置垂直居中
$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getProperties()
->setCreator('mall')
->setLastModifiedBy('mall')
->setTitle('Office 2007 XLSX Document')
->setSubject('Office 2007 XLSX Document')
->setDescription('Document for Office 2007 XLSX, generated using PHP classes.')
->setKeywords('office 2007 openxml php')
->setCategory('Result file');
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '名称')
->setCellValue('B1', '型号')
->setCellValue('C1', '图片')
->setCellValue('D1', '参数')
->setCellValue('E1', '单价')
->setCellValue('F1', '技术参数');
foreach ($list as $k => $v) {
$k += 2;
$objActSheet->setCellValue('A' . $k, $v['mingcheng']);
// 图片生成
$objDrawing[$k] = new \PHPExcel_Worksheet_Drawing();
$objDrawing[$k]->setPath('Public/upload/' . $v['tupian']);
// 设置宽度高度
$objDrawing[$k]->setHeight(150);//照片高度
$objDrawing[$k]->setWidth(150); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing[$k]->setCoordinates('C' . $k);
// 图片偏移距离
$objDrawing[$k]->setOffsetX(15);
$objDrawing[$k]->setOffsetY(15);
$objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());
if ($v['jiance']) {
// 图片生成
$objDrawing1[$k] = new \PHPExcel_Worksheet_Drawing();
$objDrawing1[$k]->setPath('Public/upload/' . $v['jiance']);
// 设置宽度高度
$objDrawing1[$k]->setHeight(200);//照片高度
$objDrawing1[$k]->setWidth(150); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing1[$k]->setCoordinates('F' . $k);
// 图片偏移距离
$objDrawing1[$k]->setOffsetX(15);
$objDrawing1[$k]->setOffsetY(15);
$objDrawing1[$k]->setWorksheet($objPHPExcel->getActiveSheet());
}
// 表格内容
$objActSheet->setCellValue('E' . $k, $v['danjia']);
$objActSheet->setCellValue('B' . $k, $v['xinghao']);
// 表格高度
$objActSheet->getRowDimension($k)->setRowHeight(200);
$objActSheet->setCellValue('D' . $k, str_replace("|", "\n", $v["canshu"]));
//设置自动换行
$objActSheet->getStyle('D' . $k)->getAlignment()->setWrapText(true);
}
//设置宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(25);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(50);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(35);
$objPHPExcel->getActiveSheet()->setTitle('技术参数信息');
$objPHPExcel->setActiveSheetIndex(0);
$filename = '技术参数' . date('Ymd') . '.xls';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
}
<?php
set_time_limit(0);
ini_set('memory_limit', '128M');
$fileName = date('YmdHis', time());
header('Content-Type: application/vnd.ms-execl');
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
$begin = microtime(true);
//打开php标准输出流
//以写入追加的方式打开
$fp = fopen('php://output', 'a');
$db = new mysqli('127.0.0.1', 'root', '', 'test');
if($db->connect_error) {
die('connect error');
}
//我们试着用fputcsv从数据库中导出1百万的数据
//我们每次取1万条数据,分100步来执行
//如果线上环境无法支持一次性读取1万条数据,可把$nums调小,$step相应增大。
$step = 100;
$nums = 10000;
//设置标题
$title = array('ID', '用户名', '用户年龄', '用户描述', '用户手机', '用户QQ', '用户邮箱', '用户地址');
foreach($title as $key => $item) {
$title[$key] = iconv('UTF-8', 'GBK', $item);
}
//将标题写到标准输出中
fputcsv($fp, $title);
for($s = 1; $s <= $step; ++$s) {
$start = ($s - 1) * $nums;
$result = $db->query("SELECT * FROM tb_users ORDER BY id LIMIT {$start},{$nums}");
if($result) {
while($row = $result->fetch_assoc()) {
foreach($row as $key => $item) {
//这里必须转码,不然会乱码
$row[$key] = iconv('UTF-8', 'GBK', $item);
}
fputcsv($fp, $row);
}
$result->free();
//每1万条数据就刷新缓冲区
ob_flush();
flush();
}
}
$end = microtime(true);
echo '用时:', $end - $begin;
网友评论