工作上接了个任务,要将1000多本书整理分类,然后打标签搬到图书柜上。并且还要将书名 作者 书号 类别 出版社 出版时间等信息录入到图书管理系统中,方便借阅。
刚开始想着,那就一本本敲字录入信息呗,就重复性的工作。结果就是录了一星期才录了200本…而且还烦躁--
然后就想着写个程序吧,先用扫描枪扫描图书上的条形码获取isbn码,然后调用其他的isbn开放接口,来自动获取到其他数据,导出Excel文件,最后整理录入数据库就行~(此处因数据库所处电脑不能联网,只能在另一台电脑上利用excel导出操作来进行获取数据,然后刻盘导入到图书管理系统)
干干干~~花了一晚上+一上午,写好了哈哈。
正好到今天又一周,终于把近1200本书全搞定了。
记录一下↓↓↓
一、工具准备
二、相关代码
// 文件框值更新事件
handleClick(e) {
try {
// 获取导入的文件
const files = e.target.files;
const rawFile = files[0];
if (!rawFile) return;
// 插件的导入方法
LAY_EXCEL.importExcel(files, {}, (data) => {
console.log("导入JSON:" + JSON.stringify(data));
// 列名转英文方法
data = LAY_EXCEL.filterImportData(data, {
isbn: "A", // 梳理时 要确保字段名对应上
bookName: "B",
author: "C",
press: "D",
pressDate: "E",
pressPlace: "F",
price: "G",
bookDesc: "H"
});
console.log("梳理后JSON:" + JSON.stringify(data));
/* 这里要注意 xlsx文件默认的第一页名字叫 Sheet1 , 一般这么写 data[0].Sheet1
如果改过,比如SheetJS , 这里需要对应修改 data[0].SheetJS
*/
// 获取表格数据
const Sheet1 = data[0].sheet1;
console.log(Sheet1);
this.getawaitData(Sheet1);
// this.exportConfig.value = false;
// console.log(res);
// this.tableData = res; // 新增一条
if (this.tableData.length > 0) {
this.$message.success("导入成功!");
}
});
} catch (e) {
this.$message.error("导入错误: " + e.message);
}
},
// 导入
importExcel() {
this.$refs["excel-upload-input"].click();
},
// 导出
exportExcel() {
if (this.tableData.length === 0) { return this.$message.error("无数据可导出"); }
// 姓名 手机号 入职日期 转正日期 工号 部门
const data = [...this.tableData];
console.log(data);
data.unshift({
isbn: "isbn",
bookName: "书名",
author: "作者",
press: "出版者",
pressDate: "出版日期",
pressPlace: "出版地",
price: "价格",
bookDesc: "简介"
});
// 执行导出函数,系统会弹出弹框
LAY_EXCEL.exportExcel(
{
sheet1: data
},
"导出接口数据.xlsx",
"xlsx"
);
this.$message.error("导出成功");
}
异步请求处理:因该接口不允许同时访问多次请求,所以采用异步请求的方式,间隔1秒
async getawaitData(Sheet1) {
const res = [];
for (let i = 0; i < Sheet1.length; i++) {
if (i == 0) {
// 取到第一行的列头
this.tableHeader = Object.values(Sheet1[0]);
// 跳过列头
continue;
}
console.log(Sheet1[i].isbn);
const isbn1 = Sheet1[i].isbn;
const vote = {};
const url1 = "http://47.99.80.202:6066/openApi/getInfoByIsbn?isbn=" + isbn1 + "&appKey=ae1718d4587744b0b79f940fbef69e77";
await new Promise(res => setTimeout(res, 1000));// 等待后执行,1000为1秒
await axios.get(url1)
.then(response => {
console.log("getawaitData::");
console.log(url1);
console.log(response);
console.log("--------------------");
vote.isbn = response.data.data.isbn;
vote.bookName = response.data.data.bookName;
vote.author = response.data.data.author;
vote.press = response.data.data.press;
if (response.data.data.pressDate == null) {
vote.pressDate = "";
} else {
vote.pressDate = response.data.data.pressDate[0] + "-" + response.data.data.pressDate[1] + "-1";
}
vote.pressPlace = response.data.data.pressPlace;
vote.price = response.data.data.price / 100;
vote.bookDesc = response.data.data.bookDesc;
res.push(vote);
})
.catch(error => {
console.log(error);
vote.isbn = isbn1;
res.push(vote);
this.$message.error("导入错误: " + error.message);
});
// console.log(Sheet1[i]);
// this.tableData.push(Sheet1[i]); // 新增一条
}
this.tableData = res;
}
接口地址为:http://47.99.80.202:6066/openApi/getInfoByIsbn?isbn=9787511368669&appKey=ae1718d4587744b0b79f940fbef69e77
三、实现效果
最后就直接将该excel文件导入管理系统中就ok了。
Tip:因图书管理系统所用电脑不能联网,所以不能直接调用互联网接口查询插入。
若有条件联网,以后再试试直接扫描就能录入图书信息功能————
参考资料:
全网最全最稳定中文ISBN信息查询api接口_贺老板_的博客-CSDN博客_图书api接口
vue多个等待几秒再执行,可以用await加setTimeout实现_myforr的博客-CSDN博客_vue 等待几秒