解决前端使用xlsx.js工具读取excel遇到时间日期少43秒问题

 更新时间:2024年03月30日 09:49:29   作者:七月pro  
这篇文章主要给大家介绍了关于如何解决前端使用xlsx.js工具读取excel遇到时间日期少43秒问题的相关资料,xlsx.js是一种前端库,它可以使您使用JavaScript读取、解析和导出电子表格文件,如Microsoft Excel,需要的朋友可以参考下

在使用 xlsx 读取 excel 的时间格式的数据时,如 ‘2023-11-30’,‘2023/11/30’ ,默认会读取一串数字字符串,如:‘45260’,此时需要在 read 的时候传入一个配置项:

import { read } from 'xlsx'

const workbook = read(fileData, {
    type: 'binary',
    cellDates: true, // 读取日期格式的数据
})

此时拿到的是标准的时间格式 :‘Wed Nov 29 2023 23:59:17 GMT+0800(中国标准时间)’ ,这个时间格式是带时区的,有没有发现,只要输入年月日,读到的数据总是差 43 秒,解决思路也很粗暴,判断是这个时间,直接加 44 秒。

if(dateStr){
    if(dateStr?.includes('23:59:17')) {
        dateStr = dayjs(dateStr).add(44, 'second')
    }
    // 如果需要可以格式化成需要的格式
    const dayObj = dayjs(dateStr.toString())
    if(dayObj.isValid()) {
        dateStr = dayObj.format('YYYY-MM-DD')
    }
    return dateStr
}

附:element-plus el-upload 读取 xlsx 格式的 excel 文件的步骤

<template>
  <el-upload
    ref="uploadRef"
    action=""
    :auto-upload="false"
    :on-change="onSelectFile"
    :on-remove="onRemoveFile"
    :file-list="fileList"
    accept=".xlsx">
    <el-button type="primary">导入</el-button>
  </el-upload>
  <br>
  <el-button @click="handleExport">导出</el-button>
</template>

<script setup lang="ts">
import { ref } from 'vue'
import type { UploadFile, UploadRawFile } from 'element-plus'
import { read, utils, writeFile } from 'xlsx'

type IExcel = Record<string, Array<Record<string, string>>>

const fileList = ref<{name: string}[]>([])
const importData = ref<IExcel | null>(null)

async function onSelectFile(file: UploadFile) {
  reset()
  if(file.raw) {
    if(file.raw.type !== 'application/vnd.openxmlformats-offocedocument.spreadsheetml.sheet') {
      return '请上传 xlsx 格式文件'
    }
    if(file.raw.size / 1024 / 1024 > 10) {
      return '文件格式不能超过 10M'
    }
    fileList.value.push({ name: file.raw.name })
    // 解析文件
    const raw = file.raw
    const res = await readFile2Binary(raw)
    const resInfo: IExcel = {} // 解析结果
    if(res) {
      const workbook = read(res, {
        type: 'binary',
        cellDates: true,
      })
      workbook.SheetNames.forEach((sheetName) => {
        const excelData: Record<string, string>[] = utils.sheet_to_json(workbook.Sheets[sheetName])
        resInfo[sheetName] = excelData
      })
      // 检查数据的合法性
      // if(validXLSX(resInfo)) {
      //   importData.value = resInfo
      // }
      importData.value = resInfo
    }
  }
}

// 重置
function reset() {
  fileList.value = []
  // ...
}
function onRemoveFile() {
  reset()
}

/**
 * 将 el-upload 选择的文件读取成二进制
 * @param raw 
 */
function readFile2Binary(raw: UploadRawFile) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader()
    reader.readAsBinaryString(raw)
    reader.onload = (ev) => {
      if(ev.target) {
        resolve(ev.target.result)
      } else {
        reject()
      }
    }
  })
}

/**
 * 导出
 */
function handleExport() {
  const sheetList = {
    sheet1: [],
    sheet2: [],
  }
  const fileName = 'xxx.xlsx'
  const workbook = utils.book_new()
  for(const key in sheetList) {
    const sheetName = key
    const worksheet = utils.aoa_to_sheet(sheetList[key])
    utils.book_append_sheet(workbook, worksheet,sheetName)
  }
  writeFile(workbook, fileName, {
    bookType: 'xlsx',
  })
}
</script>

总结 

到此这篇关于解决前端使用xlsx.js工具读取excel遇到时间日期少43秒问题的文章就介绍到这了,更多相关前端读取excel时间日期少43秒内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript中实现在光标位置插入内容的几种方法

    JavaScript中实现在光标位置插入内容的几种方法

    本文主要介绍了在网页开发中,如何使用JavaScript在文本输入框或富文本编辑器的光标位置插入内容的实践,包括获取光标位置的方法,创建文本节点,操作Selection对象,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • weakMap为什么是弱引用原理

    weakMap为什么是弱引用原理

    这篇文章主要为大家介绍了weakMap为什么是弱引用原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • js按条件生成随机json:randomjson实现方法

    js按条件生成随机json:randomjson实现方法

    下面小编就为大家带来一篇js按条件生成随机json:randomjson实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • js页面引导页的实现思路总结

    js页面引导页的实现思路总结

    在同学们使用某些网站的新版本页面的时候,经常会出现一个类似于新手引导一样的效果,本文主要介绍了js页面引导页的实现思路总结,感兴趣的可以了解一下
    2023-04-04
  • Web安全测试之XSS实例讲解

    Web安全测试之XSS实例讲解

    本文主要介绍Web安全测试之XSS,这里详细整理了测试XSS的资料,并附示例代码和详细讲解,有需要的小伙伴可以参考下
    2016-08-08
  • 详解JavaScript执行模型

    详解JavaScript执行模型

    这篇文章主要介绍了JavaScript执行模型的相关资料。帮助大家更好的理解和学习JavaScript,感兴趣的朋友可以了解下
    2020-11-11
  • 纯javascript实现四方向文本无缝滚动效果

    纯javascript实现四方向文本无缝滚动效果

    本文主要给大家分享了使用纯javascript实现的可控制的四方向文本无缝滚动的代码,效果非常不错,有需要的小伙伴可以参考下。
    2015-06-06
  • THREE.JS使用TransformControls对模型拖拽的代码实例

    THREE.JS使用TransformControls对模型拖拽的代码实例

    拖拽是前端实现中比较常用的一种效果,下面这篇文章主要给大家介绍了关于THREE.JS使用TransformControls对模型拖拽的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 详解webpack4升级指南以及从webpack3.x迁移

    详解webpack4升级指南以及从webpack3.x迁移

    本篇文章主要介绍了详解webpack4升级指南以及从webpack3.x迁移,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 10行原生JS实现文字无缝滚动(超简单)

    10行原生JS实现文字无缝滚动(超简单)

    下面小编就为大家分享一篇10行原生JS实现文字无缝滚动的效果,特别简单,具有很好的参考价值,希望对大家有所帮助
    2018-01-01

最新评论