当前位置: 首页 > article >正文

Spreadsheet导出excel

记录下常用的方法

  1. 数字转字符:Coordinate::stringFromColumnIndex(27); 输出 AA
  2. 字符转数字:Coordinate::columnIndexFromString('AA'); 输出27
  3. 设置单元格式 eg:(设置为保留两位小数点)
    $sheet->getStyle($columnLetter)->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_NUMBER_00);
    $columnLetter 可以按照上面的数字转字符获取。也可以直接设置单元列
  4. 设置样式
    $endColumn = Coordinate::stringFromColumnIndex(count($headers));
    $endRow = count($data);
    // 设置区域内的格式:eg:(添加边框,水平居中,上下居中)
    $sheet->getStyle("A1:$endColumn" . $endRow)->applyFromArray([
        'borders' => [
            'allBorders' => [
                'borderStyle' => Border::BORDER_THIN,
            ],
        ],
        'alignment' => [
            'horizontal' => Alignment::HORIZONTAL_CENTER,
            'vertical' => Alignment::VERTICAL_CENTER,
        ],
    ]);
  1. 重新判断类型,数字改为文本类型,取消科学技术法 【CustomValueBinder() 这个类需手动创建】
    Cell::setValueBinder(new CustomValueBinder());
<?php

namespace extend\common\helpers;

use \PhpOffice\PhpSpreadsheet\Cell\{DefaultValueBinder, DataType};
use PhpOffice\PhpSpreadsheet\RichText\RichText;

/**
 * @descirption 改类是为了解决 phpSpreadsheet 中dataTypeForValue 的返回类型不正确
 * 导致导出的文件中出现科学计数法
 */
class CustomValueBinder extends DefaultValueBinder
{
    public static function dataTypeForValue($value): string
    {

        //只重写dataTypeForValue方法,去掉一些不必要的判断
        if (is_null($value)) {
            return DataType::TYPE_NULL;
        } elseif ($value instanceof RichText) {
            return DataType::TYPE_INLINE;
        } elseif ($value && $value[0] === '=' && strlen($value) > 1) {
            return DataType::TYPE_FORMULA;
        } elseif (is_bool($value)) {
            return DataType::TYPE_BOOL;
        } elseif (is_float($value) || is_int($value)) {
            return DataType::TYPE_NUMERIC;
        }
        return DataType::TYPE_STRING;
    }
}


http://www.kler.cn/news/368630.html

相关文章:

  • JAVA-----线程池
  • Vue 3 的组件式开发(3)
  • 2024 7月算法刷题记录
  • JavaEE初阶---多线程(三)---内存可见性/单例模式/wait,notify的使用解决线程饿死问题
  • jupyter notebook改变默认启动路径
  • 开源竞争-1024程序员开幕式(湖南)
  • 【大模型】Ollama+WebUI+AnythingLLM搭建本地知识库
  • stm32 使用J-Link RTT Viewer打印日志
  • Spring MVC的MultipartFile
  • Elasticsearch 构建实时数据可视化应用
  • 《MYSQL实战45讲》为什么使用聚合函数会导致索引失效
  • 移植rv1106SDK的ipcweb到ubuntu
  • 数据结构---链表(二)【不带头双向非循环】
  • 【C++复习】第三弹之继承和多态
  • 面向接口的方式进行CRUD
  • 排序算法(冒泡,插入),希尔排序(插入升级),希尔排序和插入排序时间比较!
  • C++:多态(用法篇)
  • webpack解决使用window.open方法打开history路由页面提示404的问题
  • linux softirq tasklet 软中断实现
  • AGI大模型面经汇总,太全了!收藏一下吧很难找全的!
  • 2-135 基于matlab的有限差分法计算电位分布
  • Linux系统设置开机自启动.py脚本(树莓派Ubuntu)
  • 使用虚拟机搭建环境:CentOS7 Docker、MySQL、Redis 安装与配置
  • 微信小程序美团点餐
  • 【软件工程】软件项目管理/工程项目管理复习资料
  • Rust: [u8] 与 String 相互转换