精华内容
下载资源
问答
  • xlswriter v1.3.6

    2020-12-29 01:41:01
    为您提供xlswriter下载,xlswriter是一个 PHP C 扩展,可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本、数字、公式、日期、图表、图片和超链接。它具备以下特性:一、写入100%兼容的Excel ...
  • 安装 扩大 pecl install xlswriter IDE 助手 composer require viest/php-ext-xlswriter-ide-helper:dev-master 文档
  • xlswriter-其他源码

    2021-06-12 16:13:48
    xlswriter是一个 PHP C 扩展,可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本、数字、公式、日期、图表、图片和超链接。 它具备以下特性: 一、写入 100%兼容的Excel XLSX文件 完整的Excel...
  • php xlswriter导出

    2021-09-06 11:01:47
    可以使用xlswriter源码类: https://github.com/mk-j/PHP_XLSXWriter/blob/master/xlsxwriter.class.php 实现帮助类: <?php require_once 'web/libraries/XLSXwriter.php'; class PHPExeclCore { private $...

    复杂xls导出

    可以使用xlswriter源码类:

    https://github.com/mk-j/PHP_XLSXWriter/blob/master/xlsxwriter.class.php

    实现帮助类:

    <?php
    require_once 'web/libraries/XLSXwriter.php';
    class PHPExeclCore
    {
        private $headerData = array();
        private $headerWidthSize = 0;
        private $headerHeightSize = 0;
    
    
        private $colDefalutFormat = 'string';// 列默认数据格式
        private $colDefalutWidth = '10';// 列默认宽度
    
        private $header = array();
        private $headerWidth = array();
    
        // 数据字段
        private $dataFields = array();
    
        // 标题行默认样式
        private $headerDefalutStyle = array(
            'halign' => 'center',//水平居中
            'valign' => 'center',//竖直居中
            'font-style' => 'bold',
            'font-size' => 12,
            'border' => 'top,bottom,left,right'
            //'fill'=>'#fff'// 背景色
            // 边框有点问题不能用
            // 高度也不行 用font-size撑开);
        );
        // 标题行处理数组
        /**
         * $headerRow = array(
         * array('content' =>['Merge Cells Example','','','',''],'style'=>[['halign'=>'center'],array(),array(),array(),array()]),
         * array('content' =>['姓名', '吃饭', '', '考勤', ''],'style'=>[['halign'=>'center','valign'=>'center'],['halign'=>'center'],[],['halign'=>'center'],[]]),
         * array('content' =>['', '上午', '下午', '上午', '下午'],'style'=>[[],['halign'=>'center'],[],[],[]]),
         * );
         */
        private $headerRow = array(0 => array('content' => array(), 'style' => array()));
        private $headerMargin = array();
    
        // 数据行
        private $dataRow = array();
        // 现在够用了,先不做了
        private $dataStyle = array();
    
    
        public function __construct()
        {
        }
    
        public function __get($name)
        {
            if (isset($this->$name)) {
                return $this->$name;
            } else {
                return null;
            }
            // TODO: Implement __get() method.
        }
    
        /**
         * 设置表头
         * @param array $head
         */
        public function setHeader($header = array())
        {
            $this->headerData = $header;
            // 设置表头尺寸
            $this->setHeaderSize($this->headerData);
            // 生成rows 和 margin 设置样式
            $this->dealHeader($this->headerData);
        }
    
    
        public function setData($data = array())
        {
            foreach ($data as $d) {
                $row = array();
                foreach ($this->dataFields as $field) {
                    $value = isset($d[$field]) ? $d[$field] : '';
                    $row[] = $value;
                }
                $this->dataRow[] = $row;
            }
        }
    
    
        /**
         * 导出
         * @param string $filename
         * @param string $sheet
         */
        public function writeToStdOut($filename = 'test', $sheet = 'Sheet1')
        {
            //$header = ['字段','标题','宽度','类型']
            $filename .= '.xlsx';
            $writer = new \XLSXWriter();
            $writer->writeSheetHeader($sheet, $this->header, $col_options = array('suppress_row' => true, 'widths' => $this->headerWidth));
            foreach ($this->headerRow as $row)
                $writer->writeSheetRow($sheet, $row['content'], $row['style']);
            foreach ($this->headerMargin as $margin) {
                $writer->markMergedCell($sheet, $margin['startRow'], $margin['startCol'], $margin['endRow'], $margin['endCol']);
            }
            foreach ($this->dataRow as $data)
                $writer->writeSheetRow($sheet, $data);
            header('Content-disposition: attachment; filename="' . \XLSXWriter::sanitize_filename($filename));
            header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            header('Content-Transfer-Encoding: binary');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            $writer->writeToStdOut();
        }
    
    
        /**
         *  生成rows 和 margin 设置样式
         * @param $headerData
         */
        private function dealHeader($headerData)
        {
    
            $this->recursionSetHeaderRowsAndMargin($headerData, 0, 0, $this->headerDefalutStyle);
        }
    
        /**
         * 递归设置表头行数据,和合并表格数据源
         * @param $headerData
         * @param $row
         * @param $startCol
         * // 换个思路,填坑赋值
         */
        private function recursionSetHeaderRowsAndMargin($headerData, $row, $col, $defStyle = array())
        {
            $heightSize = $this->headerHeightSize;
    
            $startRow = $row;
            $startCol = $col;
            $content = array();//标题
            $style = array();//样式
    
            foreach ($headerData as $single) {
                $marginCol = isset($single['marginCol']) ? $single['marginCol'] : 1;
                // 合并
                // 是否有子节点
                $hasChildren = (isset($single['children']) && !empty($single['children'])) ? true : false;
                // 有子节点合并一行,没有子节点直接把剩下行都算上
                if ($hasChildren) {
                    $marginRow = 1;
                } else {
                    // 一共3行 当前第1行需要合并1,2两行
                    $marginRow = $heightSize - $startRow;
                }
    
    
                $style = isset($single['style']) ? array_merge($defStyle, $single['style']) : $defStyle;
                // 如果不是合并一行一列就加入合并单元格的数组,同时每个合并的单元格都加样式(主要是方便边框)
                if ($marginCol != 1 || $marginRow != 1) {
                    //0+2-1=1 合并了0,1两个单元格 end是1
                    $endCol = $startCol + $marginCol - 1;
                    // 当前第1行需要合并2两行,目标单元格行号1+2-1
                    $endRow = $startRow + $marginRow - 1;
                    $this->headerMargin[] = array(
                        'startRow' => $startRow,
                        'startCol' => $startCol,
                        'endRow' => $endRow,
                        'endCol' => $endCol);
    
                    if (isset($style['border'])) {
                        $s = array('border' => $style['border']);
                        for ($r = 0; $r < $marginRow; $r++) {
                            $row = $startRow + $r;
                            for ($c = 0; $c < $marginCol; $c++) {
                                $col = $startCol + $c;
                                $this->setHeaderRowCell($row, $col, 'style', $s);
                            }
                        }
                    }
    
                }
                $this->setHeaderRowCell($startRow, $startCol, 'style', $style);
    
    
                $content = isset($single['title']) ? $single['title'] : '';
                $this->setHeaderRowCell($startRow, $startCol, 'content', $content);
    
    
                //处理子节点
                if ($hasChildren) {
                    $this->recursionSetHeaderRowsAndMargin($single['children'], $startRow + 1, $startCol, $style);
                }
                $startCol += $marginCol;
    
            }
    
    
        }
    
        //
        //
        /**
         * 设置表头单元格尺寸
         * 同事设置列的数据类型和宽度
         * @param $header
         */
        private function setHeaderSize(&$headerData)
        {
    
            list($w, $h) = $this->recursionCalSize($headerData);
            $this->headerWidthSize = $w;
            $this->headerHeightSize = $h;
            $this->setHeaderRow($w, $h);
    
    
        }
    
        /**
         * 初始化表头行,占坑
         * @param $w
         * @param $h
         */
        private function setHeaderRow($w, $h)
        {
            $data = array();
            $content = array();
            $style = array();
            while (true) {
                $w--;
                $content[] = '';
                $style[] = array();
                if ($w <= 0) break;
            }
    
            while (true) {
                $h--;
                $data[] = array('content' => $content, 'style' => $style);
    
                if ($h <= 0)
                    break;
            }
    
            $this->headerRow = $data;
            unset($content);
            unset($style);
            unset($data);
    
        }
    
        /**
         * 修改表头行的数据
         * @param $col
         * @param $row
         * @param $filed
         * @param $value
         */
        private function setHeaderRowCell($row, $col, $key, $value)
        {
    
            if (isset($this->headerRow[$row][$key][$col])) {
                $this->headerRow[$row][$key][$col] = $value;
            } else {
                return false;
            }
        }
    
        /**
         *
         * @param $headerData
         * @return array
         */
        private function recursionCalSize(&$headerData)
        {
            $w = 0; // 根节点++
            $h = 0; // 是子类高度的最大值
            $childHeightArr = array();
            foreach ($headerData as &$single) {
                $singleH = 1;
                // 没有子节点设置为空数组
    
                if ((isset($single['children']) && !empty($single['children']))) {
                    list($cw, $ch) = $this->recursionCalSize($single['children'], $h);
                    $w += $cw;
                    $singleH += $ch;
                    $single['marginCol'] = $cw;
    
                } else {
    
                    //设置表头需要要参数
                    //字段类型
                    $type = isset($single['format']) ? $single['format'] : $this->colDefalutFormat;
                    // 字段宽度
                    $width = isset($single['width']) ? $single['width'] : $this->colDefalutWidth;
                    $this->header[] = $type;
                    $this->headerWidth[] = $width;
                    // data的键
                    $field = isset($single['field']) ? $single['field'] : '';
                    $this->dataFields[] = $field;
    
                    $w++;
                    $singleH = 1;
                }
                $childHeightArr[] = $singleH;
            }
            $h = max($childHeightArr);
            return array($w, $h);
        }
    }

    调用:

    $headerConfig = [
        [
            'title' => 'test',
            'children' => [
                ['title' => '日期', 'field' => '日期'],
                ['title' => '总内购', 'field' => '总内购'],
            ]
        ],
    ];
    $exportData = [
        ['日期' => '2021-08-08', '总内购' => '923'],
        ['日期' => '2021-08-08', '总内购' => '924'],
    ];
    
    $tool = new PHPExeclCore();
    $tool->setHeader($headerConfig);
    $tool->setData($exportData);
    $filename = date('_YmdHis');
    $tool->writeToStdOut($filename);
    exit();

    参考:

    https://www.jianshu.com/p/aba213453525

    其他:https://blog.csdn.net/qq_41049126/article/details/89532403

    展开全文
  • https://pecl.php.net/package/xlswriter https://pecl.php.net/package/xlswriter/1.3.7/windows 选择对应版本下载 2.解压 3.将php_xlswriter.dll、php_xlswriter.pdb放在PHP的ext目录 4.在php.ini中增加extension=...

    windows安装

    1.选择对应版本下载
    https://pecl.php.net/package/xlswriter
    https://pecl.php.net/package/xlswriter/1.3.7/windows
    2.解压
    3.将php_xlswriter.dll、php_xlswriter.pdb放在PHP的ext目录
    4.在php.ini中增加extension=xlswriter
    5.重启php【或站点】

    Linux 安装

    1.下载:https://pecl.php.net/package/xlswriter

    wget https://pecl.php.net/get/xlswriter-1.3.7.tgz
    

    2.解压下载包

    tar -zxvf  xlswriter-1.3.7.tgz
    

    3.进入文件夹,编译

    cd  xlswriter-1.3.7
    phpize
    ./configure --with-php-config=/usr/local/php7.1/bin/php-config --enable-reader
    make&&make install
    

    不知道php-config在哪请使用find / -name php-config查找

    find / -name php-config
    

    4.在php.ini文件增加 extension=xlswriter.so

    extension=xlswriter.so
    

    5.重启php服务

    使用说明

    说明文档:https://xlswriter-docs.viest.me/zh-cn

    1.导出文件

    $config = [
        'path' => '/home/viest' // xlsx文件保存路径
    ];
    $excel  = new \Vtiful\Kernel\Excel($config);
    
    // fileName 会自动创建一个工作表,你可以自定义该工作表名称,工作表名称为可选参数
    $filePath = $excel->fileName('tutorial01.xlsx', 'sheet1')
        ->header(['Item', 'Cost'])
        ->data([
            ['Rent', 1000],
            ['Gas',  100],
            ['Food', 300],
            ['Gym',  50],
        ])
        ->output();
    

    2.导入文件

    $config   = ['path' => './tests'];
    $excel    = new \Vtiful\Kernel\Excel($config);
    
    // 导出测试文件
    $filePath = $excel->fileName('tutorial.xlsx')
        ->header(['Item', 'Cost'])
        ->output();
    
    // 读取测试文件
    $data = $excel->openFile('tutorial.xlsx')
        ->openSheet()
        ->getSheetData();
    
    var_dump($data); // [['Item', 'Cost']]
    
    展开全文
  • 官网地址:...tar -zxvf xlswriter-1.4.0.tgz cd xlswriter-1.4.0/ /www/server/php/73/bin/phpize ./configure --with-php-config=/www/server/php/73/bin/php-config make &&.

    官网地址:https://pecl.php.net/get/xlswriter-1.4.0.tgz

    wget https://pecl.php.net/get/xlswriter-1.4.0.tgz
    tar -zxvf xlswriter-1.4.0.tgz
    cd xlswriter-1.4.0/
    /www/server/php/73/bin/phpize
    ./configure --with-php-config=/www/server/php/73/bin/php-config
    make && make install
    echo "extension = xlswriter.so" >> /www/server/php/73/etc/php.ini
    /etc/init.d/php-fpm-73 reload
    /www/server/php/73/bin/php -m|grep -i xlswriter
    
    
    展开全文
  • TP6下xlswriter - excel导出使用xlswriter来实现excel导出 使用xlswriter来实现excel导出 今天用了基于tp6的catchadmin框架去实现了excel的导出,发现有些数据可以导出来,有些出现了Invalid cell coordinate [2的...

    TP6下xlswriter - excel导出

    使用xlswriter来实现excel导出

    今天用了基于tp6的catchadmin框架去实现了excel的导出,发现有些数据可以导出来,有些出现了Invalid cell coordinate [2的报错问题,后面查阅了资料发现是因为phpexcel有个bug,因为excel的列是对应26个字母的,当你导出的字段超过26个时,会不能识别AA1,AB1…这样的列表AA1就会变成字符 [ ,因此就有个Invalid cell coordinate [2这个错误;解决办法就是需要就改phpexcel的底层代码了,要么就还别的方式去实现,这里因为项目中的第三方插件都是通过composer来安装管理的,若改了底层代码下次做composer安装和更新底层代码肯定会丢失,因此只能找别的方式去实现了。
    然后同事推荐了php-xlswriter,自己也根据本地的windows10(64位) + php7.2nts的环境安装了这个在gitee中下载的 php_xlswriter.dll扩展,下载的时候需要注意,刚开始因为我的环境是64位的,找的也是php7.2nts+x64的扩展,但是一直跑不起来,提示not found这个类,花很多时间去找原因,直到最后没啥子想法了才去一个一个扩展下载下来去安装引入才测试出来php7.2nts+X86的才好使,最后测试近5W的数据导出excel只需2-3S即可完成
    在windows下php - xlswriter扩展的安装超级简单,只需要下载环境对应的php-xlswriter.dll放到对应php版本下的ext目录下,然后再php.ini中extension=php_xlswriter.dll引入即可,然后根据文档(https://xlswriter-docs.viest.me/zh-cn)去实现你要的功能就可以了,无需composer安装和导入某些文件类,下面是展示实现excel导出的关于xlswrite的所有代码:

     $config = ['path' => $path];
        $excel  = new \Vtiful\Kernel\Excel($config);
        $fileName = 'title' . '_' . date('YmdHis', time()) . '.xlsx';
        $fileObject = $excel->constMemory($fileName);
        $fileHandle = $fileObject->getHandle();
    
        $format = new \Vtiful\Kernel\Format($fileHandle);
        $colorOneStyle = $format
            ->bold()
            ->align(\Vtiful\Kernel\Format::FORMAT_ALIGN_CENTER, \Vtiful\Kernel\Format::FORMAT_ALIGN_VERTICAL_CENTER)
            ->toResource();
    
        $format = new \Vtiful\Kernel\Format($fileHandle);
        $colorTwoStyle = $format
            ->fontColor(\Vtiful\Kernel\Format::COLOR_GREEN)
            ->toResource();
            
        $fileObject
            ->defaultFormat($colorOneStyle) // 写入数据前设置行样式
            ->header($titles) //titles标题
            ->defaultFormat($colorTwoStyle)
            ->data($data) //data需要导出的数据,格式按文档组装即可
            ->output();
            
       if ($fileObject) {
            return 'http://'.$_SERVER['HTTP_HOST'].$path;
        }
        return false;
    
    展开全文
  • 为什么要使用xlswriter 请参考下图。 由于内存原因,PHPExcel在40,000和100000点处无法正常工作,但是可以通过修改ini配置来解决,但是完成工作可能需要更长的时间。 xlswriter是一个PHP C扩展,可用于将文本,...
  • PHP使用xlswriter扩展优化Excel导出性能

    千次阅读 2020-12-28 15:49:23
    关于xlswriter xlswriter 是一个 PHP C 扩展,旨在提升php在导出大数据量时的性能问题,支持 windows / Linux 。可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本、数字、公式、日期、图表、...
  • php-ext-xlswriter是一个php7以上的对与excel文件处理的扩展,在这里写一下对与这个扩展的编译安装方法
  • xlswriter 中文官方网站 https://xlswriter-docs.viest.me/zh-cn windows10 环境laravel8 mysql8 第一次执行会慢一点,第二次就更快一点,服务器上开了opcache估计会更快一点 public function test(Request $...
  • xlswriter是一个 ,可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本、数字、公式、日期、图表、图片和超链接。 特点: 一、写入 100%兼容的Excel XLSX文件 完整的Excel格式 合并单元格 定义...
  • 文章目录3.6.1 pip安装xlswriter3.6.2 xlswriter新建并写入Excel XlsxWriter是一个用来写Excel2007和xlsx文件格式的python模块。它可以用来写文本、数字、公式并支持单元格格式化、图片、图表、文档配置、自动过滤...
  • 发现的一个PHP扩展,性能非常强大,经过自己粗略测试,一万以上的导出时,速度... 文档地址:https://xlswriter-docs.viest.me/zh-cn/reader 安装、使用的教程在文档里都有说明,自从1.2.7版本之后开始支持读取。 ...
  • 继而开发优化需要用到下xlswriter这个扩展。 先上官方地址:https://github.com/viest/php-ext-xlswriter 开始部署 由于公司的环境是docker-alpine,所以本想着更换下源,使用添加命令即可 apk add php7-xlswriter ...
  • 一、安装xlrd模块: 1、mac下打开终端输入命令: pip install XlsxWriter ...然后输入 import xlswriter  不报错说明模块安装成功 二、常用方法: 1、创建excel文件 # 创建文件 workbook = xlsxw...
  • python写入excel(xlswriter)--生成图表 原地址:https://www.cnblogs.com/puresoul/p/7520246.html 一、折线图: # -*- coding:utf-8 -*- import xlsxwriter # 创建一个excel workbook = xlsxwriter....
  • 使用之前需要先按照:打开cmd,输入pip install xlrd(xlswriter),点击enter; 2.基本使用: xlrd: #打开els文件,参数是文件路径: table = xlrd.open_workbook(r"F:/selenium/test.xls") sheet = table....
  • 问题 excel同一列里面是数字和字符串组成,导入解析的时候字符串解析成功。数字解析得到INF。 解决 没找到代码层面的解决版本,所有就给导入的excel的这一列的开头加了个字母,存储数据库的地方截取下。...
  • 在Web数据采集输出格式中XLS(Excel)是一种很常见的格式。它具有灵活、通用功能(能够方便地导入各种数据库 例如,Access、MySQL),借助Excel的...XLSWriter是由鲲鹏数据的技术人员在xlwt库的基础上进行二次封装...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 578
精华内容 231
关键字:

XLSWriter