当前位置:   article > 正文

Vue Luckyexcel 将文件流转成file文件后使用Luckysheet回显数据 - 附完整示例

luckyexcel

Luckysheet :一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。 

官方文档:快速上手 | Luckysheet文档快速上手 | Luckysheet文档Luckysheet ,一款纯前端类似excel的在线表格,功能强大、配置简单、完全开源。本站包含官方配置文档,API,教程。icon-default.png?t=N7T8https://mengshukeji.gitee.io/luckysheetdocs/zh/guide/

效果

注:因为项目只需要以Excel的形式展示,所以去除了工具栏、顶部信息栏、底部计数栏等配置,更多配置详见官方文档

一、准备工作

 1、安装依赖包

npm install luckyexcel --save

  2、 示例版本 

"luckyexcel": "^1.0.1",

二、使用步骤

1、在index.html文件中引入依赖包

代码如下(示例):

  1. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/css/pluginsCss.css' />
  2. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/plugins.css' />
  3. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/css/luckysheet.css' />
  4. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/assets/iconfont/iconfont.css' />
  5. <script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script>
  6. <script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js"></script>

2、单文件使用

代码如下(示例):

import LuckyExcel from 'luckyexcel';

3、调用

代码如下(示例):

  1. loadExcel() {
  2. const token = '用户token'
  3. axios.get('你的接口地址', {
  4. headers: { 'Token': token },
  5. responseType: 'blob',
  6. params: {
  7. // 参数
  8. }
  9. }).then((response) => {
  10. // 将获取到的文件对象传递给 uploadExcel 方法
  11. const file = new File([response.data], 'XXX.xlsx', { type: response.data.type });
  12. console.log(file);
  13. var files = [];
  14. files.push(file);
  15. this.uploadExcel(files);
  16. })
  17. .catch((error) => {
  18. console.error('文件获取失败:', error);
  19. })
  20. },
  21. uploadExcel(files) {
  22. if (files == null || files.length == 0) return alert('没有文件等待导入');
  23. let name = files[0].name;
  24. let suffixArr = name.split('.'),
  25. suffix = suffixArr[suffixArr.length - 1];
  26. if (suffix != 'xlsx') return alert('目前只支持导入xlsx文件');
  27. LuckyExcel.transformExcelToLucky(files[0], function (exportJson, luckysheetfile) {
  28. if (exportJson.sheets == null || exportJson.sheets.length == 0) return alert('读取excel文件内容失败, 目前不支持XLS文件!');
  29. window.luckysheet.destroy();
  30. window.luckysheet.create({
  31. data: exportJson.sheets,
  32. title: exportJson.info.name,
  33. userInfo: exportJson.info.name.creator,
  34. container: 'luckysheet', // 设定DOM容器的id
  35. showtoolbar: false, // 是否显示工具栏
  36. showinfobar: false, // 是否显示顶部信息栏
  37. showstatisticBar: false, // 是否显示底部计数栏
  38. sheetBottomConfig: false, // sheet页下方的添加行按钮和回到顶部按钮配置
  39. allowEdit: false, // 是否允许前台编辑
  40. enableAddRow: false, // 是否允许增加行
  41. enableAddCol: false, // 是否允许增加列
  42. sheetFormulaBar: false, // 是否显示公式栏
  43. enableAddBackTop: false, // 返回头部按钮
  44. showsheetbar: false, // 是否显示底部sheet页按钮
  45. enableAddRow: false,//允许添加行
  46. // 自定义配置底部sheet页按钮
  47. showsheetbarConfig: {
  48. add: false,
  49. menu: false,
  50. },
  51. });
  52. });
  53. },

三、注意事项

1、一定要给容器设置宽高等样式

  1. <div style="position: relative;height: 100vh;;">
  2. <div
  3. id="luckysheet"
  4. style="padding: 0px; position: absolute; width: 100%; left: 0px; top: 10px; bottom: 10px"
  5. >
  6. </div>
  7. </div>

2、请求接口的时候需要配置 responseType: 'blob',至少我的这个项目是这样的

