PHPExcel单独设置(高亮)单元格部分文字字体颜色 导出文件(两种方法)

在这里插入图片描述

 public function exportData(){ 
   $objPHPExcel = new \PHPExcel();
     //创建一个富文本对象
     $objRichText = new \PHPExcel_RichText();
     $objRichText->createText('铁扇公主');
     //需要改变大小或颜色的文字内容
     $objPayable = $objRichText->createTextRun('芭蕉妹妹');
     //设置加粗
     $objPayable->getFont()->setBold(true);
     //设置斜体
     $objPayable->getFont()->setItalic(true);
     //设置文字大小
     $objPayable->getFont()->setSize(15);
     //设置颜色
     $objPayable->getFont()->setColor(
         new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_DARKGREEN)
     );
     $objRichText->createText('牛魔王');
     $objPHPExcel->getActiveSheet()->getCell('A1')->setValue($objRichText);
     $PHPWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
     $PHPWriter->save($filename.'.xlsx');
 }

定义关键字,寻找关键字,对关键字设置颜色
在这里插入图片描述

 public function exportData(){
       ob_end_clean();
       ob_start();

       $file_path = "c:\\";
       $filename = time().'周出货表';
       //定义需要高亮的关键词
       $keywords = ["你好", "CN", "啊", "亮晶晶", "梳妆匣", "说道", "春风", "一层楼", "之"];

       //标题
       $header = [
           ['name' => "标题", 'content' => '匹配结果']
       ];
       //内容
       $list = [
           ['name' => "第一行", 'content' => "你好艾希你你好好啊,你好好啊,CN你真的好好好啊,眼睛亮晶晶的,nihao"],
           ['name' => "第二行", 'content' => "Hello,请别走走停停,休息一下说道CN休息一下说道,漂亮的梳妆匣漂亮的梳妆匣漂亮的梳妆匣送给你,如沐春风如沐春风"],
           ['name' => "第三行", 'content' => "Hello,欲穷千里目,更上一层楼"],
           ['name' => "第四行", 'content' => "合抱之木,生于毫末;CN九层之台,起于累土;千里之行,始于足下"],
           ['name' => "第四行", 'content' => "内容"],
       ];
       //合并
       $contents = array_merge($header, $list);
       $objPHPExcel = new \PHPExcel();
       
       //数据写进Excel,并对关键字高亮处理
       foreach ($contents as $key => $value) {
           $excelRow = ($key + 1); //excel第几行
           $name = $value['name'];
           $content = $value['content'];
           //A列
           $objPHPExcel->getActiveSheet()->getCell("A{$excelRow}")->setValue($name);
           if ($key != 0) { //不是第一行,内容才需要高亮
               $richTextObj = new \PHPExcel_RichText(); //每一行都需要重新New一个richText
               list($contentArray, $keywordsArray) = self::findKeywords($keywords, $value);
               foreach ($contentArray as $item) {
                   if ($item['high'] == 1) { //需要高亮
                       $setStyleObj = $richTextObj->createTextRun($item['content']);
                       $setStyleObj->getFont()->setColor(new \PHPExcel_Style_Color(\PHPExcel_Style_Color::COLOR_RED)); //设置颜色
                   } else { //不需要高亮
                       $richTextObj->createText($item['content']);
                   }
               }
               $objPHPExcel->getActiveSheet()->getCell("B{$excelRow}")->setValue($content);

               //$objPHPExcel->getActiveSheet()->getCell("C{$excelRow}")->setValue($richTextObj);
               $objPHPExcel->getActiveSheet()->getCell("C{$excelRow}")->setValue($richTextObj);

               //整个单元格文字变色
               //$objPHPExcel->getActiveSheet()->getStyle("C{$excelRow}")->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_RED);
               //整个单元格文字变大
               //$objPHPExcel->getActiveSheet()->getStyle("C{$excelRow}")->getFont()->setSize(20);
               //整个单元格文字变粗
               //$objPHPExcel->getActiveSheet()->getStyle("C{$excelRow}")->getFont()->setBold(true);

               $objPHPExcel->getActiveSheet()->getCell("D{$excelRow}")->setValue(implode(",", $keywordsArray));
           } else { //第一行
               $objPHPExcel->getActiveSheet()->getCell("B{$excelRow}")->setValue('原文');
               $objPHPExcel->getActiveSheet()->getCell("C{$excelRow}")->setValue($content);
               $objPHPExcel->getActiveSheet()->getCell("D{$excelRow}")->setValue('关键字');
           }

       }
 
// // 或者方法一
   //  $PHPWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
   //  $PHPWriter->save($filename.'.xlsx');

// // 或者方法二
        ob_end_clean();
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $filename . '.xls');
        header('Cache-Control: max-age=0');
        header('Content-Type: text/html; charset=utf-8');
