spread.js常用api
9374 2022/10/17 spread.jsexcel
# 初始化
//传入dom的id 第二个参数optionos 可以不传
spread = new GC.Spread.Sheets.Workbook(document.getElementById("id"),{
});
//表格设置为中文GC.Spread.Common.CultureManager.culture("zh-cn");初始化表格时执行'
GC.Spread.Common.CultureManager.culture("zh-cn");
1
2
3
4
5
2
3
4
5
options 可以在初始化时传入 也可以在后续手动更改
# 配置部分
# spread部分
方法 | 作用 | 示例 |
---|---|---|
clearSheets() | 清除所有sheet页 | spread.clearSheets() |
setSheetCount(1) | 设置sheet页数 | |
suspendPaint() | 大多数时候, 在你改变 Spread 之后, 控件会自动刷新以达到重绘和更新状态的目的。 可是, 如果你一次做出大量的改变, 并且不希望每次改变都去重新绘制 Spread , 那么你可以调用 suspendPaint 暂停重绘 | |
resumePaint() | 完成改变之后,你可以调用resumePaint 重新激活Spread重绘, | |
repaint() | 如果你的代码逻辑对控件进行修改,但控件未进行自刷新,那么你可以调用repaint方法强制刷新。 | spread.repaint(); |
# 获取sheet对象
数据渲染基于每个表格内的每个单元格进行,单元格基于sheet页获取,操作前需要获取sheet对象;
var sheet = spread.getActiveSheet(0)
1
options 可以在初始化时传入 也可以在后续手动更改
# sheet.options参数
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
allowContextMenu | 禁用右键 | boolean | sheet.allowContextMenu=false |
newTabVisible | 隐藏新建tab按钮 | boolean | |
tabEditable | 修改sheet名称 | boolean | |
allowSheetReorder | 禁止sheet移动 | boolean | |
scrollbarMaxAlign | 鼠标滚轮禁用 | boolean | |
showVerticalScrollbar | 显示竖向滚动条 | boolean | |
showHorizontalScrollbar | 显示横向滚动条 | boolean | |
showScrollTip | 以何种方式显示滚动提示条 | ['both','horizontal','vertical','none'] | GC.Spread.Sheets.ShowScrollTip.both |
# options.gridline
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
showHorizontalGridline | 显示单元格变框线 | boolean | sheet.options.gridline.showHorizontalGridline= false |
showVerticalGridline | 显示单元格变框线 | boolean |
# sheet.defaults参数
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
sheet.defaults.rowHeight | 默认行高 | number | sheet.defaults.rowHeight=20 |
sheet.defaults.colWidth | 默认列宽 | number | -- |
# 表格 获取单元格方法
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
getCell | 获取列 | 可以一个获取列,传行列,获取指定单元格 | sheet.getCell(1) |
getRange | 获取区域 | 开始行,开始列,结束行,结束列 | sheet.getRange(1,0,2,2) |
# 表格 方法
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
setRowCount | 表格行数 | number | sheet.setRowCount(1) |
setColumnCount | 表格列数 | number | sheet.setColumnCount(1) |
setColumnWidth | 列宽 | 列:number,宽度:number | sheet.setColumnWidth(0, 80); |
setRowHeight | 行高 | 行:number,高度:number | sheet.setRowHeight(0, 80); |
setFormula | 设置公式 | 行:number,列:number,公式:string(excel公式写法) | sheet.setFormula(0, 0,'SUM(A1:A20)') |
setText | 设置文字内容 | 行:number,列:number,内容:string | sheet.setText(0, 0, '123') |
setValue | 设置数字内容 | 行:number,列:number,内容:number | sheet.setValue(0, 0, 123) |
addSpan | 合并单元格 | 开始行,开始列,结束行,结束列 | sheet.addSpan(0, 0, 1, 1) |
frozenRowCount | 冻结行 | number | sheet.frozenRowCount(4) |
frozenColumnCount | 冻结列 | number | sheet.frozenColumnCount(2) |
zoom | 整体缩放 | number | sheet.zoom(0.80) |
autoFitRow | 自动行高 | 行number | sheet.autoFitRow(1) |
autoFitColumn | 自动列宽 | 列number | sheet.autoFitColumn(1) |
# 公式
- 合计公式
SUM(A1:A3)
- 除法公式
SUM(A1/B1)
# 设置单元格边框
var lineStyle = GC.Spread.Sheets.LineStyle.thin
var lineBorder = new GC.Spread.Sheets.LineBorder('black', lineStyle)
//应用样式区域
sheet.getRange(1, 0, rowCount -1, colCount).setBorder(lineBorder, { all: true}, GC.Spread.Sheets.SheetArea.viewport);
1
2
3
4
2
3
4
# 默认字体方向
var style = sheet.getDefaultStyle()
style.vAlign = GC.Spread.Sheets.VerticalAlign.center
style.hAlign = GC.Spread.Sheets.HorizontalAlign.left
//应用样式
sheet.setDefaultStyle(style)
1
2
3
4
5
2
3
4
5
# 单元格 方法
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
foreColor | 文字颜色 | string | sheet.getCell(0, 0).foreColor("white"); |
backColor | 背景颜色 | string | sheet.getCell(0, 0).backColor("#44546a") |
vAlign | 文字左右居中方式 | function | sheet.getCell(0, 0).vAlign(GC.Spread.Sheets.VerticalAlign.center) |
hAlign | 文字上下居中方式 | function | sheet.getCell(0, 0).hAlign(GC.Spread.Sheets.HorizontalAlign.center) |
font | 字体 | string | sheet.getCell(0, 0).font('bold 30px simkai') |
wordWrap | 自动换行 | boolean | sheet.getCell(0, 0).wordWrap(true) |
formatter | 格式化 | "0.00%" | sheet.getCell(0, 0).formatter("0.00%") |
textDecoration | 文字下划线 | function | sheet.getCell(0, 0).textDecoration(GC.Spread.Sheets.TextDecorationType.underline); |
# 绑定点击事件
# 筛选
sheet.options.protectionOptions = {
allowFilter: true,//开始筛选
allowResizeRows: true,// 是否允许调整行
allowResizeColumns: true, //是否允许调整列
allowSort:true,//开启排序
}
//params(开始行.开始列,筛选多少行,筛选多少列) 可以筛选的区域
let filter = new GC.Spread.Sheets.Filter.HideRowFilter(new GC.Spread.Sheets.Range(3, 0, rowCount, 1));
//应用筛选
sheet.rowFilter(filter);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 导出
# 导出excel
//获取当前sheet表
var sheet = spread.getActiveSheet();
//获取sheetname作为文件名,这里是从第一个格子获取,可以写死 或者变量传入
var fileName = sheet.getValue(0,0);
if (fileName.substr(-5, 5) !== '.xlsx') {
fileName += '.xlsx';
}
//取消当前Excel的保护
// var sheet = spread.getActiveSheet();
sheet.options.isProtected = false;
//得到导出数据
var json = spread.toJSON();
//导出Excel
var excelIo = new GC.Spread.Excel.IO();
excelIo.save(json, function (blob) {
saveAs(blob, fileName);
}, function (e) {
console.log(e);
});
//恢复当前Excel的保护
sheet.options.isProtected = true;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 导出pdf
- 注册字体
获取字体的二进制文件,本次使用创建了font.js储存字体二进制文件,后续引入相关js(改进时可以通过接口返回字体文件 不用进入页面都加载字体文件,实现按需引入)treeObj.registerCustomFont(fonts);
var fontsObj= {"simkai.ttf":'二进制'}//这里太长就不放二进制文件了 //2.使用spreadjs 自带的注册字体方法 将字体文件传入函数 function registerCustomFont (fontsObj) { var fonts = {normal: fontsObj["simkai.ttf"]}; GC.Spread.Sheets.PDF.PDFFontsManager.registerFont('楷体', fonts); GC.Spread.Sheets.PDF.PDFFontsManager.fallbackFont = function (font) { var fontInfoArray = font.split(' '), fontName = fontInfoArray[fontInfoArray.length - 1]; if (fontName === 'simkai') {return fonts.normal;} } },
1
2
3
4
5
6
7
8
9
10 - 应用字体
//获取style属性对象 let style = new GC.Spread.Sheets.Style() //修改style的fonts style.font = "16px simkai"; //通过for循环讲样式挂在在表格的每一行 for (var i = 0; i < spread.getSheetCount(); i++) { spread.sheets[i].setDefaultStyle(style,GC.Spread.Sheets.SheetArea.viewport) }
1
2
3
4
5
6
7
8 - 调整打印属性 打印属性官方API (opens new window)
//1.获取当前sheet表格 注意:spread 是spread对象 需要根据实际内容进行更改 sheet = spread.getActiveSheet() //2.获取当前打印属性 printInfo = sheet.printInfo() //3.对当前打印属性进行修改打印边距打印纸张大小打印边框(横向边框与竖向边框)居中方式(水平/垂直)打印方向(横向纸张/竖向纸张)页眉页脚黑白/彩色
1
2
3
4
5
6 - 导出
//1.取消当前EXCEL保护 sheet.options.isProtected = false //2.获取当前表格sheet名称 var fileName = sheet.getValue(0, 0) //3.开始打印 注意:spread 是spread对象 需要根据实际内容进行更改 spread.savePDF(function (blob) { saveAs(blob, fileName+'.pdf');,function (error) { console.log(error); }); //4.恢复excel保护 sheet.options.isProtected = true
1
2
3
4
5
6
7
8
9
10
# 打印 打印属性官方API (opens new window)
浏览器边距会覆盖打印设置边距 可能会出现显示空白页,在设置中将边距调整为无 或者调整打印页码
Q:如果打印多个sheet,但不是所有sheet。例如:spread中有四个sheet,如何打印其中的两个?
A:这样需要将spread复制到一个临时spread中,在临时spread中删除不打印的sheet,然后打印临时spread。
Q:如何将一个sheet分多页打印?
A:使用setRowPageBreak或setColumnPageBreak方法来插入行分页符或列分页符。
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
其中参数为需要打印sheet的index,传入sheet的index打印指定sheet。如果想全部打印,那么参数什么都不传即可。 | number | spread.print(sheetIndex?); |
# 打印属性设置 printInfo
var printInfo = sheet.printInfo(); //获取printInfo
1
属性 | 作用 | 参数 | 示例 |
---|---|---|---|
bestFitColumns | 打印时是否每一列都自适应宽度。 | true/false | printInfo.bestFitColumns(true/false) |
bestFitRows | 打印时是否每一行都自适应高度。 | true/false | printInfo.bestFitRows(true/false) |
blackAndWhite | 彩色打印还是黑白打印(true为黑白打印,false为彩色打印) | true/false | printInfo.blackAndWhite(true/false) |
centering | 打印的居中方式,参数为GC.Spread.Sheets.Print.PrintCentering的枚举,有以下四种 | [both,horizontal,vertical,none] | printInfo.centering(GC.Spread.Sheets.Print.PrintCentering.both) |
headerLeft | 表脚区域中间部分的文本及样式。 | text/format | printInfo.headerLeft(text/format) |
headerCenter | 表脚区域左部分的文本及样式。 | text/format | printInfo.headerCenter(text/format) |
headerRight | 表脚区域右部分的文本及样式。 | text/format | printInfo.headerRight(text/format) |
footerCenter | 表脚区域中间部分的文本及样式。 | text/format | printInfo.footerCenter(text/format) |
footerLeft | 表脚区域左部分的文本及样式。 | text/format | printInfo.footerLeft(text/format) |
footerRight | 表脚区域右部分的文本及样式。 | text/format | printInfo.footerRight(text/format) |
margin | 边距。 | object | printInfo.margin({top:75, bottom:75, left:20, right:20, header:10, footer:20}); |
orientation | 设置打印方式横向(landscape)或纵向(portrait) | GC.Spread.Sheets.Print.PrintPageOrientation.landscape[landscape,portrait] | printInfo.orientation(GC.Spread.Sheets.Print.PrintPageOrientation.landscape) |
pageOrder | 打印顺序, | GC.Spread.Sheets.Print.PrintPageOrder的枚举。[auto,overThenDown,downThenOver] | printInfo.pageOrder( GC.Spread.Sheets.Print.PrintPageOrder.auto ) |
paperSize | 设置打印纸张大小。 | new GC.Spread.Sheets.Print.PaperSize()对象 | printInfo.paperSize(new GC.Spread.Sheets.Print.PaperSize(300, 500)) |
qualityFactor | 打印质量,value为1~8的一个数值,越高则打印效果越好。 | value | printInfo.qualityFactor(1) |
repeatColumnStart | 重复打印列的起始。 | columnindex | printInfo.repeatColumnStart(1) |
repeatColumnEnd | 重复打印列的结束。 | columnindex | printInfo.repeatColumnEnd(2) |
repeatRowStart | 重复打印行的起始。 | rowindex | printInfo.repeatRowStart(rowindex) |
repeatRowEnd | 重复打印行的结束。 | rowindex | printInfo.repeatRowEnd(rowindex) |
rowEnd | 打印截至至某一行 | ||
rowStart | 打印起始与某一行 | ||
columnEnd | 打印截至至某一列 | ||
columnStart | 打印起始于某一列,设置部分打印时使用。 | ||
showBorder | 是否显示边框 | true/false | |
showColumnHeader | 是否打印列头 | PrintVisibilityType的枚举[inherit: 继承自表单的设置 ((默认) 行头/列头可见)。hide: 不打印。show:每页中都显示。showOnce: 显示一次 (在第一页)。] | |
showRowHeader | 是否打印行头 | 同上 | |
showGridLine | 是否打印网格线 (默认是打印) | true/false | |
useMax | |||
zoomFactor | 放大/缩小比例,例如printInfo.zoomFactor(0.8)为缩放至80% |
text:文本内容,如:printInfo.footerCenter("GrapeCity")
format:& 被用作为特殊的转义字符,用来转义以下打印特殊数据的关键字。
P: 当前页数。
N: 总页数。
D: 当前日期。(今天)
T: 当前时间。
G: 图片,用来显示相应区域图片(XXXImage)的占位符。
S: 删除线。
U: 下划线。
B: 粗体。
I: 斜体。
": (双引号),用来设置字体。
F: Spread的名字。
A: 表单名字。
如:printInfo.footerCenter("&P/&N");
printInfo.headerLeftImage(img):表头区域左部分的图片。img为图片的路径或者图片的base64编码。
printInfo.headerCenterImage(img):表头区域中间部分的图片。img为图片的路径或者图片的base64编码。
printInfo.headerRightImage(img):表头区域右部分的图片。img为图片的路径或者图片的base64编码。
printInfo.footerLeftImage(img):表脚区域左部分的图片。img为图片的路径或者图片的base64编码。
printInfo.footerCenterImage(img):表脚区域中间部分的图片。img为图片的路径或者图片的base64编码。
printInfo.footerRight(img):表脚区域右部分的图片。img为图片的路径或者图片的base64编码。
printInfo.margin(object):边距。例如printInfo.margin({top:75, bottom:75, left:20, right:20, header:10, footer:20});
value.top {number} 顶部边距
value.bottom {number} 底部边距
value.left {number} 左边距
value.right {number} 右边距
value.header {number} 顶部标题的偏移量
value.footer {number} 底部标题的偏移量
printInfo.orientation(GC.Spread.Sheets.Print.PrintPageOrientation.landscape/GC.Spread.Sheets.Print. PrintPageOrientation.portrait):设置打印方式横向或纵向
GC.Spread.Sheets.Print.PrintPageOrientation.landscape为横向
GC.Spread.Sheets.Print.PrintPageOrientation.portrait为纵向
如果要实现横向打印与纵向打印不仅要在设置中进行设置,还需将浏览器的设置也与之设置一致
printInfo.pageOrder(value):打印顺序,value为GC.Spread.Sheets.Print.PrintPageOrder的枚举。
GC.Spread.Sheets.Print.PrintPageOrder.auto 自动
GC.Spread.Sheets.Print.PrintPageOrder.overThenDown 先横向排列再竖向排列
GC.Spread.Sheets.Print.PrintPageOrder.downThenOver 先横向排列再竖向排列
当需要一页纸打印多个sheet时,可以设置打印顺序来调整sheet以横向排列还是纵向排列。
printInfo.paperSize(paperSize):设置打印纸张大小。
paperSize需要初始化一个new GC.Spread.Sheets.Print.PaperSize()对象,
其中参数有GC.Spread.Sheets.Print.PaperKind的枚举
PaperSize对象同样支持传入纸张的宽与高来确定纸张大小,
例如:new GC.Spread.Sheets.Print.PaperSize(300, 500)
paperkind可以参考 (opens new window):
printInfo.qualityFactor(value):打印质量,value为1~8的一个数值,越高则打印效果越好。
printInfo.repeatColumnStart(columnindex):重复打印列的起始。
printInfo.repeatColumnEnd(columnindex):重复打印列的结束。
printInfo.repeatRowStart(rowindex):重复打印行的起始。
printInfo.repeatRowEnd(rowindex):重复打印行的结束。
重复打印行列当有需要在打印的每一页都打印行列数据时使用,参数为行与列的index。
printInfo.rowEnd(rowindex):打印截至至某一行
printInfo.rowStart(rowindex):打印起始与某一行
printInfo.columnEnd(columnindex):打印截至至某一列
printInfo.columnStart(columnindex):打印起始于某一列,设置部分打印时使用。
printInfo.showBorder(true/false):是否显示边框
printInfo.showColumnHeader/printInfo.showRowHeader:是否打印列头/行头,
参数为PrintVisibilityType枚举值。
inherit: 继承自表单的设置 ((默认) 行头/列头可见)。
hide: 不打印。
show: 在每页中都显示。
showOnce: 显示一次 (在第一页)。
printInfo.showGridLine:是否打印网格线 (默认是打印)。
printInfo.useMax
printInfo.zoomFactor:放大/缩小比例,例如printInfo.zoomFactor(0.8)为缩放至80%
//获取当前sheet表
var sheet = spread.getActiveSheet()
//获取打印属性对象
var printInfo = new GC.Spread.Sheets.Print.PrintInfo()
//调整打印设置黑白
//打印注意:与导出pdf打印设置一致
//应用打印属性
sheet.printInfo(printInfo)
//打印
spread.print(0)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10