PHP 导出 excel

2018/01/07 23:00
阅读数 57

关于 PHP 导出 excel csv 常用的有 PHPexcel ,本文整理了一些其他方案。

高性能 Excel 扩展

  
    
  
  
  1. sudo apt-get install -y zlib1g-dev

  2. git clone https://github.com/jmcnamara/libxlsxwriter.git

  3. cd libxlsxwriter

  4. make && sudo make install

  5. // https://github.com/viest/php-excel-writer

  6. // https://laravel-china.org/topics/6888/php-high-performance-excel-extension-five-hundred-year-formula-no-memory-leak#reply37308

  7. for($index = 0 ; $index < 10000 ; $index++){

  8.    $data[$index] = ['viest', 23, 666666666666666666, '银河市地球区程序村PHP组菜鸟湾66号', 15666666666];

  9. }

  10. $timeStart = microtime(true);

  11. $config = [

  12.    'path' => '/vagrant/',

  13. ];

  14. $excel = new \Vtiful\Kernel\Excel($config);

  15. $textFile = $excel->fileName("test.xlsx")

  16.    ->header(['name', 'age', 'id_card', 'address', 'phone'])

  17.    ->data($data)

  18.    ->outPut();

  19. $timeEnd = microtime(true);

  20. $time = $timeEnd - $timeStart;

  21. echo "导出Excel花费: $time seconds\n";

laravel-excel

  
    
  
  
  1. composer require maatwebsite/excel

  2. // 导出 Excel 并能直接在浏览器下载https://laravel-china.org/topics/1918/extension-how-to-deal-with-the-excel-file-in-the-laravel-project

  3. # $export_file_name = 要生成的文件名

  4. Excel::create($export_file_name, function ($excel) {

  5.    $excel->sheet('Sheetname', function ($sheet) {

  6.        $sheet->appendRow(['data 1', 'data 2']);

  7.        $sheet->appendRow(['data 3', 'data 4']);

  8.        $sheet->appendRow(['data 5', 'data 6']);

  9.    });

  10. })->download('xls');

  11. // 导出 Excel 并存储到指定目录

  12. Excel::create($export_file_name, function ($excel) {

  13.    $excel->sheet('Sheetname', function ($sheet) {

  14.        $sheet->appendRow(['data 1', 'data 2']);

  15.        $sheet->appendRow(['data 3', 'data 4']);

  16.        $sheet->appendRow(['data 5', 'data 6']);

  17.    });

  18. })->store('xls', $object_path);

  19. 问题:

  20. 1. var_dump($reader->toArray());//第一行内容为key,如果为中文,需要修改excel.php的 'to_ascii' => false,

  21. 2.大数字变成科学计数 11111111111 显示成 1.11111E+29

  22. 导出 excel 错误

  23. PHPExcel_Calculation_Exception: Q5!A65 Formula Error: An unexpected error occured in /application/www/web_git-pull/vendor/phpoffice/phpexcel/Classes/PHPExcel/Cell.php:291

  24. excel中一个单元格如果是以“=”开头,则说明这个单元格是根据其他单元格的值算出来的,“=”后面必须跟着一个合法的表达式,而那个字符串是用户的输入,很明显不应该是一个合法的表达式,所以应该在代码中过滤掉或者 $str = \t”.$str;

单文件

  
    
  
  
  1. //https://github.com/mk-j/PHP_XLSXWriter/tree/master/examples 有很多测试代码

  2. include_once("xlsxwriter.class.php");

  3. ini_set('display_errors', 0);

  4. ini_set('log_errors', 1);

  5. error_reporting(E_ALL & ~E_NOTICE);

  6. $filename = "example.xlsx";

  7. //

  8. for($index = 0 ; $index < 250000 ; $index++){

  9.    $data[$index] = ['viest', 23, 666666666666666666, '银河市地球区程序村PHP组菜鸟湾66号', 15666666666];

  10. }

  11. $timeStart = microtime(true);

  12. $writer = new XLSXWriter();

  13. $writer->writeSheet($data);

  14. $writer->writeToFile('example.xlsx');

  15. $timeEnd = microtime(true);

  16. $time = $timeEnd - $timeStart;

  17. echo "导出Excel花费: $time seconds\n";

  18. echo '#'.floor((memory_get_peak_usage())/1024/1024)."MB"."\n";

Excel处理包

  
    
  
  
  1. //https://github.com/bean-du/excel

  2.  $writer = new ExcelWriter();

  3.    for ($i = 0; $i < 100; $i++){

  4.        for ($j = 0; $j < 10; $j++){

  5.            $data[$i][$j] = 'test ['.$i.']+['.$j.']';

  6.        }

  7.    }

  8.    $writer->setWidth(range('A','J'))

  9.        ->setValue($data)

  10.        ->setFormat('xls')

  11.        ->setAlignment(array('A1','C1'),'CENTER')

  12.        ->setBackgroundColor(array('A1','C1'),'#ccccc')

  13.        ->setAlignment(array('A2','C2'),'RIGHT')

  14.        ->setActiveSheetName('Bean')

  15.        ->outPut('test.xls');

down csv

  
    
  
  
  1. function export_csv($filename)

  2. {

  3. header("Content-type:text/csv");

  4. header("Content-Disposition:attachment;filename=".$filename);

  5. header('Cache-Control:must-revalidate,post-check=0,pre-check=0');

  6. header('Expires:0');

  7. header('Pragma:public');

  8. }

PDF、PPT、Excel、Word、视频等格式文件在线预览 http://jquery.malsup.com/media/ https://view.officeapps.live.com/op/view.aspx?src={yourFileOnlinePath} 提供超大文件上传的Laravel扩展包https://github.com/peinhu/AetherUpload-Laravel PHP高效导出Excel https://segmentfault.com/a/1190000005366832 打造最全面的PHPExcel开发解决方案 https://segmentfault.com/a/1190000011229370



本文分享自微信公众号 - 苏生不惑(susheng_buhuo)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部