使用Ant design vue實(shí)現(xiàn)Excel的上傳及讀取方式
1、使用組件
Ant design vue自帶上傳文件組件
accept限制上傳的文件類型
<a-upload
v-model:file-list="keyList"
name="file"
accept=".xlsx,.xls"
:headers="headers"
@change="handleKeyChange"
:customRequest="fileUpload"
>
<a-button>
<upload-outlined></upload-outlined>
上傳
</a-button>
</a-upload>其中action是上傳的地址
但是使用action的話,會(huì)沒有token,項(xiàng)目中出現(xiàn)驗(yàn)證的話就會(huì)不可用,這里使用customRequest,它的作用是覆蓋默認(rèn)的上傳行為,自定義上傳
const fileUpload = function(info){
console.log(info)
const formData = new FormData()
formData.append('file', info.file)
formData.append('token', 'aiufpaidfupipiu')//隨便寫一個(gè)token示例
http.request({
url: "/RedisSyncPlugin/parseExcel",
method: "post",
data: formData
}).then((res) => {
if(res.success){
info.onSuccess() // 結(jié)束上傳
res.data.forEach((item,index) => {
innerValue.value.push({
srcKey: item[0],
destKey: item[1],
id: Date.now() + index,
});
});
}else{
info.onError() // 結(jié)束上傳
}
})
}這里為什么用FormData而不是直接使用info.file,是因?yàn)閕nfo.file是字符串而不是文件類型,為什么這么用,我也不太清楚,能用就行

出現(xiàn)這樣的類型,代表傳給后臺(tái)的是文件
2、后臺(tái)實(shí)現(xiàn)
pom引用
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>實(shí)現(xiàn)
@ApiOperation(value = "解析excel", notes = "解析excel數(shù)據(jù)并返回到前端")
@PostMapping("/parseExcel")
public JsonResult<?> parseExcel(@RequestParam("file") MultipartFile file) {
try (InputStream is = new ByteArrayInputStream(file.getBytes())) {
FileMagic fm = FileMagic.valueOf(is);
Workbook wb;
if (fm == FileMagic.OOXML) {
wb = new XSSFWorkbook(is);
} else {
wb = new HSSFWorkbook(is);
}
int activeSheetIdx = wb.getActiveSheetIndex();
Sheet sheet = wb.getSheetAt(activeSheetIdx);
if (null == sheet) {
sheet = wb.getSheetAt(0);
}
List<List<String>> sheetValues = new ArrayList<>();
for (Row row : sheet) {
List<String> rowValues = new ArrayList<>();
for (Cell cell : row) {
String val = cell.getStringCellValue();
rowValues.add(val);
}
sheetValues.add(rowValues);
}
wb.close();
JsonResult<List<List<String>>> result = new JsonResult<>();
result.setSuccess(true);
result.setData(sheetValues);
return result;
} catch (Exception e) {
return JsonResult.ERROR(e.getMessage());
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue watch關(guān)于對(duì)象內(nèi)的屬性監(jiān)聽
這篇文章主要介紹了vue watch關(guān)于對(duì)象內(nèi)的屬性監(jiān)聽的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04
Vue組件庫ElementUI實(shí)現(xiàn)表格加載樹形數(shù)據(jù)教程
這篇文章主要為大家詳細(xì)介紹了Vue組件庫ElementUI實(shí)現(xiàn)表格加載樹形數(shù)據(jù)教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Vue動(dòng)態(tài)組件與異步組件實(shí)例詳解
這篇文章主要介紹了Vue動(dòng)態(tài)組件與異步組件,結(jié)合實(shí)例形式分析了動(dòng)態(tài)組件與異步組件相關(guān)概念、功能及使用技巧,需要的朋友可以參考下2019-02-02
vue組件實(shí)現(xiàn)移動(dòng)端九宮格轉(zhuǎn)盤抽獎(jiǎng)
這篇文章主要為大家詳細(xì)介紹了vue組件實(shí)現(xiàn)移動(dòng)端九宮格轉(zhuǎn)盤抽獎(jiǎng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10
簡(jiǎn)單聊聊Vue中的ref,toRef與toRefs
這篇文章主要是想和大家來簡(jiǎn)單聊聊Vue中的ref、toRef、toRefs這三個(gè)函數(shù)的使用與區(qū)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-04-04
Nuxt 項(xiàng)目性能優(yōu)化調(diào)研分析
這篇文章主要介紹了Nuxt 項(xiàng)目性能優(yōu)化調(diào)研分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
vue DatePicker日期選擇器時(shí)差8小時(shí)問題
這篇文章主要介紹了vue DatePicker日期選擇器時(shí)差8小時(shí)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05

