xlsx-style-downloadt

xlsx-style-plugin

Usage no npm install needed!

<script type="module">
  import xlsxStyleDownloadt from 'https://cdn.skypack.dev/xlsx-style-downloadt';
</script>

README

前端导出并添加样式插件xlsxStyleDownload

为了解决前端导出表格时既要添加样式,又要自己做下载的复杂操作。为方便操作,基于xlsx和xlsx-style封装了xlsxStyleDownload工具

可设置样式

  • 表头的样式
  • 行高
  • 具体行的样式
  • 列的样式
  • 列宽
  • 具体单元格的样式

样式关键字说明

这里保留了xlsx-style的命名规范

Style Attribute Sub Attributes Values
fill patternType "solid" or "none"
fgColor COLOR_SPEC
bgColor COLOR_SPEC
font name "Calibri" // default
sz "11" // font size in points
color F0F0F0
bold true || false
underline true || false
italic true || false
strike true || false
outline true || false
shadow true || false
vertAlign true || false
numFmt "0" // integer index to built in formats, see StyleBuilder.SSF property
"0.00%" // string matching a built-in format, see StyleBuilder.SSF
"0.0%" // string specifying a custom format
"0.00%;\\(0.00%\\);\\-;@" // string specifying a custom format, escaping special characters
"m/dd/yy" // string a date format using Excel's format notation
alignment vertical "bottom"||"center"||"top"
horizontal "bottom"||"center"||"top"
wrapText true || false
readingOrder 2 // for right-to-left
textRotation Number from 0 to 180 or 255 (default is 0)
90 is rotated up 90 degrees
45 is rotated up 45 degrees
135 is rotated down 45 degrees
180 is rotated down 180 degrees
255 is special, aligned vertically
border top { style: BORDER_STYLE, color: COLOR_SPEC }
bottom { style: BORDER_STYLE, color: COLOR_SPEC }
left { style: BORDER_STYLE, color: COLOR_SPEC }
right { style: BORDER_STYLE, color: COLOR_SPEC }
diagonal { style: BORDER_STYLE, color: COLOR_SPEC }
diagonalUp true||false
diagonalDown true||false

使用

  • 安装XlsxStyleDownload
npm i --save xlsx-style-download
  • 具体使用
import XlsxStyleDownload from 'xlsx-style-download';

new XlsxStyleDownload({
  columns: downloadColumns,
  data: downloadData,
  headerStyle,
  cellStyle,
  filename: '导出文件',
  lineStyle: totalLineStyle
}).download();

参数列表

参数名 说明 示例 是否必须 默认值
columns 列的映射关系 IColumns Y
data 导出的数据源 IData Y
headerStyle 表头的样式 IHeaderStyle N {}
cellStyle 具体单元格的样式 ICellStyle N {}
lineStyle 行的样式 ILineStyle N []
filename 文件名 导出文件 N 导出文件
rowHeight 行高 27 N 27

参数示例

  • IColumns
const columns = {
  // 键值对应数据的字段
  userName: {
    // 该字段映射的列头名
    name: '用户名',
    // 列宽
    wpx: 100,
    // 边框样式
    border:{
            bottom: {
                style: 'thin',
                color: { rgb: 'A0A0A0' }
        },
            top: {
                style: 'thin',
        color: { rgb: 'A0A0A0' }
      },
        left: {
        style: 'thin',
        color: { rgb: 'A0A0A0' }
      },
      right: {
        style: 'thin',
        color: { rgb: 'A0A0A0' }
      }
    }, // 或者 border: 'thin C0C0C0' 所有边框统一样式
    // 对齐方式
    alignment: {
      vertical: 'center' // 垂直居中对齐
    },
    // 设置底纹
    fill: {
      fgColor: { rgb: 'A0A0A0' }
    },
    // 设置字体样式
    font: {
      sz: 12, // 字号
      bold: true, // 加粗
      color: { rgb: "017B52" } // 颜色
    },
  },
  age: {
    name: '年龄',
    wpx: 120
  },
  sex: {
    name: '性别',
    wpx: 120
  }
}
  • IData
const data = [
  {
    userName: '赵嘚住',
    age: 18,
    sex: '男'
  },
  {
    userName: '朱的朱',
    age: 16,
    sex: '女'
  }
]
  • IHeaderStyle
const headerStyle = {
  fill: {
    fgColor: { rgb: 'F0F0F0' }
  },
  font: {
    sz: 12,
    bold: true
  },
  border: 'thin C0C0C0'
}
  • ILineStyle
const lineStyle = [
  {
    // 数据源的索引
    no: 1,
    // 样式
    style: {
        fill: {
        fgColor: { rgb: 'F0F0F0' }
      },
        font: {
            sz: 12,
            bold: true
        }
    }
  }
]
  • ICellStyle
const cellStyle = {
  userName: {
    line: [
      {
        // 数据源的索引
        no: 1,
        // 单独样式,可不传
        style: {}
      },
      {
        // 数据源的索引
        no: 2,
        style: {}
      }
    ],
    // userName列选中行都设置成这个样式
    style: {
      fill: {
        fgColor: { rgb: 'F0F0F0' }
      },
        font: {
            sz: 12,
            bold: true
        }
    }
  }
}

完整示例

import XlsxStyleDownload from 'xlsx-style-download';
// 定义通用样式
const commonStyle = {
  border: 'thin C0C0C0',
  font: {
    sz: 12, // 字号
    bold: true, // 加粗
    color: { rgb: "017B52" } // 颜色
  },
  alignment: {
    vertical: 'center' // 垂直居中对齐
  }
}
// 列
const columns = {
  // 键值对应数据的字段
  userName: {
    // 该字段映射的列头名
    name: '用户名',
    // 列宽
    wpx: 100,
    // 设置底纹
    fill: {
      fgColor: { rgb: 'A0A0A0' }
    },
    ...commonStyle
  },
  age: {
    name: '年龄',
    wpx: 120,
    ...commonStyle
  },
  sex: {
    name: '性别',
    wpx: 120,
    ...commonStyle
  }
}

// 数据源
const data = [
  {
    userName: '赵嘚住',
    age: 18,
    sex: '男'
  },
  {
    userName: '朱的朱',
    age: 16,
    sex: '女'
  }
]

// 表头样式
const headerStyle = {
  fill: {
    fgColor: { rgb: 'F0F0F0' }
  },
    ...commonStyle
}

// 行样式
const lineStyle = [
  {
    // 数据源的索引
    no: 1,
    // 样式
    style: {
        fill: {
        fgColor: { rgb: 'F0F0F0' }
      },
        ...commonStyle
    }
  }
]

// 单元格样式
const cellStyle = {
  userName: {
    line: [
      {
        // 数据源的索引
        no: 0,
        // 单独样式,可不传
        style: {}
      },
    ],
    // userName列选中行都设置成这个样式
    style: {
      fill: {
        fgColor: { rgb: 'F0F0F0' }
      },
        font: {
        sz: 16,
        color: {rgb: '005500'},
        blod: true
      }
    }
  }
}

// 执行导出
new XlsxStyleDownload({
  columns,
  data,
  headerStyle,
  cellStyle,
  filename: '我是被美化的表格',
  lineStyle
}).download();