xlsx的单元格修改,获取当前单元格的数据类型

xlsx.js的单元格修改,获取当前单元格的数据类型

找遍全网没有找到xlsx.js,本地文件读取时获取当前单元格的类型,对特殊类型单元格进行修改的格式化的方法,因为我们需求是一个没有固定模板的Excel文件要对时间进行处理,其余保留原始值;

代码内容

1.先拿到文件对象,用FileReader方法获取到文件的对象

const fileRead = (files) => {return new Promise((resolve) => {// eslint-disable-next-line new-capconst filer = new FileReader();filer.readAsBinaryString(files);filer.onload = (ev) => {resolve(ev);};});
};

2.写一个获取文件内的内容和头部的一个公用方法

export const excelToArray = async (file) => {const cont = await fileRead(file);// 返回promise的文件处理函数返回二进制数据const data = cont.target.result;const workbook = XLSX.read(data, {// 将二进制数据放入得到excel数据type: "binary",cellDates: true //规定时间进行处理成日常的时间格式});const wsname = workbook.SheetNames[0]; // 取第一张表const ws = XLSX.utils.sheet_to_json(workbook.Sheets[wsname]); // 生成json表格内容console.log('格式化后', ws);// 获取表头2-1const a = workbook.Sheets[workbook.SheetNames[0]];console.log('未进行格式化', a);const contents = getRow(a) // 获取内容的方法![在这里插入图片描述](https://img-blog.csdnimg.cn/68977dc495244775bbd8aaaefe7ce608.png#pic_center)const headers = getHeaderRow(a); // 获取头部的方法return {headers: headers,ws: ws,contents};
};

直接用XLSX.utils.sheet_to_json() 方法无法满足需求

3.自己写了一个方法获取到了文件的,单元格格式后进行处理

const getRow = (sheet) => {const contents = [];/* sheet['!ref']表示所有单元格的范围,例如从A1到F8则记录为 A1:F8*/// c 表示列,r表示行,从0开始的const range = XLSX.utils.decode_range(sheet["!ref"]);// console.log('range', XLSX.utils.decode_range);let C,R = range.s.r; /* 从第一行开始 *//* 按列进行数据遍历 */let i = 0;for (let mr = range.s.r + 1; mr <= range.e.r; ++mr) {// 便利行来查找contents[mr - 1] = {}for (C = range.s.c; C <= range.e.c; ++C) {let obj = {}/*固定 查找第一行中的单元格 */const cell = sheet[XLSX.utils.encode_cell({c: C,r: R})];const name = XLSX.utils.format_cell(cell) // 键名/* 查找对应行内的单元格内容 */const cellCur = sheet[XLSX.utils.encode_cell({c: C,r: mr})];if (!cellCur) {contents[mr - 1][name] = {value: '',type: ''}} else {const nameCur = XLSX.utils.format_cell(cellCur) // 键名contents[mr - 1][name] = {value: cellCur.v || '',type: cellCur.t || ''}}}}return contents;
};

处理完成后的数据

表头的处理方法

/*** 将File文件通过xlsx读取表头为数组* @param file* @return {list}*/
export const getHeaderRow = (sheet) => {const headers = [];/* sheet['!ref']表示所有单元格的范围,例如从A1到F8则记录为 A1:F8*/const range = XLSX.utils.decode_range(sheet["!ref"]);let C,R = range.s.r; /* 从第一行开始 *//* 按列进行数据遍历 */let i = 0;for (C = range.s.c; C <= range.e.c; ++C) {/* 查找第一行中的单元格 */const cell = sheet[XLSX.utils.encode_cell({c: C,r: R})];let hdr = "UNKNOWN " + C; // <-- 进行默认值设置if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);if (hdr.indexOf("UNKNOWN") > -1) {if (!i) {hdr = "__EMPTY";} else {hdr = "__EMPTY_" + i;}i++;}headers.push(hdr);}return headers;
};

vue xlsx.js获取单元格数据类型的hooks 单元格类型处理相关推荐

  1. vue 和 js 获取 dom节点下的某个元素,然后设置样式

    vue获取dom节点下的类名,然后修改样式 <div ref="divRef"><div class="a">提到岁月,你们总说它是长河 ...

  2. vue 创建图片坐标点_利用vue+fabric.js获取图片坐标,并实现图片拖拽、旋转、拉伸等功能...

    什么是Fabric.js? Fabric.js是一个可以简化Canvas程序编写的库. Fabric.js为Canvas提供所缺少的对象模型, svg parser, 交互和一整套其他不可或缺的工具. ...

  3. vue js获取手机系统型号、版本、浏览器类型

    1.index.html引入 <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script ...

  4. js获取mysql数据库数据类型_怎么利用JS将从数据库中读取出来的日期型格式化为想要的类型...

    在页面初始化时,用JavaScript将从数据库中读取出来的日期型格式化为想要的类型.格式化为yyyy年MM月dd日 HH时mm分ss秒,大家可以参考下代码,自由发挥下. 代码如下://传入从数据库中 ...

  5. js把vue转化html,将 vue.js 获取的 html 文本转化为纯文本

    我存入数据表中的数据是使用 html  格式,获取数据是使用 vue 获取. 遇到了一个问题,就是界面上显示的数据是 html 格式的,但是我需要它显示纯文本. 怎么做呢?首先在  js  中写一个将 ...

  6. vue.config.js配置

    原作者项目地址:https://github.com/staven630/vue-cli3-config const path = require("path"); const w ...

  7. html如何取单元格内容,JS获取表格内指定单元格html内容的方法

    JS获取表格内指定单元格html内容的方法 本文实例讲述了JS获取表格内指定单元格html内容的方法.分享给大家供大家参考.具体如下: 下面的代码先通过表格对象的rows获得指定的行的所有单元格数组, ...

  8. vue + xlsx 动态生成Excel,合并单元格

    根据数据动态生成一个Excel导出文件,这个公共相对简单一些,引入 xlsx就可以了. 但是根据需求,动态合并单元格,貌似难度不小,这里需要对 xlsx的属性和方法有一定的了解才可以,那么一起学习一下 ...

  9. 给第一行单元格赋值WPS JS获取工作表的总行数WPS JS获取工作表的总行数

    戳我,了解更多相关办公的小技巧 给第一行单元格赋值 1.在计算机中有一种ASCII编码,其中A在计算机中的表示的数字是65,a的ascii码是97,b的ascii码是98. 2.从A1到F1可以看到第 ...

最新文章

  1. 破一个行业ERP的感想
  2. 深入理解python中的select模块
  3. 【黑客免杀攻防】读书笔记6 - PE文件知识在免杀中的应用
  4. 在DZ 中 showmessage 中可以再次执行 JS
  5. leetCode 110. Balanced Binary Tree 平衡二叉树
  6. 游戏总监“姐夫”今日离开暴雪,玩家却欢乐地吃着『暴雪要凉』的瓜
  7. Nginx配置静态资源
  8. 解读现代存储系统背后的经典算法
  9. idea开发vue项目时,使用@引入组件警告:Module is not installed
  10. 运维工程师面试题及答案(网络运维工程师面试题)
  11. 神推荐:酷站导航你值得拥有
  12. 计算机网络蠕虫病毒及防范,蠕虫病毒检测与防范本科毕业论文.doc
  13. 为什么硬件工程师招聘如此之难?
  14. 餐巾计划(网络流24题之二(模板2))
  15. python的乐高积木——函数
  16. jxl创建excel加水印
  17. NumberPicker
  18. 爱家租房网站1-15博客地址
  19. 磁盘阵列RAID技术详解
  20. C盘爆满的解决方案?很可能是因为这个Group2文件夹

热门文章

  1. POJ 3290 WFF 'N PROOF 英文少
  2. Magento compare products ajax
  3. Need assistance with accessing your developer account
  4. pytho lambda表达式
  5. 大数据与人工智能方向基础 --- 概述
  6. R7900P/R7960P/R8000P梅林固件
  7. 高德地图怎么画圈_高德地图 Javascript API 入门(二)
  8. e系列是服务器CPU吗,Intel-至强E系列CPU参数
  9. e系列是服务器CPU吗,教你识别英特尔E系列服务器CPU
  10. 2.4 线性丢番图方程