Vue+XLSX实现excel的上传和下载

github 地址:https://github.com/sheetjs/sheetjs

官方demo

上传:

xlsx提供多种上传格式:

  • XLSX.utils.sheet_to_csv:生成CSV格式
  • XLSX.utils.sheet_to_txt:生成纯文本格式
  • XLSX.utils.sheet_to_html:生成HTML格式
  • XLSX.utils.sheet_to_json:输出JSON格式

准备测试数据

 完整代码



<div id="app" style="margin-left: 40%;margin-top: 10%;">

    <input type="file" v-on:change="onchange"/>
    <div id="out-table"></div>
</div>

<script src="vue.min.js"></script>
<!--<script src="SheetJS-vue.js"></script>-->
<script src="xlsx.core.min.js"></script>
<script >

    var vue =new Vue({
        el:"#app",
        data:{
           resJosn:''
        },
        methods:{
            onchange: function (evt) {
                var file;
                var files = evt.target.files;

                if (!files || files.length == 0) return;

                file = files[0];

                var reader = new FileReader();
                reader.onload = function (e) {
                    // pre-process data
                    var binary = "";
                    var bytes = new Uint8Array(e.target.result);
                    var length = bytes.byteLength;
                    for (var i = 0; i < length; i++) {
                        binary += String.fromCharCode(bytes[i]);
                    }

                    /* read workbook */
                    var wb = XLSX.read(binary, { type: 'binary' });

                    /* grab first sheet */
                    var wsname = wb.SheetNames[0];
                    var ws = wb.Sheets[wsname];

                    /* generate HTML */
                    var HTML = XLSX.utils.sheet_to_html(ws);
                    this.resJosn = XLSX.utils.sheet_to_json(ws);
                    console.log(this.resJosn)
                    /* update table */
                    document.getElementById('out-table').innerHTML = HTML ;
                    /* show export button */
                  /*  document.getElementById('export-table').style.visibility = "visible";*/
                };

                reader.readAsArrayBuffer(file);
            },
        
        },
    })

</script>

结果

下载:

xlsx.js提供多种导入格式,table,json等等

完整代码



<div id="app" style="margin-left: 40%;margin-top: 10%;">
    
<input type="button" @click="download" value="download"/>
<table id="table" ref="tb">
            <thead>
                <tr>
                    <td>test1</td>
                    <td>test2</td>
                </tr>
            </thead>
    
            <tbody v-for="(item,index) in table" :key="index">
                <tr>
                    <td>{{item.test1}}</td>
                    <td>{{item.Test2}}</td>
                </tr>
            </tbody>
        </table>
</div>
<script src="vue.min.js"></script>
<!--<script src="SheetJS-vue.js"></script>-->
<script src="xlsx.full.min.js"></script>
<script src="SheetJS-vue.js"></script>
<script >
//  Vue.component('my-component', {
//   template: '<div>A custom component!</div>'
// })


    var vue =new Vue({
        el:"#app",
        data: {
            //准备数据
            table: [{ 'test1': '21', 'Test2': '2121' }, { 'test1': '21', 'Test2': '2121' }, { 'test1': '21', 'Test2': '2121' }]
        },
        methods:{
            download() {
                //var wb = XLSX.utils.table_to_book(this.$refs.tb); //table to excel

                var ws = XLSX.utils.json_to_sheet(this.table); //json to excel
                var wb = XLSX.utils.book_new();
                XLSX.utils.book_append_sheet(wb, ws, "DataSource");

                XLSX.writeFile(wb, "excelName.xlsx");
            }
        },
 
    })



</script>

结果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过以下步骤实现Vue和Element UI中实现Excel批量导入和导入模板的下载: 1. 在Vue项目中安装element-ui和xlsx插件: ``` npm install element-ui xlsx --save ``` 2. 创建一个ExcelUpload.vue组件,该组件包含一个文件上传按钮和一个下载模板按钮: ```html <template> <div> <el-upload class="upload-demo" action="" :before-upload="beforeUpload" :on-success="handleSuccess" :on-error="handleError" :file-list="fileList" :auto-upload="false" > <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <el-button style="margin-left: 10px;" size="small" @click="uploadFile"> 上传文件 </el-button> </el-upload> <el-button style="margin-left: 10px;" size="small" @click="downloadTemplate"> 下载模板 </el-button> </div> </template> ``` 3. 在Vue组件中定义fileList和beforeUpload方法: ```javascript <script> import { saveAs } from 'file-saver'; import XLSX from 'xlsx'; export default { data() { return { fileList: [], }; }, methods: { beforeUpload(file) { const isExcel = file.type === 'application/vnd.ms-excel'; if (!isExcel) { this.$message.error('只能上传Excel文件'); } return isExcel; }, uploadFile() { const formData = new FormData(); this.fileList.forEach((file) => { formData.append('file', file.raw); }); // TODO: 发送请求上传文件 }, handleSuccess(response) { this.$message.success('上传成功'); // TODO: 处理上传成功后的操作 }, handleError() { this.$message.error('上传失败'); }, downloadTemplate() { const data = [ ['姓名', '年龄', '性别'], ['张三', '18', '男'], ['李四', '20', '女'], ['王五', '22', '男'], ]; const ws = XLSX.utils.aoa_to_sheet(data); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'array' }); saveAs( new Blob([wbout], { type: 'application/octet-stream' }), '模板.xlsx', ); }, }, }; </script> ``` 4. 完成后,你就可以使用该组件来上传下载Excel文件了。 注意:在上传文件之前,你需要发送一个请求将文件发送到服务器上进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值