前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHPExcel写入单元格的数据为空,但是数据源有值【php】

PHPExcel写入单元格的数据为空,但是数据源有值【php】

作者头像
sinnoo
发布2020-11-13 10:54:15
3.5K0
发布2020-11-13 10:54:15
举报
文章被收录于专栏:技术人生技术人生

一,前言

1,核心代码

PHPExcel,php处理excel插件

代码语言:javascript
复制
$objPHPExcel = new \PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
objActive = objPHPExcel->getActiveSheet()

2,两种写入方式

$objActive->setCellValue("A1", "content") 根据传入内容自动判断单元格内容类型

比如content = 'a' 字符串;content = 123 数值 ; content =true 布尔类型

objActive->setCellValueExplicit("A1", "数据",

支持的类型有:TYPE_STRING TYPE_STRING2 TYPE_NULL TYPE_NUMERIC TYPE_FORMULA TYPE_BOOL TYPE_ERROR

二,问题出现

1,问题描述

从数据库获取数据,然后循环遍历写入excel的时候

有的单元格可以写入数据,有的单元格数据为空,查询数据源,发现并没有丢失的数据。

2,排查

对比了可以写入的数据和不能写入的数据

发现只有emoji表情方面的区别,原来PHPExcel不支持这种编码的

当然有解决的办法,请参考:https://github.com/iamcal/php-emoji

我选择了对表情进行过滤。

3,过滤,PHP语言

preg_replace_callback(a, function(), c) 执行正则表达式搜索并使用回调替换

$a : 要搜索的字符串

function : 回调函数

$c : 源输入

实例:返回过滤后的数据,数组对应数组,字符对应字符

代码语言:javascript
复制
function filterEmoji($str)
{
    $str = preg_replace_callback(
            '/./u',
            function (array $match) {
                return strlen($match[0]) >= 4 ? '' : $match[0];
            },
            $str);

     return $str;
 }

实例2:匹配emoji表情function emoji_match($text)

代码语言:javascript
复制
{
    $emoji = "/[\u010000-\u10FFFF]/g"; // 4字节utf-16 = emoji
    return preg_match($emoji, $text);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,前言
  • 二,问题出现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档