//        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
       $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
       $objWriter->save('php://output');
       exit;
   }

    //php根据关键字把内容处理成数组,关键字高亮
    public function findKeywords($keywords, $value)
    {
        $temp = []; //关键字内容记录
        $content = $value['content'];
        $contentLen = mb_strlen($content); //内容的长度

        foreach ($keywords as $key) {
            $keyLen = mb_strlen($key); //关键字的长度
//            $contentLen = mb_strlen($content); //内容的长度
            $count = mb_substr_count($content, $key); //统计字符出现的次数

            $startSearchIndex = 0; //开始搜索的位置,重置
            for ($i = 0; $i < $count; $i++ ) { //记录关键字出现的位置
                $index = mb_stripos($content, $key, $startSearchIndex); //用来查找字符串中某部分字符串首次出现的位置(不区分大小写)。
                $temp[] = [
                    'key' => $key, //关键字内容
                    'index' => $index, //关键字索引位置
                    'len' => $keyLen, //关键字长度
                ];
                $startSearchIndex = ($index + $keyLen); //重置开始搜索的位置

                //关键字被提取,重置content内容
                /*if ($index == 0) { //第一个就是,出现在句子开头,直接截取后面的即可
                    $content = mb_substr($content, $keyLen);
                } else if (($index + $keyLen) == $contentLen) { //出现在句子结尾,直接截取前面内容
                    $content = mb_substr($content, 0, $index);
                } else { //出现在中间,左右两边都要截取
                    $content = mb_substr($content, 0, $keyLen) . mb_substr($content, ($keyLen + $index));
                }*/
            }
        }

        $tempResult = []; //最终结果数据(包括没高亮的数据)

        //二维数组根据关键字的索引index升序
        $sort = array_column($temp, 'index');
        array_multisort($sort, SORT_ASC, $temp);

        if ($temp) { //关键字存在,做数据截取操作
            $lastIndex = 0; //下一个需要匹配的数据
            $tempCount = count($temp); //关键字的长度
            foreach ($temp as $k => $v) {
                $key = $v['key'];
                $index = $v['index'];
                $len = $v['len'];

                if ($index != $lastIndex) { //关键字不是在内容最前面,
                    $tempResult[] = [
                        'content' => mb_substr($content, $lastIndex, ($index - $lastIndex)), //追加内容开头数据
                        'high' => 0 //是否高亮:1-是;0-否
                    ];
                }

                $tempResult[] = [
                    'content' => $key,
                    'high' => 1 //是否高亮:1-是;0-否
                ];

                $lastIndex = ($index + $len);

                //如果是最后一个:判断一下,如果:最后一个关键字不是在结尾,需要拼接一下结尾数据
                if ((($k + 1) == $tempCount) && ($lastIndex != $contentLen)) {
                    $tempResult[] = [
                        'content' => mb_substr($content, $lastIndex), //追加内容开头数据
                        'high' => 0 //是否高亮:1-是;0-否
                    ];
                }
            }

        } else { //关键字不存在,直接赋值
            $tempResult[] = [
                'content' => $content,
                'high' => 0 //是否高亮:1-是;0-否
            ];
        }

        $result = [
            $tempResult, //处理好了的数组
            array_column($temp, 'key') //匹配到的关键字一维数组
        ];
        return $result; //返回结果数据
    }



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/66783.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-OpenCV中的图像处理-图像梯度

Python-OpenCV中的图像处理-图像梯度 图像梯度Sobel 算子和 Scharr 算子Laplacian 算子 图像梯度 图像梯度&#xff0c;图像边界等使用到的函数有&#xff1a; cv2.Sobel()&#xff0c; cv2.Scharr()&#xff0c; cv2.Laplacian() 等原理&#xff1a;梯度简单来说就是求导。Op…

[保研/考研机试] 括号匹配问题 C++实现

题目描述&#xff1a; 在某个字符串(长度不超过100)中有左括号、右括号和大小写字母&#xff1b;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序&#xff0c;找到无法匹配的左括号和右括号&#xff0c;输出原来的字符串&am…

MachineLearningWu_14/P65-P69_Multiclass

x.1 Multiclass多分类问题 对于分类问题&#xff0c;往往指的是二分类问题&#xff0c;而对于二分类的decision boundary较为简单&#xff0c;而实际生活中会有很多问题是多分类问题&#xff0c;例如MNIST手写数字识别&#xff0c; 从特征空间上来看&#xff0c;二分类和多分类…

SpringCloud 尚硅谷 微服务简介以及Eureka使用

写在前面 该系列博客仅用于本人学习尚硅谷课程SpringCloud笔记&#xff0c;其中的错误在所难免&#xff0c;如有错误恳请指正。 官方源码地址&#xff1a;https://github.com/zzyybs/atguigu_spirngcloud2020 什么是SpringCloud Spring Cloud是微服务一站式服务解决方案&…

Segment Anything(SAM) 计算过程

给定输入图像 I ∈ R 3 H W I \in R^{3 \times H \times W} I∈R3HW。给定需要的prompts&#xff1a; M ∈ R 1 H W M \in R^{1 \times H \times W} M∈R1HW&#xff0c;代表图片的前背景信息。 P ∈ R N 2 P \in R^{N \times 2} P∈RN2&#xff0c;其中 N N N 是点的个数…

