SheetJS 数据验证序列与隐藏worksheet

658 阅读1分钟

注意:解决方案只针对 XLSX version: '0.8.11'

其他版本仅供参考

  1. 数据验证(数据有效性)的相关与源代码
function(e) {
	e = e.map(e => {
		var t
		if (e.formula1) {
			t = B("formula1", e.formula1, {
				count: 1
			});
		} else {
			t = B("formula1", `"${e.values.join(",")}"`, {
				count: 1
			});
		}
		return B("dataValidation", t, {
			type: e.type,
			allowBlank: e.allowBlank || "1",
			showInputMessage: e.showInputMessage || "1",
			showErrorMessage: e.showErrorMessage || "1",
			sqref: e.sqref
		})
	});
	return B("dataValidations", e.join(""), {
		count: e.length
	})
}(r["!dataValidations"]))

如何使用:生成一个 workbook 实例对象,需要设置 workbook.Sheets 属性,这个属性储存的是 worksheet 表数据的数组。

worksheet['!dataValidations'] = [
    {
        type: 'list', //序列
        sqref: 'D1:D1048576', //触发数据验证的单元格坐标
        formula1: `worksheet名字!$A$1:$A$10` //数据验证序列来源的单元格坐标
    }
]
  1. 隐藏worksheet的相关与源代码
	for (var n = 0; n != e.SheetNames.length; ++n) {
	  let state = 'visible'
	  if (e.Workbook && e.Workbook.Sheets && e.Workbook.Sheets[n]) {
	    if (e.Workbook.Sheets[n].Hidden === 1) {
	      state = 'hidden'
	    } else if (e.Workbook.Sheets[n].Hidden === 2) {
	      state = 'veryHidden'
	    }
	  }
	  r[r.length] = B("sheet", null, {
	    name: e.SheetNames[n].substr(0, 31),
	    sheetId: "" + (n + 1),
	    "r:id": "rId" + (n + 1),
	    state
	  });
	}

主要作用是生成 sheet 标签

<sheet name="worksheet名字" sheetId="1" r:id="rId1" state="hidden"/>

state属性值有3个

  1. visible
  2. hidden
  3. veryHidden

如何使用:生成一个 workbook 实例对象,需要设置 workbook.Workbook.Sheets 属性

Hidden有3个数值

0 代表visible

1 代表 hidden

2 代表 veryHidden

workbook.Workbook = {
    Sheets: []
}
sheetResult.SheetNames.forEach((SheetName, idx) => {
  const temp = []
  if (SheetName === 'worksheet名字') {
    temp.Hidden = 1
  } else {
     temp.Hidden = 0
  }
  sheetResult.Workbook.Sheets.push(temp)
})

新版本可以用方法 XLSX.utils.book_set_sheet_visibility(workbook, idx, hiddenVal) 设置隐藏