如何将vue3项目下的el-table表格导出到 excel 并保留样式和数据的展现形式?

如何将vue3项目下的el-table表格导出到 excel 并保留样式和数据的展现形式?需求是要将 图示的表格 导出到excel中 并且展现形式和样式要一致

请问有什么方法实现吗, 下面时表格实现的代码

<template>

<div>

<el-table :data="tableData" style="width: 100%" :span-method="arraySpanMethod" :row-class-name="rowClassName" class="dailyReport">

<el-table-column label="江苏明卓加工情况" align="center">

<template #header>

<span style="font-size: 18px; font-weight: bolder;">江苏明卓加工情况</span>

</template>

<el-table-column prop="col1" label="机组" width="150" align="center" />

<el-table-column prop="col2" label="机组人员" width="150" align="center" />

<el-table-column prop="col3" label="客户" width="150" align="center" />

<el-table-column label="规格" align="center">

<el-table-column prop="col4" label="厚度" width="120" align="center" />

<el-table-column prop="col5" label="宽度" width="120" align="center" />

<el-table-column prop="col6" label="长度" width="120" align="center" />

</el-table-column>

<el-table-column prop="col7" label="数量" width="120" align="center" />

<el-table-column prop="col8" label="产量(平方/米)" width="120" align="center" />

<el-table-column prop="col9" label="绩效" width="120" align="center" />

<el-table-column prop="col10" label="加工单价" width="120" align="center" />

<el-table-column prop="col11" label="金额" width="120" align="center" />

<el-table-column prop="col12" label="加工要求" width="120" align="center" />

<el-table-column prop="col13" label="备注" width="120" align="center" />

</el-table-column>

</el-table>

</div>

</template>

<script setup name="DailyReport">

const rowClassName = ({row}) => {

if(row.col2 === '合计') {

return 'totalRowClass'

} else {

return ''

}

}

const tableData = [

{

col1: "2016-05-03",

col2: "Tom",

col3: "California1",

col4: "1",

col5: "No. 189",

col6: "CA 900361",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2016-05-03",

col2: "Tom",

col3: "California2",

col4: "2",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2016-05-03",

col2: "Tom",

col3: "California3",

col4: "Los Angeles3",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2016-05-03",

col2: "合计",

col3: "",

col4: "",

col5: "",

col6: "",

col7: "10",

col8: "28",

col9: "100",

col10: "",

col11: "",

col12: "",

col13: "",

},

{

col1: "2017-05-03",

col2: "Tom2",

col3: "Californiaq",

col4: "Los Angeles",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2017-05-03",

col2: "Tom2",

col3: "Californiaq",

col4: "Los Angeles",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2017-05-03",

col2: "Tom2",

col3: "Californiat",

col4: "Los Angeles",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2017-05-03",

col2: "合计",

col3: "",

col4: "",

col5: "",

col6: "",

col7: "10",

col8: "28",

col9: "100",

col10: "",

col11: "",

col12: "",

col13: "",

},

{

col1: "2018-05-03",

col2: "Tom",

col3: "California6",

col4: "Los Angeles",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2018-05-03",

col2: "Tom",

col3: "California7",

col4: "Los Angeles",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2018-05-03",

col2: "Tom",

col3: "California8",

col4: "Los Angeles",

col5: "No. 189",

col6: "CA 90036",

col7: "CA 9003611",

col8: "CA 9003611",

col9: "CA 9003611",

col10: "CA 9003611",

col11: "CA 9003611",

col12: "CA 9003611",

col13: "CA 9003611",

},

{

col1: "2018-05-03",

col2: "合计",

col3: "",

col4: "",

col5: "",

col6: "",

col7: "10",

col8: "28",

col9: "100",

col10: "",

col11: "",

col12: "",

col13: "",

},

{

col1: "日产量",

col2: "油膜机组(平方)",

col3: "",

col4: "",

col5: "",

col6: "",

col7: "",

col8: "激光+坡口(米)",

col9: "",

col10: "",

col11: "",

col12: "",

col13: "",

},

{

col1: "生产金额",

col2: " ",

col3: "",

col4: "",

col5: "",

col6: "",

col7: "",

col8: "",

col9: "",

col10: "",

col11: "",

col12: "",

col13: "",

},

{

col1: "累计生产金额",

col2: " ",

col3: "",

col4: "",

col5: "",

col6: "",

col7: "",

col8: "",

col9: "",

col10: "",

col11: "",

col12: "",

col13: "",

}

];

// 合并行

const arraySpanMethod = ({

row,

column,

rowIndex,

columnIndex,

}) => {

// 列合并

if(['生产金额', '累计生产金额'].includes(row.col1)) {

if (columnIndex === 0) {

return [1, 1]

} else {

return {

rowspan: 1,

colspan: tableData.length - 1

}

}

}

if(['日产量'].includes(row.col1)) {

if([0, 1, 7].includes(columnIndex)) {

return [1, 1]

} else if([2, 8].includes(columnIndex)) {

return [1, 5]

} else {

return [0, 0]

}

}

// 行合并

if (['col1'].includes(column.property)) {

if(rowIndex > 0 && row.col1 === tableData[rowIndex - 1].col1) {

return {

rowspan: 0,

colspan: 0

}

} else {

let rowspan = 1

for(let i = rowIndex + 1; i < tableData.length; i++) {

if(tableData[i].col1 === row.col1) {

rowspan++

} else {

break

}

}

return {

rowspan,

colspan: 1

}

}

}

if (['col2'].includes(column.property)) {

if(rowIndex > 0 && row.col2 === tableData[rowIndex - 1].col2) {

return {

rowspan: 0,

colspan: 0

}

} else {

let rowspan = 1

for(let i = rowIndex + 1; i < tableData.length; i++) {

if(tableData[i].col2 === row.col2) {

rowspan++

} else {

break

}

}

return {

rowspan,

colspan: 1

}

}

}

}

</script>

<style lang="scss">

.totalRowClass {

color: red;

font-weight: bold;

.el-table__cell {

background-color: #e9e907 !important;

}

}

.dailyReport {

thead.is-group th.el-table__cell{

color: black;

}

}

</style>


回答:

导出PDF好说,可以直接 html2image 来处理。

如果你期望导出为Excel并且可编辑的话, 得考虑用 ExcelJS。
但样式就需要你自己重写了,没办法直接套用页面中的el-table 的CSS样式。

以上是 如何将vue3项目下的el-table表格导出到 excel 并保留样式和数据的展现形式? 的全部内容, 来源链接: utcz.com/p/935326.html

回到顶部