如何将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