承接上篇

处理中-内容的处理

设置reader和编码

$file_path = 'test.xls';
$excel5_reader = new PHPExcel_Reader_Excel5();
$excel5_reader->_defaultEncoding = $encoding;
$excel2007_reader = new PHPExcel_Reader_Excel2007();
$excel2007_reader->_defaultEncoding = $encoding;
$reader = null;if($excel5_reader->canRead($file_path)) {$reader = $excel5_reader;
} elseif($excel2007_reader->canRead($file_path))  {$reader = $excel2007_reader;
} else {return array();
}

处理多sheet和遍历内容

  • 核心方法:$all_sheets = $table_object->getAllSheets();
$table_object = $reader->load($file_path);
$all_sheets = $table_object->getAllSheets();
$i = 0;
foreach ($all_sheets as $key => $sheet_obj) {$sheet_title = $sheet_obj->getTitle();$row_iterator = $sheet_obj->getRowIterator();foreach ($row_iterator as $k1 => $row_obj) {$cell_iterator = $row_obj->getCellIterator();}
}

处理样式

  • 核心方法: $cell_obj->getStyle();
  • 下述方法为转化为css标准样式,可以直接拿来使用
$style_object = $cell_obj->getStyle();
$style = [];//css标准样式$fill_object = $style_object->getFill();
$font_object = $style_object->getFont();
$borders_object = $style_object->getBorders();
$alignment_object = $style_object->getAlignment();$fill_type = $fill_object->getFillType();if (PHPExcel_Style_Fill::FILL_SOLID === $fill_type) {$color = $fill_object->getStartColor()->getRGB();$style['background-color'] = '#'. $color;
}$top_border_style = $borders_object->getTop()->getBorderStyle();
$top_border_color = $borders_object->getTop()->getColor()->getRGB();
$top_border_style = $this->_trick_excel_border_style($top_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $top_border_style) {$style['border-top'] = '1px '. $top_border_style . ' #' . $top_border_color;
}$left_border_style = $borders_object->getLeft()->getBorderStyle();
$left_border_color = $borders_object->getLeft()->getColor()->getRGB();
$left_border_style = $this->_trick_excel_border_style($left_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $left_border_style) {$style['border-left'] = '1px '. $left_border_style . ' #' . $left_border_color;
}$bottom_border_style = $borders_object->getBottom()->getBorderStyle();
$bottom_border_color = $borders_object->getBottom()->getColor()->getRGB();
$bottom_border_style = $this->_trick_excel_border_style($bottom_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $bottom_border_style) {$style['border-bottom'] = '1px '. $bottom_border_style . ' #' . $bottom_border_color;
}$right_border_style = $borders_object->getRight()->getBorderStyle();
$right_border_color = $borders_object->getRight()->getColor()->getRGB();
$right_border_style = $this->_trick_excel_border_style($right_border_style);
if (PHPExcel_Style_Border::BORDER_NONE !== $right_border_style) {$style['border-right'] = '1px '. $right_border_style . ' #' . $right_border_color;
}$font_size = $font_object->getSize();
if (isset($font_size) && $font_size > 11) {$style['font-size'] = $font_size . 'px';
}
$font_color = $font_object->getColor()->getRGB();
if (isset($font_color) && $font_color != '000000') {$style['color'] = '#' . $font_color;
}$font_bold = $font_object->getBold();
if ($font_bold) {$style['font-weight'] = 'bold';
}
$font_italic = $font_object->getItalic();
if ($font_italic) {$style['font-style'] = "italic";
}
$font_underline = $font_object->getUnderline();
if ($font_underline && $font_underline != PHPExcel_Style_Font::UNDERLINE_NONE) {$style['text-decoration'] = "underline";
}
$font_strikethrough = $font_object->getStrikethrough();
if ($font_strikethrough) {$style['text-decoration'] = "line-through";
}$horizontal = $alignment_object->getHorizontal();
if ($horizontal != 'general') {$style['text-align'] = $horizontal;
}$vertical = $alignment_object->getVertical();
if ($vertical != 'bottom') {$style['vertical-align'] = $vertical;
}

获取数据

  • 核心方法:$cell_obj->getCalculatedValue();
  • 注意防止注入
$cell_obj->getCalculatedValue();//会处理公式和富文本的值 string
$cell_obj->getValue();//不处理公式和富文本的值,存在多种类型

处理超链接

核心方法:$cell_obj->getHyperlink()->getUrl();

$value = $cell_obj->getCalculatedValue();
$url = $cell_obj->getHyperlink()->getUrl();
$link = '<a href="'.$url.'" target="_blank">' . $value . '</a>';

处理公式

  • $cell_obj->getValue();
  • 需要先判断是否是公式值
  • 返回格式string,ie A1:E1
if (!$cell_obj->isFormula()) {return null;
}
$value = $cell_obj->getValue();//A1:E1
preg_match('/([a-zA-Z]+)\(([a-zA-Z]+)(\d+)\:([a-zA-Z]+)(\d+)\)/', $value, $ranges); // 获得ranges范围
if (empty($ranges[1])) {return null;
}

合并单元格

  • $merges = $sheet_obj->getMergeCells();
  • 返回的是merge数据数组
