vue使用xlsx,xlsx-style,导出excel表格,修改文字字体颜色等,兼容JSZip-3.xx版本

本文介绍了在Vue项目中如何利用xlsx和xlsx-style库导出Excel表格,并详细说明了在遇到JSZip 3.xx版本问题时如何修改源码以解决错误。同时,提到了根据个人需求进一步封装的可能性。
摘要由CSDN通过智能技术生成

修改文件

我用的jszip版本3.2.1
JSZip.generate这个方法会报错,改源码吧,兄弟
参考jszip官网的从2.xx版本向3.xx版本过渡的方法变更

// 2.x
zip.generate();
// 3.x
zip.generateAsync({
   type:"uint8array"})
.then(function (content) {
   
    // use content
});
// node_modules里找到xlsx-style文件夹最外层的xlsx.js中的第11766行开始
// 原版的代码---修改前
function write_zip_type(wb, opts) {
   
	var o = opts||{
   };
  style_builder  = new StyleBuilder(opts);

  var z = write_zip(wb, o);
	switch(o.type) {
   
		case "base64": return z.generate({
   type:"base64"});
		case "binary": return z.generate({
   type:"string"});
		case "buffer": return z.generate({
   type:"nodebuffer"});
		case "file": return _fs.writeFileSync(o.file, z.generate({
   type:"nodebuffer"}));
		default: throw new Error("Unrecognized type " + o.type);
	}
}
//修改后的代码
function write_zip_type(wb, opts) {
   
	var o = opts||{
   };
  style_builder  = new StyleBuilder(opts);
  console.log(o,o.type)
  var z = write_zip(wb, o);
	switch(o.type) {
   
		case "base64": return z.generateAsync({
   type:"base64"}).then(res => {
   
      // console.log(res)
      return res
    });
		case "binary": return z.generateAsync({
   type:"string"}).then( res => {
   
      // console.log(res)
      return res
    });
		case "buffer": return z.generateAsync({
   type:"nodebuffer"}).then( res => {
   
      // console.log(res)
      return res
    });
		case "file": return z.generateAsync({
   type:"nodebuffer"}).then( res => {
   
      // console.log(res)
      return _fs.writeFileSync(o.file,res)
      // return res
    });
		default: throw new Error("Unrecognized type " + o.type);
	}
}
// 搞个文件名字叫excelOut.js,在src的vendor文件下
/* eslint-disable */
require('script-loader!file-saver');
import XLSX from 'xlsx-style'

function generateArray(table) {
   
  var out = [];
  var rows = table.querySelectorAll('tr');
  var ranges = [];
  for (var R = 0; R < rows.length; ++R) {
   
    var outRow = [];
    var row = rows[R];
    var columns = row.querySelectorAll('td');
    for (var C = 0; C < columns.length; ++C) {
   
      var cell = columns[C];
      var colspan = cell.getAttribute('colspan');
      var rowspan = cell.getAttribute('rowspan');
      var cellValue = cell.innerText;
      if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;

      //Skip ranges
      ranges.forEach(function (range) {
   
        if (R >= range
修改导出Excel 表格字体颜色,你可以使用 xlsx-style 库提供的 `XLSXStyle` 类的 `createStyle` 方法来创建自定义样式,然后将其应用到单元格中。 下面是一个使用 Vue 3 + TypeScript 和 xlsx-style-vite 库的示例代码: ```typescript <template> <div> <button @click="exportExcel">导出 Excel</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import { utils, writeFile } from 'xlsx-style-vite'; import { XLSXStyle } from 'xlsx-style-vite/xlsx-style'; export default defineComponent({ methods: { exportExcel() { const data = [ ['姓名', '年龄', '性别'], ['张三', 18, '男'], ['李四', 20, '女'], ['王五', 22, '男'] ]; const workbook = utils.book_new(); const worksheet = utils.aoa_to_sheet(data); // 创建自定义样式 const style = XLSXStyle.createStyle({ font: { color: '#FF0000' } }); // 将样式应用到单元格 utils.sheet_set_cell_style(worksheet, 'A1:C1', style); utils.book_append_sheet(workbook, worksheet, 'Sheet1'); writeFile(workbook, 'example.xlsx'); } } }); </script> ``` 在上面的代码中,我们首先创建了一个包含一些数据的数组 `data`。然后,我们使用 `utils.aoa_to_sheet` 方法将该数组转换为一个工作表对象。接着,我们使用 `XLSXStyle.createStyle` 方法创建了一个包含字体颜色为红色的自定义样式,并使用 `utils.sheet_set_cell_style` 方法将该样式应用到了表头行的所有单元格上。最后,我们将工作表对象添加到工作簿中,使用 `writeFile` 方法将工作簿导出为一个 Excel 文件。 需要注意的是,在使用 xlsx-style-vite 库时,要使用 `XLSXStyle` 类来创建自定义样式,这与原生的 xlsx-style 库有所不同,所以要引入 `xlsx-style-vite/xlsx-style` 模块。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值