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

徐俊

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