如何实现Yii2框架中使用PHPExcel导出Excel文件

不言
发布: 2018-06-15 10:30:05
原创
1927人浏览过

本篇文章主要介绍了yii2框架中使用phpexcel导出excel文件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法:

最简单的利用composer安装

1

composer require "phpoffice/phpexcel": "*"

登录后复制

如果没有安装conposer可以参考下面1.2步

立即学习PHP免费学习笔记(深入)”;

1、引入PHPExcel

首先得要下载phpexcel地址:https://github.com/PHPOffice/PHPExcel/archive/1.8.1.zip

你可以直接在入口文件index.php中引入,也可以在你定义的controller类之前,只要是在你使用之前引入就可以

1

require dirname(dirname(__FILE__)).'/excel/PHPExcel.php';

登录后复制

或者在phpexcel类里修改相应的namespace也可。

2、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件,对比源文件改成:

1

2

3

4

5

6

7

8

9

public static function Register() {

  $functions = spl_autoload_functions();

  foreach ( $functions as $function)

    spl_autoload_unregister($function);

    $functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions);

  foreach ( $functions as $function)

    $x = spl_autoload_register($function);

    return $x;

}

登录后复制

上面的函数中,注释掉的是原有的代码。

3、下面的代码是输出Excel,以及一些常用的属性设置,在controller中:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

public function actionExport()

{

    $objectPHPExcel = new PHPExcel();

    $objectPHPExcel->setActiveSheetIndex(0);

   

    $page_size = 52;

    $model = new NewsSearch();

    $dataProvider = $model->search();

    $dataProvider->setPagination(false);

    $data = $dataProvider->getData();

    $count = $dataProvider->getTotalItemCount();

    $page_count = (int)($count/$page_size) +1;

    $current_page = 0;

    $n = 0;

    foreach ( $data as $product )

    {

      if ( $n % $page_size === 0 )

      {

        $current_page = $current_page +1;

   

        //报表头的输出

        $objectPHPExcel->getActiveSheet()->mergeCells('B1:G1');

        $objectPHPExcel->getActiveSheet()->setCellValue('B1','产品信息表');

   

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','产品信息表');

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','产品信息表');

        $objectPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getFont()->setSize(24);

        $objectPHPExcel->setActiveSheetIndex(0)->getStyle('B1')

          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

   

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B2','日期:'.date("Y年m月j日"));

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('G2','第'.$current_page.'/'.$page_count.'页');

        $objectPHPExcel->setActiveSheetIndex(0)->getStyle('G2')

          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

           

        //表格头的输出

        $objectPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(5);

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('B3','编号');

        $objectPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(6.5);

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('C3','名称');

        $objectPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(17);

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('D3','生产厂家');

        $objectPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(22);

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('E3','单位');

        $objectPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('F3','单价');

        $objectPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(15);

        $objectPHPExcel->setActiveSheetIndex(0)->setCellValue('G3','在库数');

        $objectPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(15);

           

        //设置居中

        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3')

          ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

   

        //设置边框

        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )

          ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )

          ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )

          ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )

          ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3' )

          ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

   

        //设置颜色

        $objectPHPExcel->getActiveSheet()->getStyle('B3:G3')->getFill()

          ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF66CCCC');

           

      }

      //明细的输出

      $objectPHPExcel->getActiveSheet()->setCellValue('B'.($n+4) ,$product->id);

      $objectPHPExcel->getActiveSheet()->setCellValue('C'.($n+4) ,$product->product_name);

      $objectPHPExcel->getActiveSheet()->setCellValue('D'.($n+4) ,$product->product_agent->name);

      $objectPHPExcel->getActiveSheet()->setCellValue('E'.($n+4) ,$product->unit);

      $objectPHPExcel->getActiveSheet()->setCellValue('F'.($n+4) ,$product->unit_price);

      $objectPHPExcel->getActiveSheet()->setCellValue('G'.($n+4) ,$product->library_count);

      //设置边框

      $currentRowNum = $n+4;

      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )

          ->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )

          ->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )

          ->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )

          ->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

      $objectPHPExcel->getActiveSheet()->getStyle('B'.($n+4).':G'.$currentRowNum )

          ->getBorders()->getVertical()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

      $n = $n +1; 

    }

   

    //设置分页显示

    //$objectPHPExcel->getActiveSheet()->setBreak( 'I55' , PHPExcel_Worksheet::BREAK_ROW );

    //$objectPHPExcel->getActiveSheet()->setBreak( 'I10' , PHPExcel_Worksheet::BREAK_COLUMN );

    $objectPHPExcel->getActiveSheet()->getPageSetup()->setHorizontalCentered(true);

    $objectPHPExcel->getActiveSheet()->getPageSetup()->setVerticalCentered(false);

   

   

    ob_end_clean();

    ob_start();

   

    header('Content-Type : application/vnd.ms-excel');

    header('Content-Disposition:attachment;filename="'.'产品信息表-'.date("Y年m月j日").'.xls"');

    $objWriter= PHPExcel_IOFactory::createWriter($objectPHPExcel,'Excel5');

    $objWriter->save('php://output');

登录后复制

代码执行后,会直接生成Excel,并提示下载或打开。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

YII 表单验证规则大全,yii表单规则大全

以上就是如何实现Yii2框架中使用PHPExcel导出Excel文件的详细内容,更多请关注php中文网其它相关文章!

WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号