解決前端使用xlsx.js工具讀取excel遇到時(shí)間日期少43秒問(wèn)題
在使用 xlsx 讀取 excel 的時(shí)間格式的數(shù)據(jù)時(shí),如 ‘2023-11-30’,‘2023/11/30’ ,默認(rèn)會(huì)讀取一串?dāng)?shù)字字符串,如:‘45260’,此時(shí)需要在 read 的時(shí)候傳入一個(gè)配置項(xiàng):
import { read } from 'xlsx' const workbook = read(fileData, { type: 'binary', cellDates: true, // 讀取日期格式的數(shù)據(jù) })
此時(shí)拿到的是標(biāo)準(zhǔn)的時(shí)間格式 :‘Wed Nov 29 2023 23:59:17 GMT+0800(中國(guó)標(biāo)準(zhǔn)時(shí)間)’ ,這個(gè)時(shí)間格式是帶時(shí)區(qū)的,有沒(méi)有發(fā)現(xiàn),只要輸入年月日,讀到的數(shù)據(jù)總是差 43 秒,解決思路也很粗暴,判斷是這個(gè)時(shí)間,直接加 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">導(dǎo)入</el-button> </el-upload> <br> <el-button @click="handleExport">導(dǎo)出</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 '請(qǐng)上傳 xlsx 格式文件' } if(file.raw.size / 1024 / 1024 > 10) { return '文件格式不能超過(guò) 10M' } fileList.value.push({ name: file.raw.name }) // 解析文件 const raw = file.raw const res = await readFile2Binary(raw) const resInfo: IExcel = {} // 解析結(jié)果 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 }) // 檢查數(shù)據(jù)的合法性 // if(validXLSX(resInfo)) { // importData.value = resInfo // } importData.value = resInfo } } } // 重置 function reset() { fileList.value = [] // ... } function onRemoveFile() { reset() } /** * 將 el-upload 選擇的文件讀取成二進(jìn)制 * @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() } } }) } /** * 導(dǎo)出 */ 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>
總結(jié)
到此這篇關(guān)于解決前端使用xlsx.js工具讀取excel遇到時(shí)間日期少43秒問(wèn)題的文章就介紹到這了,更多相關(guān)前端讀取excel時(shí)間日期少43秒內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何基于layui的laytpl實(shí)現(xiàn)數(shù)據(jù)綁定的示例代碼
這篇文章主要介紹了如何基于layui的laytpl實(shí)現(xiàn)數(shù)據(jù)綁定的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04JS中dom0級(jí)事件和dom2級(jí)事件的區(qū)別介紹
這篇文章主要介紹了JS中dom0級(jí)事件和dom2級(jí)事件的區(qū)別介紹,非常有參考價(jià)值,特此分享到腳本之家平臺(tái)供大家參考2016-05-05JavaScript統(tǒng)計(jì)字符出現(xiàn)次數(shù)
這篇文章主要為大家詳細(xì)介紹了JavaScript字符統(tǒng)計(jì)出現(xiàn)次數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03函數(shù)式 JavaScript(一)簡(jiǎn)介
JavaScript 是一種強(qiáng)大但被誤解的語(yǔ)言。關(guān)于它到底是一種面向?qū)ο蟮恼Z(yǔ)言還是函數(shù)式語(yǔ)言,人們眾說(shuō)紛紜——但是現(xiàn)在讓我們把這些爭(zhēng)辯都拋到腦后。2014-07-07JS禁止瀏覽器右鍵查看元素或按F12審查元素自動(dòng)關(guān)閉頁(yè)面示例代碼
這篇文章主要給大家介紹了關(guān)于利用Javascript如何禁止瀏覽器右鍵查看元素,或者通過(guò)按F12審查元素,觸犯這兩個(gè)條件會(huì)自動(dòng)并關(guān)閉頁(yè)面的相關(guān)資料,通過(guò)設(shè)置這個(gè)可以防止別人扒下自己的網(wǎng)頁(yè),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-09-09深入JS函數(shù)中默認(rèn)參數(shù)的使用詳解
本文主要介紹了深入JS函數(shù)中默認(rèn)參數(shù)的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07