解決前端使用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)文章
js數(shù)值計(jì)算時(shí)使用parseInt進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換(jquery)
這篇文章主要介紹了js數(shù)值計(jì)算時(shí)使用parseInt進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換(jquery),需要的朋友可以參考下2014-10-10
Javascript實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)測(cè)的方法
這篇文章主要介紹了Javascript實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)測(cè)的方法,可實(shí)現(xiàn)檢測(cè)網(wǎng)絡(luò)連接及網(wǎng)速的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
JavaScript簡(jiǎn)單實(shí)現(xiàn)彈出拖拽窗口(二)
這篇文章再次為大家詳細(xì)介紹了JavaScript簡(jiǎn)單實(shí)現(xiàn)彈出拖拽窗口的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
JavaScript控制輸入框中只能輸入中文、數(shù)字和英文的方法【基于正則實(shí)現(xiàn)】
這篇文章主要介紹了JavaScript控制輸入框中只能輸入中文、數(shù)字和英文的方法,基于正則驗(yàn)證實(shí)現(xiàn)字符輸入限制功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03
關(guān)于RxJS Subject的學(xué)習(xí)筆記
這篇文章主要介紹了關(guān)于RxJS Subject的學(xué)習(xí)筆記,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
JavaScript實(shí)現(xiàn)審核流程狀態(tài)的動(dòng)態(tài)顯示進(jìn)度條
對(duì)于有很多流程的東西,我們希望能夠根據(jù)不同的階段,用流程條對(duì)應(yīng)地進(jìn)行顯示,非常直觀,給用戶帶來(lái)極好的用戶體驗(yàn),下面小編給大家分享JavaScript實(shí)現(xiàn)審核流程狀態(tài)的動(dòng)態(tài)顯示進(jìn)度條功能,需要的的朋友參考下2017-03-03
JS this作用域以及GET傳輸值過(guò)長(zhǎng)的問(wèn)題解決方法
專IE7瀏覽器,IE URL參數(shù)過(guò)長(zhǎng)問(wèn)題,引發(fā)HTTP Status 122報(bào)錯(cuò);this作用域問(wèn)題,對(duì)應(yīng)的解決方法如下,感興趣的朋友可以參考下,希望對(duì)大家有所幫助2013-08-08

