• react中预览excel表格


    查了很多资料,很多插件,有很多也用不了,最后试了xlsx这个插件,可以使用。

    话不多少了,直接放代码吧:

    1.代码实现

    1. fetch(API).then((res: any) => {
    2. res?.blob().then((r: any) => {
    3. const reader = new FileReader();
    4. //通过readAsArrayBuffer将blob转换为ArrayBuffer对
    5. reader.readAsArrayBuffer(r) // 这里的res.data是blob文件流
    6. reader.onload = (event: any) => {
    7. // 读取ArrayBuffer数据变成Uint8Array
    8. let data = new Uint8Array(event.target.result);
    9. // 这里的data里面的类型和后面的type类型要对应
    10. let workbook = XLSX.read(data, { type: "array" });
    11. set_work_book(workbook);
    12. let sheetNames = workbook.SheetNames; // 工作表名称
    13. set_sheet_names(sheetNames);
    14. set_select_sheet(sheetNames[0]);
    15. let worksheet = workbook.Sheets[sheetNames[0]];
    16. // var excelData = XLSX.utils.sheet_to_json(worksheet); //JSON
    17. let html = XLSX.utils.sheet_to_html(worksheet);
    18. document.getElementsByClassName('xlsxClass')[0].innerHTML = html
    19. };
    20. })
    21. })

    简单说一下,我的excel文件是后台返回的,拿到res之后,先转为blob格式,然后经过一系列的转义,最终拿到Unit8Array格式数据,通过插件XLSX的read方法,读出excel的数据,worksheet就是excel文件中具体每一行的数据:

     workbook.Sheets[sheetNames[0]]是用来访问工作簿中名为sheetNames[0](指的第一个)的工作表,XLSX.utils.sheet_to_html(worksheet)这个函数则是将工作表(worksheet)转换成HTML表格的形式,生成HTML代码,然后使用innerHTML将数据写到页面上即可。

    2,优化

    这种方法预览的数据没有边框,我们自己写一下样式即可:

    1. .xlsxClass {
    2. table {
    3. border: 1px solid #c9c9c9c9;
    4. td {
    5. border-left: 1px solid #c9c9c9c9;
    6. border-bottom: 1px solid #c9c9c9c9;
    7. padding: 10px;
    8. min-width: 120px;
    9. }
    10. }
    11. }

     然后还有一个问题,如果是多个表的话,需要将workbook存下来,首先把拿到的工作簿列表进行页面显示,然后点击的时候切换时再次执行:获取当前点击的工作簿以及转为html并显示的操作,替换掉名字就行了。

  • 相关阅读:
    Excel 智能填充
    javaSE I/O流(二)—— 各种各样的流
    GO语言篇之CGO
    七个开发者不可不知的VS Code小技巧
    uniapp ios手机端获取时间戳出现NAN
    Spring Bean继承的简介说明
    [附源码]java毕业设计高要某高校教务处排课系统
    Spring高级bean的实例化方法
    pinia的使用
    Mac电脑其他文件占用超过一大半的内存如何清理?
  • 原文地址:https://blog.csdn.net/q553866469/article/details/133686461