【json数据通过XLSX插件转成excel数据再转成blob,使用electron的dialog方法调出保存弹框,监听保存结果】

json数据通过XLSX插件转成excel数据再转成blob,使用electron的dialog方法调出保存弹框,监听保存结果

electron调dialog保存

saveAsElectron(blob, fileName) {
		const electron = window.require("electron");

		readFileAsArrayBuffer(blob).then((res) => {
			var data = new Uint8Array(res);
			var remote = electron.remote;
			var dialog = remote.dialog;
			var dlgConfig = {defaultPath: fileName};
			let type = fileName.split(".")[1];
			let filters = [{name: "*", extensions: [type]}];
			dlgConfig["filters"] = filters;
			var path = dialog.showSaveDialogSync(dlgConfig);
			if (path) {
				const fs = window.require("fs");
				fs.writeFileSync(path, data, (err) => {
					toastr.error("保存失败");
					return;
				});
				toastr.success("保存成功");
			}
		});
		/**
		 * 读取文件
		 * @param {Blob} file
		 * @returns {Promise<ArrayBuffer>}
		 */
		function readFileAsArrayBuffer(file) {
			return new Promise(function (resolve, reject) {
				var reader = new FileReader();
				reader.readAsArrayBuffer(file);
				reader.onload = function (e) {
					resolve(e.target.result);
				};
				reader.onerror = reject;
			});
		}
	},
// 创建工作簿和工作表,jsonRoot为生成的excel数据
		var wb = XLSX.utils.book_new(), // 工作簿,即一个Excel文件
			sheet = XLSX.utils.aoa_to_sheet(jsonRoot.dataJson); // 工作表,即Excel内部的工作表
		sheet["!merges"] = jsonRoot.sheetMerge;
		// "SheetJS" 为工作表名称,即Excel文件中工作表
		XLSX.utils.book_append_sheet(wb, sheet, "SheetJS");
		// 写出Excel工作簿
		const wbout = XLSX.write(wb, {bookType: "xlsx", type: "binary"});
		function dfefs(s) {
			const buf = new ArrayBuffer(s.length);
			const view = new Uint8Array(buf);
			for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
			return buf;
		}
		const blob = new Blob([dfefs(wbout)], {type: "application/octet-stream"});
		if (hdapi.is_electron) {     //判断是electron环境
			hdapi.saveAsElectron(blob, filename);
		} else {
			XLSX.writeFile(wb, filename);
		}

jsonRoot
jsonRoot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值