PhpSpreadsheet表格导入与导出

<?php
namespace App\Admin\Libraries;
/**
 * excel表格导入 导出
 * 
 */
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;

class Excel
{
	private $spreadsheet;
	private $sheet;

	function __construct()
	{
		$this->spreadsheet = new Spreadsheet();//创建一个新的excel文档
        $this->sheet = $this->spreadsheet->getActiveSheet();//获取当前操作sheet的对象
	}
	
	/**
     * 读取excel数据
     * @access public
     * @param sting $inputFileName 文件路径
     * @param sting $type 文件类型
     * @return $data 返回二维数组
     */
	public function excel_import($inputFileName = '', $type = '')
	{
		if (!$inputFileName) {
			return false;
		}
		if ($type == 'xlsx') {
			$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
		} elseif ($type == 'xls') {
			$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
		} else {
			return false;
		}
		$spreadsheet = $reader->load($inputFileName);
		/* getSheet(0) 指定第一个工作表为当前 toArray() 转数组 */
		$data = $spreadsheet->getSheet(0)->toArray();
		return $data;
	}

	/**
     * 数据导出到表格
     * @access public
     * @param array $title 表格第一行标题数组
     * @param array $data 表格内容 二维数组
     * @param sting $name 当前工作表标题
     */
	public function excel_export($title, $data, $name = '标题')
	{
		$this->sheet->setTitle($name);//设置当前工作表标题。
		//设置单元格内容
        foreach ($title as $key => $value) {
            $this->sheet->setCellValueByColumnAndRow($key+1, 1, $value);
        }
        $row = 2; //从第二行开始
        foreach ($data as $item) {
            $column = 1;
            foreach ($item as $value) {
                $this->sheet->setCellValueByColumnAndRow($column, $row, $value);
                $column++;
            }
            $row++;
        }
	}

	//浏览器下载
	public function download($fileName = '信息')
	{
        $file_name = $fileName . '.xlsx';
        $writer = new Xlsx($this->spreadsheet);
        /* 输出到浏览器直接下载到本地 */
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$file_name.'"');
        header('Cache-Control: max-age=0');
        $writer = IOFactory::createWriter($this->spreadsheet, 'Xlsx'); //按照指定格式生成Excel文件
        $writer->save('php://output');
	}

	//保存到服务器目录
	public function add($fileName = '信息')
	{
		$file_name = $fileName . '.xlsx';
		$writer = new Xlsx($this->spreadsheet);
        /* 保存到服务器目录 */
        $writer->save('uploads/'.$file_name);
	}
}

相关得方法

		$spreadsheet = new Spreadsheet();//创建一个新的excel文档
		$sheet = $spreadsheet->getActiveSheet();//获取当前操作sheet的对象

        //设置字体
        $sheet->getStyle('A7:B7')->getFont()->setBold(true)->setName('Arial')->setSize(10);//将A7至B7两单元格设置为粗体字,Arial字体,10号字
        $sheet->getStyle('B1')->getFont()->setBold(true);//将B1单元格设置为粗体字

        //设置颜色
        $sheet->getStyle('A1')->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);//将A1单元格文字颜色设为红色

        //设置列宽
        $sheet->getColumnDimension('A')->setWidth(20);//将A列的宽度设为20(字符)
        $sheet->getColumnDimension('B')->setAutoSize(true);//将B列的宽度设为自动宽度
        $sheet->getDefaultColumnDimension()->setWidth(12);//设置默认列宽为12

        //设置行高
        $sheet->getRowDimension('10')->setRowHeight(100);//将第十行的高度设为100pt
        $sheet->getDefaultRowDimension()->setRowHeight(15);//设置默认行高为15

        //对齐
        $sheet->getStyle('A:D')->getAlignment()
            ->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER) //设置垂直居中
            ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER) //设置水平居中
            ->setWrapText(true); //设置自动换行

        //合并单元格
        $sheet->mergeCells('A1:D2');//A1到D2合并为一个单元格

        //将合并后的单元格拆分
        $sheet->unmergeCells('A1:D2');//将合并后的单元格拆分。

        //使用applyFromArray实现单元格样式设置
        //样式变量
        $style = [
            //设置字体样式
            'font' => [
                'name' => 'Arial',
                'bold' => true,
                'italic' => false,
                'underline' => Font::UNDERLINE_DOUBLE,
                'strikethrough' => false,
                'color' => [
                    'rgb' => '808080'
                ]
            ],
            //设置边框线样式
            'borders' => [
                 //allBorders所有的边框线样式
                 //左边框线
               'bottom' => [
                   'borderStyle' => Border::BORDER_DASHDOT,
                   'color' => [
                      'rgb' => '808080'
                    ]
               ],
                 //上边框线
               'top' => [
                   'borderStyle' => Border::BORDER_DASHDOT,
                   'color' => [
                       'rgb' => '808080'
                   ]
               ]
            ],
            //对齐样式
            'alignment' => [
                'horizontal' => Alignment::HORIZONTAL_CENTER,
                'vertical' => Alignment::VERTICAL_CENTER,
                'wrapText' => true,
            ],
            //是否使用前缀
            'quotePrefix'    => true
        ];
        $sheet->getStyle('A1:D1')->applyFromArray($style);

        //设置工作表标题
        $sheet->setTitle('Hello');//设置当前工作表标题。

        //设置单元格的格式
        $sheet->getStyle('D2')->getNumberFormat()
            ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);//将D2单元格的格式设为文本格式
        $sheet->getStyle('A1:D2')->getNumberFormat()
            ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_TEXT);//将A1到D2的单元格设置为文本格式

        //换行
        $sheet->getCell('A4')->setValue("hello\nworld");//将A4单元格的hello和world换行
        
        //超链接
        //将A2单元格内容设置blog并点击跳转https://www.wj0511.com
        $sheet->setCellValue('A2', 'blog');
        $sheet->getCell('A2')->getHyperlink()->setUrl('https://www.wj0511.com');

        //使用函数
        /* 总和(SUM),最大数(MAX),最小数(MIN),平均值(AVERAGE) */
        $sheet->setCellValue('B5', '=SUM(B1:B4)');//将B5单元格的内容设为B1到B4的之和

        //设置文档属性
        $spreadsheet->getProperties()
            ->setCreator("author")    //作者
            ->setLastModifiedBy("last-author") //最后修改者
            ->setTitle("title")  //标题
            ->setSubject("subject") //副标题
            ->setDescription("description")  //描述
            ->setKeywords("keywords") //关键字
            ->setCategory("category"); //分类

官方地址:https://phpspreadsheet.readthedocs.io/en/latest/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值