活动发布会邀请媒体6步走

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 邀请媒体参加活动发布会对信息的传播&#xff0c;企业品牌建设有诸多的好处&#xff0c;今天就与大家分享下邀请媒体参加活动报道的6个步骤&#xff1a; 1. 策划与准备&#xff1a; -明…

vue3 - 使用reactive定义响应式数据进行列表赋值时,视图没有更新的解决方案

文章目录 1&#xff0c;问题2&#xff0c;原因3&#xff0c;解决方案一、再封装一层数据&#xff0c;即定义属性名&#xff0c;在后期赋值的时候&#xff0c;对此属性进行直接赋值三、使用数组的splice来直接更改原数组三、使用 ref 来定义数据 1&#xff0c;问题 在Vue 3.0 中…

ThreadLocal

# ThreadLocal # ThreadLocal 有什么用&#xff1f; 通常情况下&#xff0c;我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢&#xff1f; JDK 中自带的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要…

Vue+Vue Router+TailwindCss+Daisyui部署

一、构建Vue项目 > npm init vuelatest > cd <your-project-name> > npm install > npm run dev 二、设置IDEA JS版本 三、安装Tailwindcss Install Tailwind CSS with Vite - Tailwind CSS npm install -D tailwindcss postcss autoprefixer npx tai…

Titanic细节记录一

目录 chunker header index_col names Series与DataFrame的区别 df.columns del和drop的区别 reset_index loc与iloc的区别 不同的排序方式 sort_values sort_index DataFrame相加 describe函数查看数据基本信息 查看多个列的数据时使用列表 处理缺失值的几种思路 …

【Kubernetes】Kubernetes之kubectl详解

kubectl 一、陈述式资源管理1. 陈述式资源管理方法2. 基本信息查看3. 项目周期管理3.1 创建 kubectl create 命令3.2 发布 kubectl expose命令3.3 更新 kubectl set3.4 回滚 kubectl rollout3.5 删除 kubectl delete 4. kubectl 的发布策略4.1 蓝绿发布4.2 红黑发布4.3 灰度发布…

代码随想录算法训练营第24天| 第七章 回溯算法part01 理论基础、leetcode 77

Part I : 回溯算法基础 背景&#xff1a;一直以来都是半懂不懂的&#xff0c;在逻辑上不难&#xff0c;毕竟属于暴力搜索&#xff1b;在代码上就开始缠绕起来了&#xff0c;自己研究的时候对N皇后问题老是理不清。这次终于在Carl这开始前进啦&#xff01;何为回溯算法&#xf…

爬虫012_字典高级操作_查询_修改_添加_删除和清空_遍历---python工作笔记031

然后来看字典高级,首先 打印某个元素 然后打印的时候注意,如果直接打印的值,在字典中没有就报错 这里要注意不能用点访问

Redis类型检查与命令多态

Redis中用于操作键的命令基本上可以分为两种类型。 其中一种命令可以对任何类型的键执行&#xff0c;比如说DEL命令、EXPIRE命令 、RENAME命令、TYPE命令、OBJECT命令等。 举个例子&#xff0c;以下代码就展示了使用DEL命令来删除三种不同类型的键: # 字符串键 redis> SE…

基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................... %fine regular gr…

ApplicationContextInitializer

目录 在何处执行&#xff1f;何时初始化&#xff1f;自己写一个ApplicationContextInitializer 那这个类的设计具体有什么作用呢&#xff1f;&#xff1f;1. DelegatingApplicationContextInitializer2. SharedMetadataReaderFactoryContextInitializer3. ContextIdApplication…

灰度均衡变换之c++实现(qt + 不调包)

1.基本原理 灰度均衡是以累计分布函数变换为基础的直方图修正法&#xff0c;它可以产生一副灰度级分布概率均匀的图像。也就是说&#xff0c;经过灰度均衡后的图像在没一级灰度上像素点的数量相差不大。公式见下图&#xff0c;为灰度值为x的像素点的个数&#xff0c;n为总像素点…

方法区——元空间概述

方法区 不同版本具体实现 标准层面&#xff1a;方法区&#xff08;Method Area&#xff09;具体实现层面&#xff1a; ≤JDK1.6 永久代JDK1.7 永久代仍然存在&#xff0c;但是已经开始提出&#xff1a;去永久代≥JDK1.8元空间&#xff08;Meta Space&#xff09; 永久代概念辨…

Linux6.34 Kubernetes yaml文件详解

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes yaml文件详解一、yaml文件概述1.查看 api 资源版本标签2.写一个yaml文件demo 计算机系统 5G云计算 第三章 LINUX Kubernetes yaml文件详解 一、yaml文件概述 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式…

【网站搭建】开源社区Flarum搭建记录

环境 服务器系统&#xff1a;腾讯云 OpenCloudOS 宝塔版本&#xff1a;免费版8.0.1 Nginx&#xff1a;1.24.0 MySQL&#xff1a;5.7.42 PHP&#xff1a;8.1.21 萌狼蓝天 2023年8月7日 PHP设置 1.安装扩展&#xff1a;flieinfo、opcache、exif 2.解除禁用函数&#xff1a;putenv…