多维表对象库参考

对象说明
Sheets表的集合,里面有操作返回数据表列表,添加/删除数据表,监听数据表操作事件
Sheet数据表,提供修改表的属性,返回数据表的视图集合,访问数据表的记录,可监听数据新增数据、删除表、修改表名等事件
Views视图集合,里面有数据表的视图列表,可以添加/删除视图,监听视图的操作事件
View视图,提供修改视图属性,访问视图的记录,监听视图事件
FieldDescriptors字段定义集合,提供字段的列表,添加/删除字段,监听字段操作事件
FieldDescriptor字段定义,可以修改字段的属性,监听字段的事件
RecordRange记录,提供修改记录的数据,支持各种字段类型的修改
DBCellValue单元格数据,单元格为复杂的数据类型时,需要使用DBCellValue来设置数据
Fields网格视图列的集合,可以访问视图的列属性
Field网格视图列,提供修改列宽和隐藏/显示列的方法

脚本示例

示例1 选中区域快速批量填值

javascript
function main(){
  const time = getNowTime()
  const date = getNowDate()
  ActiveView.Selection(null, ["@日期", "@时间", "@分类"]).Value = [date, time, 'B']
}
// 获取当前时间,格式为 "hh:mm:ss"
function getNowTime() {
  return (new Date()).toTimeString().split(" ")[0]
}
// 获取当前日期,格式为 "yyyy:MM:dd"
function getNowDate() {
  const date = new Date()
  return date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate()
}

main()

示例2 快速实现“一键归档”

下面代码实现了一个文件中两张数据结构相同的表 把表一中的已完成的数据插入到表二中,并删除表一中数据 表结构如下图所示:

名称分类数字日期完成
1A1002024/4/10
javascript
function main() {
  const criterias = []
  criterias.push(Criteria("@分类",  "Equals", ["B"]))
  criterias.push(Criteria("@完成",  "Equals", ["1"]))
  // 创建filters
  const filters = []
  const filter = {Criterias: criterias, Op: "AND"}
  filters.push(filter)
  const range1 = Sheets(1).Views(1).RecordRange.Condition(filters, "AND")
  if(!range1){
    return
  }
  const length = range1.Count
  const range2 = Sheets(2).Views(1).RecordRange.Add(1, undefined, length)
  range2.Value = range1.Value
  range1.Delete()
}

main()

示例3 快速删除空白数据

删除名称字段中值为空的数据

javascript
function main() {
  const criterias = []
  criterias.push(Criteria("@名称",  "Equals", ['']))
  const filters = []
  const filter = {Criterias: criterias, Op: "AND"}
  filters.push(filter)
  Sheets(3).Views(1).RecordRange.Condition(filters, "AND").Delete()
}
main()

例子4 快速创建一张表

javascript
function main() {
  Application.Sheets.Add(
    {
        Type:'xlEtDataBaseSheet',
        Config:{
            fields:
                [
                    {fieldType:'SingleLineText',args:{fieldName:'文本',fieldWidth:15}},
                    {fieldType:'MultiLineText',args:{fieldName:'多行文本',fieldWidth:15}},
                    {fieldType:'Date',args:{fieldName:'日期',numberFormat:'yyyy/mm/dd;@',fieldWidth:15}},
                    {fieldType:'SingleSelect',args:{fieldName:'单选项',fieldWidth:15,listItems:[{value: '选项1', color: 4283466178},{value: '选项2',color: 4281378020}]}},
                    {fieldType:'Number',args:{fieldName:'数字',fieldWidth:15}},
                    {fieldType:'Rating',args:{fieldName:'等级',maxRating:6,fieldWidth:15}},
                ],
            name:'数据表',
            views:
                [
                    {name:'表格视图',type:'Grid'},
                    {name:'表单视图',type:'Form'}
                ]
        }
    })
}
main()

例子5 格式化数据批量插入

javascript
function main(){
    const range = Application.Sheets(4).Views(1).RecordRange.Add(1, undefined, 300)// 在第1行,向上方添加300条记录
    const template = ["商品", 10]
    const range1 = []
    // 给1-300行赋值
    for (let i = 1; i < 301; i++ ) {
        if(i<101){
          range1.push([template[0]+i,template[1],'A'])
        }else if(i<201){
          range1.push([template[0]+i,template[1]+10,'B'])
        }else{
          range1.push([template[0]+i,template[1]+10,'C'])
        }
    }
    range.Value = range1
}
main()

例子6 监听记录变化

javascript
function main() {
    let eventContext;
    eventContext = Application.Sheets(1)
        .Views(1)
        .RecordRange(1)
        .OnUpdate(data => {
            const range = data;
            console.log(range.Id);
            console.log(range.Value);
            // 取消事件监听
            eventContext.Destroy();
        });
    Application.Sheets(1).Views(1).RecordRange(1).Value = ['名称111', 4, '选项1'];
}
main();