$merges = $sheet_obj->getMergeCells();if (empty($merges)) {return null;
}$merge_info = [];
foreach ($merges as $k => $merge) { //A1:E1preg_match('/([a-zA-Z]+)(\d+)\:([a-zA-Z]+)(\d+)/i', $merge, $ranges); //获得range范围 //todo something
}

列宽和行高

//行高
$row_iteratior = $sheet_obj->getRowIterator();
$row_hights = [];//实际行高值$i= 0;
foreach ($row_iteratior as $k => $row) {$row_height = (int)($sheet_obj->getRowDimension($k)->getRowHeight());$row_hights[$i] = $row_height;$i++;
}
//列宽
$col_iteratior = $sheet_obj->getColumnIterator();
$col_widths = [];//实际列宽值$i= 0;
foreach ($col_iteratior as $k => $col) {$col_width = (int)($sheet_obj->getColumnDimension($k)->getWidth())*7;$col_widths[$i] = $col_width;$i++;
}

表格冻结

$freeze = $sheet_obj->getFreezePane(); // 返回 ie: A2

其他问题

空的sheeft的处理

  • 有样式,无数据
  • 默认边框和空白边框的处理

横坐标处理

Excel的横坐标为A、B…、AA、AB类型,需要转化坐标。

private function _get_sheet_col_key($label) {$col_key_map = [];$abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';for ($i=0; $i < 600; $i++) {$a = (int)($i / 26);$b = $i % 26;$column_label = '';if ($a == 0) {$column_label = $column_label . substr($abc, $b, 1);} else {$a = $a -1;$column_label = substr($abc, $a, 1) . substr($abc, $b, 1); }$col_key_map[$column_label] = $i; }return $col_key_map[$label];
}

原文地址

PHP读取Excel数据相关推荐

  1. android读取excel数据库,Android 读取Excel数据并保存在本地数据库

    在工作中遇到需要将Excel的数据读取出来并保存在本地数据库中的操作,数据如下: 图片.png 需要做以下准备: 读取Excel的jar包[文章末尾会分享该jar包] 保存数据的数据库框架,在这里我们 ...

  2. python读取excelsheet-一文看懂用Python读取Excel数据

    原标题:一文看懂用Python读取Excel数据 导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要 ...

  3. python读取excel某一列内容-Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  4. python如何读取excel数据-python怎么读取excel中的数值

    最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用过程中读取excel数据相关操作. 安装xlrd库(推荐学习:Python视频教程) 可以下载x ...

  5. poi excel mysql_java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 :java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 : ...

  6. python读取表格数据_Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  7. android 读取excel数据并保存为xml文件

    今天,简单讲讲android如何  读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...

  8. python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法

    Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...

  9. cdatabase读取excel第一行数据_pandas读取excel数据并对重复数据进行标记或者删除

    pandas读取excel数据并对重复数据进行标记或者删除​mp.weixin.qq.com pandas通常在读取excel数据之后,如果需要进行去重,有两种方式,一种是进行标记,另一种是在pand ...

  10. vue-element-xlsx在线读取Excel数据预览

    vue-element-xlsx在线读取Excel数据预览 1.安装XLSX npm install xlsx -s 2.复制过去就可以用 <template><div>< ...

最新文章

  1. eva每一集片尾曲是谁唱的_【跪求】EVA 18集片尾曲的歌手名,考验大家的听力~...
  2. Unix Domain Socket 域套接字实现
  3. JVM调优总结 -Xms -Xmx -Xmn -Xss(转载)
  4. python getattr_Python 内置方法和属性应用:反射和单例
  5. 【FZU - 1759】Super A^B mod C (数论,快速幂,快速乘,欧拉降幂,指数循环节,模板)
  6. 《唐人街探案3》回归春节档,2021大年初一上映!
  7. zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件
  8. 【每日一题】Leetcode 刷题 二叉树-树的遍历 介绍
  9. QT学习记录:编译错误“no matching function for call toXXX“
  10. 非负矩阵分解NMF简介
  11. Fiddler抓取Chrome最新版HTTPS设置
  12. Maven中dependencyManagement标签的作用
  13. 数论概论笔记 第3章 勾股数组与单位圆
  14. 《PUBG》大动作封锁3百万玩家 作弊问题严重
  15. 【已解决】PEP 8: W292 no newline at end of file等相关PEP 8错误与警告
  16. 喏,你们要的58条 Allegro 使用技巧汇总整理好了
  17. mysql主从配置duxi_手把手超详细Docker部署MongoDB集群
  18. SyntaxError: Non-UTF-8 code starting with '\xca'
  19. 2022年9月青少年软件编程(图形化)等级考试试卷--三级--数星星
  20. 汽车自适应巡航控制策略【CarSim/Simulink 仿真】

热门文章

  1. Hacker Rank 上的 Even Tree 小议
  2. 如何建立高效的需求管理机制?
  3. App功能测试点总结
  4. 大陆计算机科学家排名,韩家炜、张宏江2位校友在世界顶尖计算机科学家排名中分别位居华人科学家和中国大陆科学家之首...
  5. kmeans算法python实现(iris数据集)
  6. IAR(8.324)---安装教程
  7. FPGA、AD9371、AD9009、RF SOC介绍
  8. json文件转Excel
  9. 阿里巴巴优酷视频增强和超分辨率挑战赛-持续更新
  10. 苏宁收购天天快递,海航哭晕,申通老板怒赚20亿