responseType: 'blob',

3、接收接口响应回来的数据的处理 { type: response.data.type },至少我的这个项目是这样的

const file = new File([response.data], 'XXX.xlsx', { type: response.data.type });

tips2、3如果没有配置的话,能够正常请求接口并返回数据,但是不会正常显示excel表格,这是一个不太明显坑。

四、完整示例

index.html

  1. <!DOCTYPE html>
  2. <html lang="zh-cmn-Hans">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width,initial-scale=1.0">
  7. <title>XXX</title>
  8. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/css/pluginsCss.css' />
  9. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/plugins.css' />
  10. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/css/luckysheet.css' />
  11. <link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/assets/iconfont/iconfont.css' />
  12. <script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/plugins/js/plugin.js"></script>
  13. <script src="https://cdn.jsdelivr.net/npm/luckysheet@latest/dist/luckysheet.umd.js"></script>
  14. </head>
  15. <body>
  16. <div id="app"></div>
  17. </html>

LuckyExcel.vue

  1. <template>
  2. <div style="position: relative;height: 100vh;;">
  3. <div
  4. id="luckysheet"
  5. style="padding: 0px; position: absolute; width: 100%; left: 0px; top: 10px; bottom: 10px"
  6. >
  7. </div>
  8. </div>
  9. </template>
  10. <script>
  11. import LuckyExcel from 'luckyexcel';
  12. import axios from 'axios';
  13. mounted() {
  14. this.loadExcel();
  15. },
  16. methods: {
  17. loadExcel() {
  18. const token = '用户token'
  19. axios.get('你的接口地址', {
  20. headers: { 'Token': token },
  21. responseType: 'blob',
  22. params: {
  23. // 参数
  24. }
  25. }).then((response) => {
  26. // 将获取到的文件对象传递给 uploadExcel 方法
  27. const file = new File([response.data], 'XXX.xlsx', { type: response.data.type });
  28. console.log(file);
  29. var files = [];
  30. files.push(file);
  31. this.uploadExcel(files);
  32. })
  33. .catch((error) => {
  34. console.error('文件获取失败:', error);
  35. })
  36. },
  37. uploadExcel(files) {
  38. if (files == null || files.length == 0) return alert('没有文件等待导入');
  39. let name = files[0].name;
  40. let suffixArr = name.split('.'),
  41. suffix = suffixArr[suffixArr.length - 1];
  42. if (suffix != 'xlsx') return alert('目前只支持导入xlsx文件');
  43. LuckyExcel.transformExcelToLucky(files[0], function (exportJson, luckysheetfile) {
  44. if (exportJson.sheets == null || exportJson.sheets.length == 0) return alert('读取excel文件内容失败, 目前不支持XLS文件!');
  45. window.luckysheet.destroy();
  46. window.luckysheet.create({
  47. data: exportJson.sheets,
  48. title: exportJson.info.name,
  49. userInfo: exportJson.info.name.creator,
  50. container: 'luckysheet', // 设定DOM容器的id
  51. showtoolbar: false, // 是否显示工具栏
  52. showinfobar: false, // 是否显示顶部信息栏
  53. showstatisticBar: false, // 是否显示底部计数栏
  54. sheetBottomConfig: false, // sheet页下方的添加行按钮和回到顶部按钮配置
  55. allowEdit: false, // 是否允许前台编辑
  56. enableAddRow: false, // 是否允许增加行
  57. enableAddCol: false, // 是否允许增加列
  58. sheetFormulaBar: false, // 是否显示公式栏
  59. enableAddBackTop: false, // 返回头部按钮
  60. showsheetbar: false, // 是否显示底部sheet页按钮
  61. enableAddRow: false,//允许添加行
  62. // 自定义配置底部sheet页按钮
  63. showsheetbarConfig: {
  64. add: false,
  65. menu: false,
  66. },
  67. });
  68. });
  69. },
  70. }

  欢迎扫码下方二维码关注VX公众号

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/396072
推荐阅读
相关标签
  

闽ICP备14008679号