概述
本 Demo 展示了如何在工作表中添加列表框表单控件,并配置其数据源、关联单元格和选择模式。Demo 中创建了一个包含 14 个选项的列表框,设置为单选模式,并将用户选择的项目索引自动同步到指定单元格。
实现思路
在工作表的 A 列准备列表项数据(A1:A14)
使用 addFormControl 方法添加列表框表单控件
通过 options 方法配置列表框属性:设置输入范围、关联单元格和选择类型
使用 value 方法设置默认选中项
绑定 FormControlValueChanged 事件,监听用户选择变化
代码解析
准备数据源
这段代码为列表框准备数据源,在 A 列的第 0-13 行填入 "A1" 到 "A14" 共 14 个选项。
添加列表框控件
使用 addFormControl 方法创建列表框控件。参数依次为:控件名称、控件类型、左侧位置、顶部位置、宽度、高度。FormControlType.listBox 指定创建的是列表框类型的表单控件。
配置列表框属性
通过 options 方法获取列表框的配置对象,然后设置关键属性:
inputRange:指定列表项的数据来源区域
cellLink:指定关联单元格,列表框的选中项索引会自动写入该单元格
selectionType:设置选择模式为单选(single)
设置默认选中项
调用 value 方法设置默认选中第 3 个项目(索引从 0 开始,值为 2 表示第 3 项)。此时 C1 单元格的值也会自动更新为 2。
监听值变更事件
绑定 FormControlValueChanged 事件,当用户在列表框中选择不同项目时,事件处理函数会接收到新值并输出到控制台。
运行效果
工作表中显示一个列表框控件,包含 14 个选项(A1 到 A14)
默认选中第 3 个项目(A3)
C1 单元格显示当前选中项的索引值(初始为 2)
点击列表框中的其他项目时,C1 单元格的值会自动更新为新选中项的索引
控制台输出值变更信息,显示新选中的项目索引
API 参考
addFormControl 方法
向工作表添加表单控件形状。
name:控件名称
formControlType:表单控件类型,使用 GC.Spread.Sheets.Shapes.FormControlType.listBox 创建列表框
left:左侧位置(可选)
top:顶部位置(可选)
width:宽度(可选)
height:高度(可选)
options 方法
获取或设置列表框的配置选项。
IListBoxFormControlOptions 接口
inputRange:列表项数据源的区域字符串
cellLink:关联单元格地址,选中项索引会写入该单元格
selectionType:选择类型,使用 GC.Spread.Sheets.Shapes.ListBoxSelectionType 枚举(single、multi、extend)
value 方法
获取或设置列表框的当前值(选中项的索引)。
FormControlValueChanged 事件
当表单控件的值发生改变时触发。
args.newValue:新值
args.oldValue:旧值
window.onload = function () {
var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
workbook.suspendPaint();
initSheet1(workbook.getSheet(0));
workbook.resumePaint();
};
function initSheet1(sheet) {
for (var i = 0; i < 14; i++) {
sheet.setValue(i, 0, "A" + (i + 1));
}
var listBox = sheet.shapes.addFormControl("list box", GC.Spread.Sheets.Shapes.FormControlType.listBox, 100, 50, 200, 150);
var options = listBox.options();
options.inputRange = "A1:A14";
options.cellLink = "C1";
options.selectionType = GC.Spread.Sheets.Shapes.ListBoxSelectionType.single;
listBox.options(options);
listBox.value(2);
sheet.bind(GC.Spread.Sheets.Events.FormControlValueChanged, function (s, args) {
console.log("value changed...", args.newValue);
});
}
<!doctype html>
<html style="height:100%;font-size:14px;">
<head>
<meta name="spreadjs culture" content="zh-cn" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css"
href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js"
type="text/javascript"></script>
<script
src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js"
type="text/javascript"></script>
<script
src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js"
type="text/javascript"></script>
<script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div class="sample-tutorial">
<div id="ss" class="sample-spreadsheets"></div>
</div>
</body>
</html>
input[type="text"] {
width: 200px;
margin-right: 20px;
}
label {
display: inline-block;
width: 110px;
}
.sample-tutorial {
position: relative;
height: 100%;
overflow: hidden;
}
.sample-spreadsheets {
width: 100%;
height: 100%;
overflow: hidden;
float: left;
}
label {
display: block;
margin-bottom: 6px;
}
input {
padding: 4px 6px;
}
input[type=button] {
margin-top: 6px;
display: block;
width:216px;
}
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
code {
border: 1px solid #000;
}