文件路径
/src/utils/Tools.js
所需依赖
yarn add [email protected] # 解析处理 Excel 表格专用
挂载为全局方法
/src/main.js
import Vue from 'vue'
import App from './App.vue'
// 全局方法挂载
Vue.prototype.$Tools = new Tools()
文件概述
import xlsx from 'xlsx'
const { dialog, getCurrentWindow } = require('electron').remote
export default class Tools {
constructor() {}
// 具体方法写在此处...
}
具体方法
获取输入值的具体数据类型
/**
* 获取输入值的具体数据类型
* @param {*} variable
*/
getType(variable) {
return Object.prototype.toString.call(variable).split(' ')[1].replace(']', '')
}
获取文件路径
/**
* 获取文件路径
* @param {string} file_type 文件选择类型的整体描述
* @param {array} extensions 选中文件的具体扩展名组成数组
*/
getFilePath(file_type = 'All Files', extensions = ['*']) {
return new Promise(async (resolve, reject) => {
const { canceled, filePaths } = await dialog.showOpenDialog(getCurrentWindow(), {
title: '请选择一个目录',
properties: ['openFile', 'dontAddToRecent'],
buttonLabel: '选择此文件', // 确认按钮的 label
filters: [{ name: file_type, extensions }],
})
canceled ? reject('用户已取消对文件的选择操作') : resolve(filePaths[0])
})
}
获取文件路径
getDirPath() {
return new Promise(async (resolve, reject) => {
const { canceled, filePaths } = await dialog.showOpenDialog(getCurrentWindow(), {
title: '请选择一个目录',
properties: ['openDirectory', 'dontAddToRecent'],
buttonLabel: '选择此文件夹', // 确认按钮的 label
})
canceled ? reject('用户已取消对文件夹的选择操作') : resolve(filePaths[0])
})
}
获取文件保存的位置
/**
* 获取文件保存的位置
* @param {string} file_type 文件选择类型的整体描述
* @param {array} extensions 选中文件的具体扩展名组成数组
*/
getFileSavePath(file_type = 'All Files', extensions = ['*']) {
return new Promise(async (resolve, reject) => {
const { canceled, filePath } = await dialog.showSaveDialog(getCurrentWindow(), {
title: '请选择文件的保存位置',
properties: ['dontAddToRecent'],
buttonLabel: '保存在此位置', // 确认按钮的 label
filters: [{ name: file_type, extensions }],
})
canceled ? reject('用户已取消对文件的保存操作') : resolve(filePath)
})
}
Excel 表格文件导出
/**
* 表格文件导出(支持导出多表)
* @param {string} file_path 表格导出路径
* @param {array} sheet_list 二维数组 [[表数据, 表名]]
*/
exportExcel(file_path, sheet_list = []) {
const WORKBOOK = xlsx.utils.book_new() // 新建一个空白工作簿
for (const sheet_item of sheet_list) {
const TEMP_SHEET = xlsx.utils.json_to_sheet(sheet_item[0])
xlsx.utils.book_append_sheet(WORKBOOK, TEMP_SHEET, sheet_item[1])
}
xlsx.writeFile(WORKBOOK, file_path)
}
Excel 表格文件导入
/**
* 表格文件导入(excel 表第一行必须是表头 | 支持读取多表)
* @param {string} file_path 表格导入路径
*/
importExcel(file_path) {
const { SheetNames, Sheets } = xlsx.readFile(file_path)
const TEMP_TABLE_LIST = []
for (const SheetName of SheetNames) {
const TEMP_LIST = { SheetName }
TEMP_LIST.sheet = xlsx.utils.sheet_to_json(Sheets[SheetName])
TEMP_TABLE_LIST.push(TEMP_LIST)
}
return TEMP_TABLE_LIST
}