# excel导入小程序 **Repository Path**: tect_txws/excel_import_applet ## Basic Information - **Project Name**: excel导入小程序 - **Description**: excel导入小程序,季俊潇开发,臧义蕾维护 - **Primary Language**: PHP - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2018-03-15 - **Last Updated**: 2024-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Excel 小程序 # ## 最近版本更新 ## ### v1.0.7 ### 1. 修复程序二中二次算法错误的问题 ### v1.0.6 ### 1. 修复 Top 算法错误 ### v1.0.5 ### 1. 修复已知问题 2. 文件输出名称更改为程序名+时间,更加可视化 3. TOP 算法中系数更改为 10000 ### v1.0.4 ### 1. 新增数据类型检测,加快执行速度 2. 对所有数据库异常记录日志 3. 修复已知问题 ### v1.0.3 ### 1. 修复已知问题 2. 优化程序二上传速度 3. 增加某些异常检测 4. 程序一运行时创建表结构 ### v1.0.2 ### 1. 减少程序一的内存使用 2. 程序一加入二次计算 3. 程序二输出列新增求和算法 4. 程序二加入二次计算 ### v1.0.1 ### 1. 优化了程序二的速度。 2. 增加了程序二执行中的日志输出。 ### v1.0 ### 1. 修复在程序二的顶部算法中因为输出为0导致的错误 ### v0.9.9 ### 1. 增加重复列输出的检测与过滤 2. 增加程序二数据插入时对数据的转义 ### v0.9.8 ### 1. 修复列名为关键字时无法生成程序一的表格 2. 修复因为输入列为非数字引起的程序二错误,从而无法生成表格 ### v0.9.7 ### 1. 在程序二中,TOP 条件按自定义分类过滤 2. 在程序二中,输出项求和由原先只包括TOP算法的字段改为所有字段 3. 增加系统信息页面 ### v0.9.5 ### 1. 前端增加错误页面 2. 后台增加错误日志记录 3. TOP 条件按分类过滤 4. 修复程序一输出日期列时数据库崩溃的问题 ### v0.9.3 ### 1. 优化程序一输出 Excel 速度 ### v0.9.2 ### 1. 上线前的最后一个版本,在功能上接近正确 2. 修复偶发的TOP值计算不正确 ### v0.8.9 ### 1. TOP 过滤增加排序 ### v0.8.8 ### 1. 优化上传速度 2. 修正权重百分比 ### v0.8.7 ### 1. 前端增加 Loading 在上传的时候 2. 前端修复两个显示的BUG ### v0.8.6 ### 1. 输入大写的字段名,导致输出的计算列的数据为空 2. 对插入的Excel数据进行转义,防止因非法字符而失败 ### v0.8.5 ### 1. 程序一输出列中如果不包括去重列,则给出提示 2. 修复 TOP 算法中,自定义类目中的最大值为 0,导致不能下载的问题 ### v0.8.4 ### 1. 修复程序二一些BUG,比如有概率标题输出错误的问题。 ### v0.8.3 ### 1. 程序二Excel格式检查 2. 修复程序多个BUG ### v0.8.2 ### 1. 程序一可以重复上传文件,覆盖之前的文件 2. 最后一天和最近一天的时间计算值错误 3. Excel 格式检查 BUG 4. 可以对同一列名进行多次计算 ### v0.8 ## 1. 不再对列当中包含中文进行检测,如果包含,则该列计算结果为零 2. 完成程序二的改写 ### v0.7.2 ### 1. 接口一增加没有上传 Excel 时的提醒 2. 修复错误的"列中包含中文的提示" 3. 在"列的中文提示中"包含该列名 4. 支持用户输入大写的列名 5. 对用户输入的列名进行检查,如果不存在则给予提示 ### v0.7 ### 更新时间:2017-10-09 1. 修复插入数据乱码的问题 2. 前端增加异常的提示 ### v0.6 ### 更新时间:2017-10-08 1. 修复一些BUG 2. 重写接口一和接口二,极大地改善了代码的可读性 ### v0.5 ### 更新时间:2017-09-30 这一版本走通流程,并且通过测试。 ## 错误代码 ## ### Excel 文件错误 ### 101 -> Excel 文件类型异常 ### Excel 数据错误 ### 302 -> 数据列中包含中文异常 303 -> Excel 没有上传异常 ### 页面表单输入错误 ### 401 -> 输出列中不包含去重列异常 402 -> 输出的列名没有找到异常 403 -> 重复输入 TOP 条件异常 404 -> 没有找到符合条件的数据异常 405 -> 过滤条件异常 406 -> 用户在表单中输入了非数值字符异常 ### 数据查询错误 ### 501 -> 数据查询失败异常 502 -> 数据插入失败异常 503 -> 创建表结构发生异常 ### 通用错误 ### 601 -> 系统发生严重错误 602 -> 被除数为零异常 603 -> 参与计算的元素非数值异常 ## 特殊的写法 ## ### Class Sheet ### #### 两个 MySQLi 的连接 #### 之所以创建两个 MySQLi 的连接,是因为第一个是用以读取大批量的数据,第二个用以获取小批量的数据。第一个读取不立即获取结果集,所以不能进入第二次查询。第二个连接立即获取结果集,当即释放。 ``` $this->mysqli = new \mysqli('localhost','root','','zhongwen',3306); $this->mysqli2 = new \mysqli('localhost','root','','zhongwen',3306); ``` #### 预定义字段 #### 因为插入的字段都是预定义的,所以在 Sheet 类当中设置预定义的字段为成员变量,如下: ``` // 预定义表字段 private $preDefineField = ['a','b','c','d','e','f','g','h','i','j','k', 'l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','ab', 'ac','ad','ae','af','ag','ah','ai','aj','ak','al','am','an','ao', 'ap','aq','ar','cs','ct','au','av','aw','ax','ay','az','ba','bb', 'bc','bd','be','bf','bg','bh','bi','bj','bk','bl','bm','bn','bo', 'bp','bq','br','bs','bt','bu','bv','bw','bx','by','bz']; ``` 其中,`as`和`at`因为是 MySQL 的保留关键字,所以特意改成了`cs`,`ct`。 #### 获取查询的字段(错误的写法) #### ``` array_splice($this->preDefineField,0,count($outColumns)) ``` `$outColumns`为用户定义的输出字段,对预定义的字段按照`$outColumns`的个数进行裁剪, 进而在数据表中查询。 ### SQL ### #### 将 varchar 字段转为 数值进行聚合运算 ### ```` $sql = 'SELECT max(' . $column . ' + 0) FROM temp_compute WHERE ' . $customCategoryField . ' =\'' . $customCategoryValue . '\'' . $this->conditions . $limit; ```` ## 601 错误的由来 ## 根本原因是因为前端没有接受到后端正常的传值,进而或跳转到 `localhost/undefined`页面。 之所以后端没有返回正常的传值是因为后台出现了语法错误。之所以会出现语法错误,是因为 用户输入的参数导致了数组索引的溢出,这种情况出现在程序的很多地方。 为了给用户更友好的提示,当发生 601 错误的时候,就会跳转到 undefined 页面,并且记录下日志以备后续排查问题。