使用php读取大量列的excel数据
今天接到个需求是对excel里的礼包数据导入到数据库
使用composer包
composer require phpoffice/phpspreadsheet:^1.18
由于对应的奖品众多,奖品数量不固定,对列的数量也不固定,想通过代码实现一劳永逸的办法。
该插件提供的获取最大的列的方法
$col = $sheet->getHighestColumn(); //返回列名 “AA”
到这里就无法遍历所有列了
因为ord('AA') = 65, 只取了第一个字母。
为解决这个问题,需要按照excel的格式将类似AAB, CZ等列转成数字进行遍历,获取单元格时再转成列名。实现方法如下:
列名和列数字相互转换
// 通过列名推导列排在第几个数字
function colToNum($col)
{$initAsciiNum = 64; // 第一个字母A的ASCII值$letterNum = 26; // 字母个数$num = 0;$len = strlen($col);for ($i = 0; $i < $len; $i++) {$c = $col[$len - $i - 1];$num += pow($letterNum, $i) * (ord($c) - $initAsciiNum);}return $num;
}// 通过数字反推列名
function numToCol($num)
{$n = $num;$str = '';$letterNum = 26; // excel一共使用26个字母来组合$initAsciiNum = 64; // 第一个字母A的ASCII值while (true) {if ($n > 0) {$y = $n % $letterNum; // 计算余数if (!$y) {$n--;$y = $letterNum;}$str = chr($y + $initAsciiNum) . $str;$n = intval($n / $letterNum);if ($n === 1 && $y === 0) {break;}} else {break;}}return $str;
}
对以上的代码进行测试
wps的excel中最大的列名是XFD,转换成数字是16384。说明excel的表格最大支持16384个列,足以满足大多数业务使用。
使用php读取大量列的excel数据相关推荐
- 使用jxl导入excel文件 读取带有有效性的excel数据,遇到的问题
一.使用jxl读取excel数据时,由于添加了数据有效性验证,在Wookbook.getSheet(0)的时候出现空指针异常: Warning: Cell at A6 not present - ad ...
- 批量读取和写出excel数据#R语言#
运用R语言处理数据时总会遇到大批量excel数据读取和写入的问题,以R中的iris数据集举例,主要有以下几种形式(直接上代码): 读入数据: 1.将多个excel数据批量读入R环境中(读入csv格式文 ...
- python读取xlsx python读取excel数据
如题 python pandas读取excel数据 如何读取特定sheet的excel数据 1.安装pandas 已经有的可以不用再安装 >pip install pandas 2.读取数据 首 ...
- java excel data 导入数据_java实现导入导出excel数据
项目需要,要实现一个导入导出excel的功能,于是,任务驱动着我学习到了POI和JXL这2个java操作Excel的插件. 一.POI和JXL介绍 1.POI:是对所有office资源进行读写的一套工 ...
- 如何利用API实现行式报表后台导入excel数据入库
润乾报表提供了excel导入页面后入库的功能,丰富了用户导入excel的方式.对于普通填报表,润乾报表提供了直接后台入库和导入页面入库的方式,那么在行式填报表中,如何实现后台导入excel入库呢 ...
- java 动态导入excel_java实现导入导出excel数据
项目需要,要实现一个导入导出excel的功能,于是,任务驱动着我学习到了POI和JXL这2个java操作Excel的插件. 一.POI和JXL介绍 1.POI:是对所有office资源进行读写的一套工 ...
- 行式填报表导入excel数据直接入库
由于行式填报在导入excel的数据量比较大的时候,页面加载数据会很慢,在这种情况下可以采取后台直接导入数据库的方法,实例如下: package example; import java.sql. ...
- python读取excel某一列内容-Python读取Excel数据并根据列名取值
一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...
- matlab输入excel高版本,『matlab读取excel指定列』excel中大量数据如何导入matlab当中?超过1000个数据无法一个一个输入...
如何将excel表格中大量数据导入matlab中并作图 哈哈,选我吧!使用xlsread函数体的语法你在帮助里面搜索xlsread就可以了.我要是现在回答也接翻译帮助文件.xlsread的参数有文件表 ...
最新文章
- linux fedora 35 彻底卸载idea2021.2.2
- python调用数据库数据类型_Python使用Mysql官方驱动(取出dict类型的数据)
- scrapy爬取多页面
- java 图片有损压缩_java - 用有损jpeg压缩多页tiff图像 - 堆栈内存溢出
- Python+OpenCV:尺度不变特征变换 (SIFT, Scale-Invariant Feature Transform)
- arduino 有源 蜂鸣器_Arduino控制蜂鸣器发声
- Intellij Idea插件开发点滴记录
- linux cpu 时间,【Linux】CPU时间与处理器耗时
- 7-45 水果忍者 (30 point(s))
- 线程三连鞭之“线程基础”
- 【PTA】代码部分基础整理
- MySQL面试题大全(陆续更新)
- cf手游3月22日最全更新内容:恐怖博物馆、凤凰武器、血月模式上线
- 深度linux系统联想e42-80安装,联想E42-80笔记本win10改win7系统
- 蓝桥杯题解-高僧斗法
- 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?
- html自动获取当前日期格式,js日期格式化format
- 5.14上午数据库学习笔记
- 投资性房地产注意事项
- 服务器压力测试 wrk,wrk性能测试(详解)
热门文章
- 使用 Eslint + husky + lint-staged + Prettier 提高前端项目质量、统一项目代码风格
- 软件测试工程师笔试面试题带答案(一)
- MIR4 预制凭证修改及过账,尾差调整
- Python程序设计基础第七章笔记:字符串
- 51单片机74ls273并行输出地址c语言程序,跑马灯/输入输出接口(片选地址74LS273)...
- 苹果Mac电脑清理垃圾软件卸载工具CleanMyMac X
- 【好诗选读】新春诗会作品合集|黄晓平 蒋德明 徐书遐|刘红立 孟萌 刘东宏
- Java—文件传输助手单机版,你值得拥有
- 【JavaEE】HTML
- bWAPP解题笔记——A7-Missing Functional Level Access Control