Files
reader-star/packages/utils/src/excel.ts

41 lines
1.2 KiB
TypeScript
Raw Normal View History

import * as XLSX from 'xlsx'
/**
* Excel
* @param data
* @param filename
* @param sheetName
*/
export function exportToExcel<T = any>(data: T[], filename: string, sheetName: string = 'Sheet1') {
const ws = XLSX.utils.json_to_sheet(data) // 转换为工作表
const wb = XLSX.utils.book_new() // 创建新工作簿
XLSX.utils.book_append_sheet(wb, ws, sheetName) // 将工作表添加到工作簿
XLSX.writeFile(wb, `${filename}.xlsx`) // 写入文件
}
/**
* Excel
* @param file
* @returns Promise<T[]>
*/
export function readExcel<T = any>(file: File): Promise<T[]> {
return new Promise((resolve, reject) => {
const reader = new FileReader()
reader.onload = (e) => {
try {
const data = e.target?.result
const workbook = XLSX.read(data, { type: 'binary' })
const sheetName = workbook.SheetNames[0]
const sheet = workbook.Sheets[sheetName]
const json = XLSX.utils.sheet_to_json<T>(sheet)
resolve(json)
}
catch (error) {
reject(error)
}
}
reader.onerror = error => reject(error)
reader.readAsArrayBuffer(file)
})
}