feature[Excel]: support export merged header export (#1718)
This commit is contained in:
		
							
								
								
									
										14
									
								
								src/vendor/Export2Excel.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								src/vendor/Export2Excel.js
									
									
									
									
										vendored
									
									
								
							@@ -145,9 +145,11 @@ export function export_table_to_excel(id) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function export_json_to_excel({
 | 
			
		||||
  multiHeader,
 | 
			
		||||
  header,
 | 
			
		||||
  data,
 | 
			
		||||
  filename,
 | 
			
		||||
  merges,
 | 
			
		||||
  autoWidth = true,
 | 
			
		||||
  bookType=  'xlsx'
 | 
			
		||||
} = {}) {
 | 
			
		||||
@@ -155,10 +157,22 @@ export function export_json_to_excel({
 | 
			
		||||
  filename = filename || 'excel-list'
 | 
			
		||||
  data = [...data]
 | 
			
		||||
  data.unshift(header);
 | 
			
		||||
 | 
			
		||||
  for (let header of multiHeader) {
 | 
			
		||||
    data.unshift(header)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  var ws_name = "SheetJS";
 | 
			
		||||
  var wb = new Workbook(),
 | 
			
		||||
    ws = sheet_from_array_of_arrays(data);
 | 
			
		||||
 | 
			
		||||
  if (merges.length > 0) {
 | 
			
		||||
    if (!ws['!merges']) ws['!merges'] = [];
 | 
			
		||||
    merges.forEach(item => {
 | 
			
		||||
      ws['!merges'].push(XLSX.utils.decode_range(item))
 | 
			
		||||
    })
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (autoWidth) {
 | 
			
		||||
    /*设置worksheet每列的最大宽度*/
 | 
			
		||||
    const colWidth = data.map(row => row.map(val => {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,20 +19,22 @@
 | 
			
		||||
          {{ scope.$index }}
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="Title">
 | 
			
		||||
        <template slot-scope="scope">
 | 
			
		||||
          {{ scope.row.title }}
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="Author" width="110" align="center">
 | 
			
		||||
        <template slot-scope="scope">
 | 
			
		||||
          <el-tag>{{ scope.row.author }}</el-tag>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="Readings" width="115" align="center">
 | 
			
		||||
        <template slot-scope="scope">
 | 
			
		||||
          {{ scope.row.pageviews }}
 | 
			
		||||
        </template>
 | 
			
		||||
      <el-table-column label="主要信息" align="center">
 | 
			
		||||
        <el-table-column label="Title">
 | 
			
		||||
          <template slot-scope="scope">
 | 
			
		||||
            {{ scope.row.title }}
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column label="Author" width="110" align="center">
 | 
			
		||||
          <template slot-scope="scope">
 | 
			
		||||
            <el-tag>{{ scope.row.author }}</el-tag>
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column label="Readings" width="115" align="center">
 | 
			
		||||
          <template slot-scope="scope">
 | 
			
		||||
            {{ scope.row.pageviews }}
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column align="center" label="Date" width="220">
 | 
			
		||||
        <template slot-scope="scope">
 | 
			
		||||
@@ -80,13 +82,17 @@ export default {
 | 
			
		||||
    handleDownload() {
 | 
			
		||||
      this.downloadLoading = true
 | 
			
		||||
      import('@/vendor/Export2Excel').then(excel => {
 | 
			
		||||
        const tHeader = ['Id', 'Title', 'Author', 'Readings', 'Date']
 | 
			
		||||
        const multiHeader = [['Id', '主要信息', '', '', 'Date']]
 | 
			
		||||
        const tHeader = ['', 'Title', 'Author', 'Readings', '']
 | 
			
		||||
        const filterVal = ['id', 'title', 'author', 'pageviews', 'display_time']
 | 
			
		||||
        const list = this.list
 | 
			
		||||
        const data = this.formatJson(filterVal, list)
 | 
			
		||||
        const merges = ['A1:A2', 'B1:D1', 'E1:E2']
 | 
			
		||||
        excel.export_json_to_excel({
 | 
			
		||||
          multiHeader,
 | 
			
		||||
          header: tHeader,
 | 
			
		||||
          data,
 | 
			
		||||
          merges,
 | 
			
		||||
          filename: this.filename,
 | 
			
		||||
          autoWidth: this.autoWidth,
 | 
			
		||||
          bookType: this.bookType
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user