• Sheet.JS 在Vue-cli中使用


    参考文章:

    vue导入处理Excel表格详解_普通网友的博客-CSDN博客_vue导入excel数据

    1.安装包

    npm i xlsx -S 

    2.引入

    import XLSX from "xlsx"
    import { read, utils } from "xlsx"
    

    两种引入方式都可以  第一种使用需要 XLSX.read()  第二种可以直接使用

    导出表格 

    在这里 表格是由 数据 v-for 渲染出来的 为这个表格加上id  点击导出按钮 将表格内容转成

    table_to_book 再使用 writeFile 写出文件导出
    
    1. <table style="width: 100%; line-height: 2" id="TableToExport">
    2. <thead style="background: #f10251; color: white">
    3. <tr>
    4. <th>版本th>
    5. <th>姓名th>
    6. <th>项目th>
    7. <th>成绩th>
    8. <th>操作th>
    9. tr>
    10. thead>
    11. <tbody>
    12. <tr v-for="n in initData" :key="n.id">
    13. <td>{{n.id}}td>
    14. <td>{{n.name}}td>
    15. <td>{{n.project}}td>
    16. <td>{{n.results}}td>
    17. <td @click="deleteC(n.id)" style="cursor:pointer">删除td>
    18. tr>
    19. tbody>
    20. table>
    21. <script>
    22. data(){
    23. return{
    24. initData:[
    25. {
    26. id: 2014,
    27. name: "Uzi",
    28. project: "对线能力",
    29. results: "S",
    30. },
    31. {
    32. id: 2016,
    33. name: "Faker",
    34. project: "团队荣誉",
    35. results: "SR",
    36. },
    37. {
    38. id: 2018,
    39. name: "The shy",
    40. project: "伤害转化",
    41. results: "A+",
    42. },
    43. {
    44. id: 2020,
    45. name: "sofm",
    46. project: "土匪打野",
    47. results: "A+",
    48. },
    49. ]
    50. }
    51. methods:{
    52. deleteC(id){
    53. const index = this.initData.findIndex(x => x.id === id)
    54. this.initData.splice(index,1)
    55. },
    56. sheetjsexport(){
    57. let wb = XLSX.utils.table_to_book(
    58. document.getElementById("TableToExport"),
    59. { raw: true }
    60. );
    61. XLSX.writeFile(wb, "SheetJSTable.xlsx");
    62. }
    63. }
    64. script>

    导入表格

    vue的核心是数据驱动视图、我们要做的是运用sheet工具的api 把表格转成类似JSON的相关数据、再根据需要渲染数据到页面上

    1.点击上传的按钮 绑定事件 限制上传的文件类型

    2.

    • 获得事件对象中的文件
    • file[0] 使用FileReader 提供一个完整的事件模型,用来捕获读取文件的状态   
    • 读取传进来的表格文件 格式为二进制  read(data, { type: "binary" }) 
    • 遍历表格文件里面的sheet  转换成json格式化后  加入到预留的数据 this.tableData 中 
    • 获取excel中第一个表格数据tableData[0][0],并且将表头提取出来

    事件完整代码:

    1. inputFile(e){
    2. const file = e.target.files[0]
    3. const fileReader = new FileReader();
    4. fileReader.onload = ev => {
    5. try {
    6. const data = ev.target.result;
    7. const workbook = read(data, { type: "binary" });
    8. const params = [];
    9. // 取对应表生成json表格内容
    10. workbook.SheetNames.forEach(item => {
    11. params.push({
    12. name: item,
    13. dataList: utils.sheet_to_json(workbook.Sheets[item])
    14. });
    15. this.tableData.push(utils.sheet_to_json(workbook.Sheets[item]));
    16. });
    17. // 该算法仅针对表头无合并的情况
    18. if (this.tableData.length > 0) {
    19. // 获取excel中第一个表格数据tableData[0][0],并且将表头提取出来
    20. for (const key in this.tableData[0][0]) {
    21. this.tableHead.push(key);
    22. }
    23. }
    24. return params;
    25. // 重写数据
    26. } catch (e) {
    27. console.log("error:" + e);
    28. return false;
    29. }
    30. };
    31. fileReader.readAsBinaryString(file);
    32. }

    概念补充:

    1:FileReader : 读取文件内容
    readAsText() 读取文本文件,(可以使用Txt打开的文件)
    readAsBinaryString(): 读取任意类型的文件,返回二进制字符串
    readAsDataURL: 方法可以将读取到的文件编码成DataURL ,可以将资料(例如图片、excel文件)内嵌在网页之中,不用放到外部文件
    abort: 中断读取
    
    2:FileReader 提供一个完整的事件模型,用来捕获读取文件的状态
    onabort:读取文件断片时触发
    onerror:读取文件错误时触发
    onload:文件读取成功时触发
    onloadend:文件读取完毕之后,不管成功还是失败触发
    onloadstart: 开始读取文件时触发
    onprogress:读取文件过程中触发
    ————————————————
    版权声明:本文为CSDN博主「右想小小怪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_42705221/article/details/83750352
    ————————————————
    版权声明:本文为CSDN博主「毛发苍苍」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_45629623/article/details/114553555

    读取出来的数据:

     模板:

    1. <table style="width: 100%; line-height: 2">
    2. <thead style="background: #f10251; color: white">
    3. <tr>
    4. <th v-for="x in tableHead">{{x}}th>
    5. tr>
    6. thead>
    7. <tbody id="j">
    8. <tr v-for="n in tableData[0]" :key="n['#']">
    9. <td v-for="o in tableHead">{{n[o]}}td>
    10. tr>
    11. tbody>
    12. table>

     

  • 相关阅读:
    青少年python系列 26.turtle库绘制一个四叶草
    OpenHarmony APP开发基础
    Python服务部署 Flask/Django + uWSGI/Gunicorn
    与云idea的初见:知此软件必能成也
    pycharm+selenium+edge环境配置
    overleaf中latex语法总结
    MySQL的多版本并发控制与MVCC原理
    what is lsp in ide
    本地生活服务正在借助小程序迎战增量市场
    第144篇:阿里低开项目 init方法
  • 原文地址:https://blog.csdn.net/benlalagang/article/details/127865456