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

phpexcel导出下拉框,超过255字符不显示的问题处理

用php生成excel模板,并设置下拉框的选项。如果选项太多,可能导致下拉框不显示的问题。下面会给出示例,以及解决方案,支持生成包含大量数据的下拉框。

// $info 为下拉框的数数据,['男','女','保密']
function exportDataSelectOptions ($info){
//文件名称
$filename = 'AAAA导入模板';

//excel表格列名
$header = [['名字',30],['手机号',25],['邮箱',25],['性别',10],['所在地址',26]];

//需要制作的下拉框文件
$spectials = [   ['column'=>'D','options'=>['男','女','保密'] ],
            ['column'=>'E','options'=>$info]];

//样例
$data = [
            ['测试样例1','13665663533','13665663533@qq.com','女',$info[0]],
            ['测试样例2','13665663532','13665663532@qq.com','男',$info[0]],
            ['测试样例3','13665663513','13665663513@qq.com','男',$info[0]],
        ];

ini_set("error_reporting","E_ALL & ~E_NOTICE");

require_once '../phpexcel/Classes/PHPExcel.php'; //初始化PHPExcel(),不使用模板 

$objPHPExcel = new PHPExcel();

$objPHPExcel->setActiveSheetIndex(0);

//头部样式
$objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$hk = 0; 

//所有单元格(行)默认高度
$objPHPExcel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(25);

// 自动换行
// $objPHPExcel->getActiveSheet()->getStyle( 'A1:L100')->getAlignment()->setWrapText(true);

// 设置特有的表格样式
$styleThinBlackBorderOutline = array( //边框线
    'borders' => array(
        'allborders' => array( //设置全部边框
            'style' => \PHPExcel_Style_Border::BORDER_THIN //粗的是thick
        ),
    ),
);
//设置边框
$objPHPExcel->getActiveSheet()->getStyle( 'A1:L100')->applyFromArray($styleThinBlackBorderOutline);

//合并单元格(如果要拆分单元格是需要先合并再拆分的,否则程序会报错)
$objPHPExcel->getActiveSheet()->mergeCells('A1:L1');

//拆分单元格;
// $objPHPExcel->getActiveSheet()->unmergeCells('B7:D7'); 

// 设置内容 
$objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1','标题:XXXXXXX');
// 设置字体样式
// $PHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('宋体');
// 设置文字加粗
// $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);  
// 设置文字大小
// $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(18);
// 设置文字水平居中
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
// 设置文字垂直居中
$objPHPExcel->getActiveSheet(0)->getStyle('A1')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_BOTTOM);
// 设置自动换行
// $PHPExcel->getActiveSheet(0)->getStyle('A2')->getAlignment()->setWrapText(true);


//写入头部
foreach ($header as $k => $v)
{
    $colum = \PHPExcel_Cell::stringFromColumnIndex($hk);
    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum.$rowindex, $v[0]);
    $objPHPExcel->getActiveSheet(0)->getColumnDimension($colum )->setWidth($v[1]);

    $hk += 1;
}

$objActSheet = $objPHPExcel->getActiveSheet(0);

// 新建工作表  -->保存下拉框数据来源
$objPHPExcel->createSheet(); 
$subObject = $objPHPExcel->getSheet(1);
$subObject->setTitle("data");

$subcolumn = ['A','B','C','D','E','F','G','H','I','J','K'];
//设置下拉框
foreach($spectials as $k => $spectial)
{
    
    //保存下拉框内容到新建的工作表中
    $list = $spectial['options']; 
    if ($list) {
        foreach ($list as $i => $d) {
            $c = $subcolumn[$k].($i+1);
            $subObject->setCellValue($c,$d); 
        } 
    }

    //下拉框写入开始行数
    $n = 2;
    // 我这里设置100行,可自行设置
    while($n < 101) {
        $objValidation = $objActSheet->getCell($spectial['column'].(string)$n)->getDataValidation(); //这一句为要设置数据有效性的单元格
        // $objValidation的各项设置参数可详见phpexcel文件,
        // 目录大概为/.../phpoffice/phpexcel/Classes/PHPExcel/Writer/Excel5/Worksheet.php 
        // 2767行 方法名:writeDataValidity
        $objValidation -> setType(\PHPExcel_Cell_DataValidation::TYPE_LIST)
        -> setErrorStyle(\PHPExcel_Cell_DataValidation::STYLE_STOP)
        -> setAllowBlank(true)
        -> setShowInputMessage(true)
        -> setShowErrorMessage(true)
        -> setShowDropDown(true)
        -> setErrorTitle('输入的值有误')
        -> setError('您输入的值不在下拉框列表内.')
        -> setPromptTitle('')
        -> setPrompt('')
        -> setOperator(\PHPExcel_Cell_DataValidation::OPERATOR_BETWEEN)
        ->setFormula1("data!$".$subcolumn[$k]."$1:$".$subcolumn[$k]."$".count($list));  //下拉框数据来源多的时候,建议使用此方法
        // -> setFormula1('"'.$optionsString.'"'); //如果下拉框数据来源少,可使用此方法,无需新建表格
        $n++;
    }
}


//样例数据
$column = 2;
foreach($data as $key => $rows)  //行写入
{
    $span = 0;
    foreach($rows as $keyName => $value) // 列写入
    {
        $j = \PHPExcel_Cell::stringFromColumnIndex($span);
        $objActSheet->setCellValue($j.$column, $value);
        $span++;
    }
    $column++;
}

ob_end_clean();
ob_start();
$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
ob_end_flush();
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="'.$filename.'.xls"');
header("Content-Transfer-Encoding: binary");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
$objWriter->save('php://output');
//清空数据缓存
unset($data);
}

相关文章:

  • 电脑知识 | IPv4数据报分片
  • 【torchserve】农业小模型部署
  • ExternalProject_Add 使用手册与文档详解
  • 前端页面用html2canvas下载为图片
  • 数据治理:让大数据成为真正的“金矿”
  • 从代码学习深度学习 - 序列到序列学习 GRU编解码器 PyTorch 版
  • C# 常量
  • QScrcpy源码解析(1)
  • MOP数据库中的EXPLAIN用法
  • 初识 rsync:高效同步文件的利器(含 rsync -av 详解)
  • 【GESP】C++二级练习 luogu-B3721 [语言月赛202303] Stone Gambling S
  • VR体验馆如何用小程序高效引流?3步打造线上预约+团购裂变系统
  • LeetCode 解题思路 33(Hot 100)
  • Spring集成asyncTool:实现复杂任务的优雅编排与高效执行
  • 学习需要回看笔记
  • C语言 数据结构【双向链表】动态模拟实现
  • 11. grafana的table表使用
  • [随记] 安装 docker 报错排查
  • Docker 入门指南:基础知识解析
  • 【C++初学】C++实现通讯录管理系统:从零开始的详细教程
  • 做薪酬调查有哪些网站/百度商务合作电话
  • 网站设计师加油站/优秀品牌策划方案
  • 做装修的网站有哪些内容/nba常规赛
  • 河南做网站企起/什么是互联网销售
  • 电商网站建设与运行/公司网站费用
  • 上海网站设计团队/产品推广软文200字