Commit 797e046a authored by 徐俊's avatar 徐俊

徐俊

parent 726212d9
......@@ -400,35 +400,58 @@ export default {
},
exportEvaluationExcel () {
this.loading = true
const rowMarks = ['A', 'B', 'C', 'D', 'E', 'P', 'Q']
const rowMarks = ['A', 'B', 'C', 'D', 'K']
this.$api.statistical.getEvaluationExportExcel({ reportYear: this.reportYear, startRow: 3, rowMarks: rowMarks }).then(({ data = {} }) => {
this.$api.statistical.getEvaluationExportExcel({
reportYear: this.reportYear,
startRow: 3,
rowMarks: rowMarks
}).then(({ data = {} }) => {
if (data) {
this.eTableData = data.evaluationList
this.eMergeList = data.mergeList
import('@/views/utils/Export2Excel').then(excel => {
const multiHeader = [[this.reportYear + '项目评审结果列表', '', '']] // 标题
const header = ['项目编号', '项目名称', '二级学科', '所属市州', '证件号', '专家姓名', '专家单位', '手机号', '评分', '评审内容', '平均分'] // 表头
const filterVal = ['projNo', 'projName', 'knowledgeName', 'unitName', 'certId', 'personName', 'expertUnitName', 'mobile', 'totalScore', 'remark', 'averageScore'] // 数据属性
const list = this.eTableData //请求来的数据
const merges = ['A1:K1'].concat(this.eMergeList) //需要合并的单元格
const data = list.map(item => filterVal.map(j => item[j])) // 转换二维数组
try {
const multiHeader = [[this.reportYear + '项目评审结果列表', '', '']]
const header = ['项目编号', '项目名称', '一级学科', '二级学科', '所属市州', '证件号', '专家姓名', '专家单位', '手机号', '专家类型', '专家评分', '评审类别', '是否支持立项', '评审内容', '评审状态', '总分', '最终得分']
const filterVal = ['projNo', 'projName', 'parentName', 'knowledgeName', 'unitName', 'certId', 'personName', 'expertUnitName', 'mobile', 'expertTypeName', 'evaluationScore', 'evaluationTypeName', 'supportStateName', 'remark', 'auditStateName', 'totalScore', 'calculateScore']
const list = this.eTableData
const merges = ['A1:Q1'].concat(this.eMergeList)
const data = list.map(item => filterVal.map(j => item[j]))
const filename = this.reportYear + '项目评审结果列表'
excel.exportJsonToExcel({
multiHeader, // 标题--非必要
header, // 表头
data, // 具体数据--二维数组
merges, // 合并--非必要
filename, // 下载文件名
autoWidth: true, // 不自动调整列宽
multiHeader,
header,
data,
merges,
filename,
autoWidth: true,
})
this.$message.success('导出成功')
} catch (err) {
console.error('Excel导出错误:', err)
this.$message.error(`导出失败: ${err.message || '未知错误'}`)
}
this.loading = false
this.eTableData = []
this.eMergeList = []
}).catch(() => { this.loading = false })
}).catch(err => {
console.error('加载Export2Excel模块错误:', err)
this.$message.error(`加载导出模块失败: ${err.message || '未知错误'}`)
this.loading = false
})
}
}).catch(() => { this.loading = false })
}).catch(err => {
console.error('获取评审数据错误:', err)
this.$message.error(`获取评审数据失败: ${err.message || '未知错误'}`)
this.loading = false
this.eTableData = []
this.eMergeList = []
})
},
exportProjGroupScoreExcel () {
this.loading = true
......
......@@ -132,7 +132,7 @@ function sheet_from_array_of_arrays(data, opts) {
var cell = {
v: data[R][C]
}
// 如果单元格所在的值为空,让其值为“”
// 如果单元格所在的值为空,让其值为""
if (cell.v == null) {
cell.v = ''
}
......@@ -289,20 +289,20 @@ export function exportJsonToExcel({
autoWidth = true,
bookType = 'xlsx',
XlsWidth
} = {}) {
try {
filename = filename || '导出excel文件'
data = [...data]
data.unshift(header)
for (let i = multiHeader.length - 1; i > -1; i--) {
data.unshift(multiHeader[i])
}
var wsName = 'SheetJS'
var wb = new Workbook()
var ws = sheetFromArrayOfArrays(data)
if (merges.length > 0) {
// ws[!merges]:存放一些单元格合并信息,是一个数组,每个数组由包含s和e构成的对象组成,s表示开始,e表示结束,r表示行,c表示列
if (!ws['!merges']) ws['!merges'] = []
merges.forEach(item => {
ws['!merges'].push(XLSX.utils.decode_range(item))
......@@ -325,6 +325,7 @@ export function exportJsonToExcel({
}
}
}))
/* 以第一行为初始值 */
let result = colWidth[0]
for (let i = 1; i < colWidth.length; i++) {
......@@ -334,6 +335,7 @@ export function exportJsonToExcel({
}
}
}
// ws['!cols']设置单元格宽度, [{'wch': 10},{'wch': 10}] ===> 第一列和第二列设置了宽度
ws['!cols'] = result
......@@ -390,64 +392,29 @@ export function exportJsonToExcel({
arrabc.some(function(v) {
for (let j = 1; j < (data.length + 1); j++) {
const _v = v + j
if (dataInfo[_v]) {
dataInfo[_v].s = {}
// 标题部分A1-Z1
dataInfo['A' + j].s = {
if (dataInfo[_v]) { // 确保单元格存在
// 设置基础样式
dataInfo[_v].s = {
border: borderAll,
font: {
name: '微软雅黑',
sz: 12,
color: {
rgb: '000000'
},
bold: true
color: { rgb: '000000' }
},
alignment: {
horizontal: 'center',
vertical: 'center'
}
}
dataInfo['B' + j].s = {
border: borderAll,
numFmt: '0',
font: {
name: '微软雅黑',
sz: 12,
color: {
rgb: '000000'
}
},
alignment: {
horizontal: 'right',
vertical: 'center'
}
}
dataInfo[v + j].s = {
border: borderAll,
numFmt: '0.00',
font: {
name: '微软雅黑',
sz: 12,
color: {
rgb: '000000'
}
},
alignment: {
horizontal: 'right',
vertical: 'center'
}
}
// 头部
if (j == 1) {
dataInfo[v + j].s = {
// 设置第一行(标题)的特殊样式
if (j === 1) {
dataInfo[_v].s = {
border: borderAll,
font: {
name: '微软雅黑',
sz: 18,
color: {
rgb: '000000'
},
color: { rgb: '000000' },
bold: true
},
alignment: {
......@@ -455,36 +422,26 @@ export function exportJsonToExcel({
vertical: 'center'
},
fill: {
fgColor: {
rgb: 'f0f0f0'
fgColor: { rgb: 'f0f0f0' }
}
}
}
// 设置数值列的格式(如果需要)
if (v !== 'A') { // 非第一列
dataInfo[_v].s = {
...dataInfo[_v].s,
numFmt: '0.00'
}
// 百分比 %
if (percent.length != 0) {
for (let index = 0; index < percent.length; index++) {
if (j == percent[index]) {
dataInfo[v + percent[index]].s = {
numFmt: '0.00%',
border: borderAll,
font: {
name: '微软雅黑',
sz: 12,
color: {
rgb: '000000'
}
},
alignment: {
horizontal: 'right',
vertical: 'center'
},
// 设置百分比列的格式
if (percent.includes(j)) {
dataInfo[_v].s = {
...dataInfo[_v].s,
numFmt: '0.00%',
fill: {
fgColor: {
rgb: 'FFF8DC'
}
}
}
fgColor: { rgb: 'FFF8DC' }
}
}
}
......@@ -501,6 +458,12 @@ export function exportJsonToExcel({
new Blob([s2ab(wbout)], { type: 'application/octet-stream' }),
`${filename}.${bookType}`
)
return true
} catch (error) {
console.error('Excel导出错误:', error)
throw error // 抛出错误以便调用者处理
}
}
// 主要修改内容在这里
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment