PHP导出CSV

原生实现

$sql = 'select * from user';
$pdo = new \PDO('mysql:host=127.0.0.1;dbname=test', 'root', 'root');
$pdo->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$rows = $pdo->query($sql);
$filename = date('Ymd') . '.csv'; //设置文件名
header('Content-Type: text/csv');
header("Content-Disposition: attachment;filename={$filename}");
$out = fopen('php://output', 'w');
fputcsv($out, ['id', 'username', 'password', 'create_time']);
 
foreach ($rows as $row) {
    $line = [$row['id'], $row['username'], $row['password'], $row['create_time']];
 
    fputcsv($out, $line);
}
 
fclose($out);
$memory = round((memory_get_usage() - $startMemory) / 1024 / 1024, 3) . 'M' . PHP_EOL;
file_put_contents('/tmp/test.txt', $memory, FILE_APPEND);

解决中文乱码

$str = mb_convert_encoding($str,'gb2312','utf-8');

读取日期问题

$t = 41807; //读取到的值
$n = intval(($t - 25569) * 3600 * 24); //转换成1970年以来的秒数
echo gmdate('Y-m-d H:i:s',$n);//格式化时间,不是用date哦, 时区相差8小时的

也可以用 \PHPExcel_Shared_Date::ExcelToPHP()    这个函数变成时间戳

导出CSV,不会出现文档格式问题:(丢失前导0,暂无解决,目前加#)

<?php 

/**
 * VIP导出
 * @author   Hannibal
 */

ini_set('memory_limit','1024M');
set_time_limit(0);

$mysqli = new mysqli('localhost', 'root', 'root', 'xxx');

if (mysqli_connect_errno()){
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$sql="select u_user,sum(u_str_1) from data where u_type = 1 group by u_user";

$res=$mysqli->query($sql);
header('Content-Type: application/vnd.ms-excel;charset=gbk');
header('Content-Disposition: attachment;filename="用户导出.csv"');
header('Cache-Control: max-age=0');
$fp = fopen('php://output', 'a');
$head = array(
    0 => '用户名',
	1 => '本月XX'
);
foreach ($head as $i => $v){
	$head[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $head);
if($res){
    while($row=mysqli_fetch_array($res,MYSQLI_ASSOC)){
	 	$row['u_user']='#'.$row['u_user'];
	    fputcsv($fp, $row);
	}
}else{
    die("fetch data failed!");
}

//释放游标内存
mysqli_free_result($res); 
//关闭数据库连接
mysqli_close($mysqli);

?>

PHPEXCEL使用教程:

首先下载PHPExcel

到https://github.com/PHPOffice/PHPExcel下载PHPExcel,如果不懂得使用git,可以到这https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8下载压缩包,懂得的自行用git下载。

下载好文件,解压可以得到如下文件:

PHPExcel

好了,现在我们就可以用PHPExcel愉快的读取和制作表格了!

PHPExcel DEMO1:利用PHPExcel读取excel信息

我们在根目录创建一个名为read.php的文件来读取文档,创建一个test.xlsx的文件,里面写的信息如下:

然后在read.php写以下代码:

<?php
include './Classes/PHPExcel/IOFactory.php';

$inputFileName = './test.xls';
date_default_timezone_set('PRC');
// 读取excel文件
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
die('加载文件发生错误:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}

// 确定要读取的sheet,什么是sheet,看excel的右下角,真的不懂去百度吧
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();

// 获取一行的数据
for ($row = 1; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
//这里得到的rowData都是一行的数据,得到数据后自行处理,我们这里只打出来看看效果
var_dump($rowData);
echo "<br>";

}

 

得到的数据:

PHPexcel读取文件

PHPExcel DEMO2:利用PHPExcel导出信息到excel

<?php 
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('PRC');


/** 引入PHPExcel */
require_once dirname(__FILE__) . './Classes/PHPExcel.php';

// 创建Excel文件对象
$objPHPExcel = new PHPExcel();
// 设置文档信息,这个文档信息windows系统可以右键文件属性查看
$objPHPExcel->getProperties()->setCreator("作者简庆旺")
    ->setLastModifiedBy("最后更改者")
    ->setTitle("文档标题")
    ->setSubject("文档主题")
    ->setDescription("文档的描述信息")
    ->setKeywords("设置文档关键词")
    ->setCategory("设置文档的分类");


//根据excel坐标,添加数据
$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A1', '你好')
    ->setCellValue('B2', '世界')
    ->setCellValue('C1', '你好')
    ->setCellValue('D2', '世界');

// 混杂各种符号, 编码为UTF-8
$objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A4', 'Miscellaneous glyphs')
    ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');

$objPHPExcel->getActiveSheet()->setCellValue('A8',"你好世界");
$objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true);

$value = "-ValueA\n-Value B\n-Value C";
$objPHPExcel->getActiveSheet()->setCellValue('A10', $value);
$objPHPExcel->getActiveSheet()->getRowDimension(10)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->getStyle('A10')->getAlignment()->setWrapText(true);
$objPHPExcel->getActiveSheet()->getStyle('A10')->setQuotePrefix(true);

// 重命名工作sheet
$objPHPExcel->getActiveSheet()->setTitle('第一个sheet');

// 设置第一个sheet为工作的sheet
$objPHPExcel->setActiveSheetIndex(0);

// 保存Excel 2007格式文件,保存路径为当前路径,名字为export.xlsx
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save( 'export.xlsx');

// 保存Excel 95格式文件,,保存路径为当前路径,
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('export.xls');

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晚风资源组

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

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

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

打赏作者

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

抵扣说明:

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

余额充值