RngUtils

命名空间

RngUtils

说明:
  • 单元格对象辅助函数库,用于处理表格单元格区域。
    高频常用所以可以用 $.endrow("A1") 形式快速调用
别名:
  • z单元格

函数:

z安全区域(rng) → {Range}

说明:
  • 当前区域与usedRange取交集 对用户传入的整行整列进行裁剪只留下有效区域
别名:
  • safeRange
参数列表:
参数名称 参数类型 备注
rng Range 用户传入的单元格区域
返回值:
返回一个安全区域
Type
Range
例子
//
var safeRange = RngUtils.z安全区域("A:A");
console.log(safeRange.Address()); // 安全区域地址

safeRange(rng) → {Range}

说明:
  • 当前区域与usedRange取交集 对用户传入的整行整列进行裁剪只留下有效区域
别名:
  • z安全区域
参数列表:
参数名称 参数类型 备注
rng Range 要创建安全区域的范围
返回值:
返回一个安全区域
Type
Range
例子
var safeRange = RngUtils.safeRange("A:A"); //usedrange为A1:C10的话 这个只返回 A1:A10
console.log(safeRange.Address()); // 安全区域地址

z最后一个(rng) → {number}

说明:
  • 获取指定区域的最后一个单元格的数值
别名:
  • lastCell
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一个单元格的区域
返回值:
返回最后一个单元格的数值
Type
number
例子
var lastCell = RngUtils.z最后一个(range);
console.log(lastCell.Address()); // 最后一个单元格的数值

lastCell(rng) → {Range}

说明:
  • 获取指定区域的最后一个单元格
别名:
  • z最后一个
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一个单元格的区域
返回值:
返回最后一个单元格的区域
Type
Range
例子
var lastCell = RngUtils.lastCell(range);
console.log(lastCell.Address()); // 最后一个单元格对象

z安全数组(rng) → {Array}

说明:
  • 将指定区域转换为安全数组
别名:
  • safeArray
参数列表:
参数名称 参数类型 备注
rng Range 要转换为安全数组的区域
返回值:
返回一个安全数组
Type
Array
例子
var safeArray = RngUtils.z安全数组(range);
logJson(safeArray); // 安全数组

safeArray(rng) → {Array}

说明:
  • 将指定区域转换为安全数组
别名:
  • z安全数组
参数列表:
参数名称 参数类型 备注
rng Range 要转换为安全数组的区域
返回值:
返回一个安全数组
Type
Array
例子
var safeArray = RngUtils.safeArray(range);
logJson(safeArray); // 安全数组

z最大行(rng) → {number}

说明:
  • 获取指定区域的最大行数
别名:
  • endRow
参数列表:
参数名称 参数类型 备注
rng Range 要获取最大行数的区域
返回值:
返回指定区域的最大行数
Type
number
例子
var maxRow = RngUtils.z最大行(range);
console.log(maxRow); // 最大行数

endRow(rng) → {number}

说明:
  • 获取指定区域的最后一行的行号
别名:
  • z最大行
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一行的区域
返回值:
返回指定区域的最后一行的行号
Type
number
例子
var endRow = RngUtils.endRow(range);
console.log(endRow); // 最后一行的行号

z最大行单元格(rng) → {Range}

说明:
  • 获取指定区域的最后一行的单元格
别名:
  • endRowCell
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一行单元格的区域
返回值:
返回指定区域的最后一行的单元格
Type
Range
例子
var endRowCell = RngUtils.z最大行单元格(range);
console.log(endRowCell.Address()); // 最后一行的单元格对象

endRowCell(rng) → {Range}

说明:
  • 获取指定区域的最后一行的单元格
别名:
  • z最大行单元格
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一行单元格的区域
返回值:
返回指定区域的最后一行的单元格
Type
Range
例子
var endRowCell = RngUtils.endRowCell(range);
console.log(endRowCell.Address()); // 最后一行的单元格对象

z最大行区域(rng) → {Range}

说明:
  • 获取指定区域的最后一行的区域
别名:
  • maxRange
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一行区域的区域
返回值:
返回指定区域的最后一行的区域
Type
Range
例子
var endRowRange = RngUtils.z最大行区域(range);
console.log(endRowRange.Address()); // 最后一行的区域对象

maxRange(rng, colopt) → {Range}

说明:
  • 获取指定区域指定列的最大区域
别名:
  • z最大行区域
参数列表:
参数名称 参数类型 属性 默认值 备注
rng Range 要获取最大区域的区域
col string <optional>
"A" 要获取最大区域的列名
返回值:
返回指定区域指定列的最大区域
Type
Range
例子
var maxRange = RngUtils.maxRange(range, "B");
console.log(maxRange.Address()); // 最大区域对象

z最大列(rng) → {number}

说明:
  • 获取指定区域的最大列数
别名:
  • endCol
参数列表:
参数名称 参数类型 备注
rng Range 要获取最大列数的区域
返回值:
返回指定区域的最大列数
Type
number
例子
var maxCol = RngUtils.z最大列(range);
console.log(maxCol); // 最大列数

endCol(rng) → {number}

说明:
  • 获取指定区域的最后一列的列号
别名:
  • z最大列
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一列的区域
返回值:
返回指定区域的最后一列的列号
Type
number
例子
var endCol = RngUtils.endCol(range);
console.log(endCol); // 最后一列的列号

z最大列单元格(rng) → {Range}

说明:
  • 获取指定区域的最后一列的单元格
别名:
  • endColCell
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一列单元格的区域
返回值:
返回指定区域的最后一列的单元格
Type
Range
例子
var endColCell = RngUtils.z最大列单元格(range);
console.log(endColCell.Address()); // 最后一列的单元格对象

endColCell(rng) → {Range}

说明:
  • 获取指定区域的最后一列的单元格
别名:
  • z最大列单元格
参数列表:
参数名称 参数类型 备注
rng Range 要获取最后一列单元格的区域
返回值:
返回指定区域的最后一列的单元格
Type
Range
例子
var endColCell = RngUtils.endColCell(range);
console.log(endColCell.Address()); // 最后一列的单元格对象

z可见区数组(rng, tempshtopt) → {Array}

说明:
  • 将指定区域的可见单元格转换为数组
别名:
  • visibleArray
参数列表:
参数名称 参数类型 属性 默认值 备注
rng Range 要转换为数组的区域
tempsht Worksheet <optional>
null 临时工作表对象
返回值:
返回一个包含可见单元格值的数组
Type
Array
例子
var visibleArr = RngUtils.z可见区数组(range, tempsheet);
logjson(visibleArr); // 可见单元格值的数组

visibleArray(rng, tempshtopt) → {Array}

说明:
  • 将指定区域的可见单元格转换为数组
别名:
  • z可见区数组
参数列表:
参数名称 参数类型 属性 默认值 备注
rng Range 要转换为数组的区域
tempsht Worksheet <optional>
null 临时工作表对象
返回值:
返回一个包含可见单元格值的数组
Type
Array
例子
var visibleArr = RngUtils.visibleArray(range, tempsheet);
logjson(visibleArr); // 可见单元格值的数组

z可见区域(rng) → {Range}

说明:
  • 获取指定区域的可见区域
别名:
  • z可见区域
参数列表:
参数名称 参数类型 备注
rng Range 要获取可见区域的区域
返回值:
返回指定区域的可见区域
Type
Range
例子
var visibleRange = RngUtils.z可见区域(range);
console.log(visibleRange.Address()); // 可见区域对象

visibleRange(rng) → {Range}

说明:
  • 获取指定区域的可见区域
别名:
  • visibleRange
参数列表:
参数名称 参数类型 备注
rng Range 要获取可见区域的区域
返回值:
返回指定区域的可见区域
Type
Range
例子
var visibleRange = RngUtils.visibleRange(range);
console.log(visibleRange.Address()); // 可见区域对象

z加边框(rng, LineStyleopt, Weightopt) → {Borders}

说明:
  • 为指定区域添加边框
别名:
  • z加边框
参数列表:
参数名称 参数类型 属性 默认值 备注
rng Range 要添加边框的区域
LineStyle number <optional>
1 边框线条样式
Weight number <optional>
2 边框线条粗细
返回值:
返回边框对象
Type
Borders
例子
RngUtils.z加边框(range);

addBorders(rng, LineStyleopt, Weightopt) → {Borders}

说明:
  • 为指定区域添加边框
别名:
  • addBorders
参数列表:
参数名称 参数类型 属性 默认值 备注
rng Range 要添加边框的区域
LineStyle number <optional>
1 边框线条样式
Weight number <optional>
2 边框线条粗细
返回值:
返回边框对象
Type
Borders
例子
RngUtils.addBorders(range);

z取前几行(rng) → {Range}

说明:
  • 获取指定区域的前几行
别名:
  • z取前几行
参数列表:
参数名称 参数类型 备注
rng Range 要获取前几行的区域
返回值:
返回指定区域的前几行
Type
Range
例子
var rows = RngUtils.z取前几行(range);
console.log(rows.Address()); // 前几行的区域对象

takeRows(rng, 行数) → {Range}

说明:
  • 获取指定区域的前几行
别名:
  • takeRows
参数列表:
参数名称 参数类型 备注
rng Range 要获取前几行的区域
行数 number 要获取的行数
返回值:
返回指定区域的前几行
Type
Range
例子
var rows = RngUtils.takeRows(range, 5);
console.log(rows.Address()); // 前5行的区域对象

z跳过前几行(rng) → {Range}

说明:
  • 跳过指定区域的前几行
别名:
  • z跳过前几行
参数列表:
参数名称 参数类型 备注
rng Range 要跳过前几行的区域
返回值:
返回跳过前几行后的区域
Type
Range
例子
var skippedRange = RngUtils.z跳过前几行(range);
console.log(skippedRange.Address()); // 跳过前几行后的区域对象

skipRows(rng, 行数) → {Range}

说明:
  • 跳过指定区域的前几行
别名:
  • skipRows
参数列表:
参数名称 参数类型 备注
rng Range 要跳过前几行的区域
行数 number 要跳过的行数
返回值:
返回跳过前几行后的区域
Type
Range
例子
var skippedRange = RngUtils.skipRows(range, 5);
console.log(skippedRange.Address()); // 跳过前5行后的区域对象

z合并相同单元格(rng, direction) → {undefined}

说明:
  • 合并指定区域中相同的行或者列
别名:
  • z合并相同行
参数列表:
参数名称 参数类型 备注
rng Range 要合并相同单元格的区域
direction String 合并方式 -r按行 -c按列 -rc先行后列 行按上下级关系 -mc 列按上下级关系
返回值:
无返回值
Type
undefined
例子
RngUtils.z合并相同行(range);

mergeCells(rng, direction) → {undefined}

说明:
  • 合并指定区域中相同的行
别名:
  • MergeRows
参数列表:
参数名称 参数类型 备注
rng Range 要合并相同行的区域
direction String 合并方式 -r按行 -c按列 -rc先行后列 行按上下级关系 -mc 列按上下级关系
返回值:
无返回值
Type
undefined
例子
RngUtils.MergeRows(range);

z取消合并填充单元格(rng, 合并方式) → {undefined}

说明:
  • 取消合并指定区域中每行的填充
别名:
  • z取消合并填充每行
参数列表:
参数名称 参数类型 备注
rng Range 要取消合并填充的区域
合并方式 String 要取消合并填充的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.z取消合并填充每行(range);

unMergeCells(rng) → {undefined}

说明:
  • 取消合并指定区域中每行的填充
别名:
  • UnMergeRows
参数列表:
参数名称 参数类型 备注
rng Range 要取消合并填充的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.UnMergeRows(range);

z插入多行(rng) → {Range}

说明:
  • 在指定区域中插入多行
别名:
  • z插入多行
参数列表:
参数名称 参数类型 备注
rng Range 要插入多行的区域
返回值:
返回插入多行后的区域
Type
Range
例子
RngUtils.z插入多行(range);

insertRows(rng, 表头, 行数, 行号数组) → {undefined}

说明:
  • 在指定区域中插入多行
别名:
  • insertRows
参数列表:
参数名称 参数类型 备注
rng Range 要插入多行的区域
表头 Array 要插入的表头数据
行数 number 要插入的行数
行号数组 Array 要插入的行号数组
返回值:
无返回值
Type
undefined
例子
RngUtils.insertRows(range, header, 5, [2, 4, 6]);

z插入多列(rng) → {undefined}

说明:
  • 在指定区域中插入多列
别名:
  • z插入多列
参数列表:
参数名称 参数类型 备注
rng Range 要插入多列的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.z插入多列(range);

insertCols(rng) → {undefined}

说明:
  • 在指定区域中插入多列
别名:
  • insertCols
参数列表:
参数名称 参数类型 备注
rng Range 要插入多列的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.insertCols(range);

z删除空白行(rng) → {undefined}

说明:
  • 删除指定区域中的空白行
别名:
  • delBlankRows
参数列表:
参数名称 参数类型 备注
rng Range 要删除空白行的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.z删除空白行(range);

delBlankRows(rng) → {undefined}

说明:
  • 删除指定区域中的空白行
别名:
  • z删除空白行
参数列表:
参数名称 参数类型 备注
rng Range 要删除空白行的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.z删除空白行(range);

z删除空白列(rng) → {undefined}

说明:
  • 删除指定区域中的空白列
别名:
  • z删除空白列
参数列表:
参数名称 参数类型 备注
rng Range 要删除空白列的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.z删除空白列(range);

delBlankCols(rng) → {undefined}

说明:
  • 删除指定区域中的空白列
别名:
  • delBlankCols
参数列表:
参数名称 参数类型 备注
rng Range 要删除空白列的区域
返回值:
无返回值
Type
undefined
例子
RngUtils.delBlankCols(range);

z整行(rng) → {Range}

说明:
  • 获取指定区域的整行
别名:
  • z整行
参数列表:
参数名称 参数类型 备注
rng Range 要获取整行的区域
返回值:
返回指定区域的整行
Type
Range
例子
var row = RngUtils.z整行(range);
console.log(row); // 整行的区域对象

entireRow(rng) → {Range}

说明:
  • 获取指定区域的整行
别名:
  • entireRow
参数列表:
参数名称 参数类型 备注
rng Range 要获取整行的区域
返回值:
返回指定区域的整行
Type
Range
例子
var row = RngUtils.entireRow(range);
console.log(row.Address()); // 整行的区域对象

z整列(rng) → {Range}

说明:
  • 获取指定区域的整列
别名:
  • z整列
参数列表:
参数名称 参数类型 备注
rng Range 要获取整列的区域
返回值:
返回指定区域的整列
Type
Range
例子
var column = RngUtils.z整列(range);
console.log(column.Address()); // 整列的区域对象

entireColumn(rng) → {Range}

说明:
  • 获取指定区域的整列
别名:
  • entireColumn
参数列表:
参数名称 参数类型 备注
rng Range 要获取整列的区域
返回值:
返回指定区域的整列
Type
Range
例子
var column = RngUtils.entireColumn(range);
console.log(column.Address()); // 整列的区域对象

z行数(rng) → {number}

说明:
  • 获取指定区域的行数
别名:
  • z行数
参数列表:
参数名称 参数类型 备注
rng Range 要获取行数的区域
返回值:
返回指定区域的行数
Type
number
例子
var rowCount = RngUtils.z行数(range);
console.log(rowCount); // 行数

rowsCount(rng) → {number}

说明:
  • 获取指定区域的行数
别名:
  • rowsCount
参数列表:
参数名称 参数类型 备注
rng Range 要获取行数的区域
返回值:
返回指定区域的行数
Type
number
例子
var rowCount = RngUtils.rowsCount(range);
console.log(rowCount); // 行数

z列数(rng) → {number}

说明:
  • 获取指定区域的列数
别名:
  • z列数
参数列表:
参数名称 参数类型 备注
rng Range 要获取列数的区域
返回值:
返回指定区域的列数
Type
number
例子
var colCount = RngUtils.z列数(range);
console.log(colCount); // 列数

colsCount(rng) → {number}

说明:
  • 获取指定区域的列数
别名:
  • colsCount
参数列表:
参数名称 参数类型 备注
rng Range 要获取列数的区域
返回值:
返回指定区域的列数
Type
number
例子
var colCount = RngUtils.colsCount(range);
console.log(colCount); // 列数

z列号字母互转(c) → {string}

说明:
  • 将列号转换为字母表示
别名:
  • z列号字母互转
参数列表:
参数名称 参数类型 备注
c number 要转换的列号
返回值:
返回列号的字母表示
Type
string
例子
var colLetter = RngUtils.z列号字母互转(3);
console.log(colLetter); // 列号的字母表示

colToAbc(c) → {string}

说明:
  • 将列号转换为字母表示
别名:
  • colToAbc
参数列表:
参数名称 参数类型 备注
c number 要转换的列号
返回值:
返回列号的字母表示
Type
string
例子
var colLetter = RngUtils.colToAbc(3);
console.log(colLetter); // 列号的字母表示

z复制粘贴格式(rng, target) → {undefined}

说明:
  • 这个函数用于复制粘贴格式。
别名:
  • copyFormat
参数列表:
参数名称 参数类型 备注
rng Range 范围参数。
target any 目标参数。
返回值:
Type
undefined
例子
// 使用示例:
z复制粘贴格式(rng, target);

copyFormat(rng, target) → {undefined}

说明:
  • 这个函数用于复制格式。
别名:
  • z复制粘贴格式
参数列表:
参数名称 参数类型 备注
rng Range 范围参数。
target any 目标参数。
返回值:
Type
undefined
例子
// 使用示例:
copyFormat(rng, target);

z复制粘贴值(rng, target) → {undefined}

说明:
  • 这个函数用于复制粘贴值。
别名:
  • copyValue
参数列表:
参数名称 参数类型 备注
rng Range 范围参数。
target any 目标参数。
返回值:
Type
undefined
例子
// 使用示例:
z复制粘贴值(rng, target);

copyValue(rng, target) → {undefined}

说明:
  • 这个函数用于复制值。
别名:
  • z复制粘贴值
参数列表:
参数名称 参数类型 备注
rng Range 范围参数。
target any 目标参数。
返回值:
Type
undefined
例子
// 使用示例:
copyValue(rng, target);

unionAll(rng, op_sht) → {Range}

说明:
  • union函数的增强版 对字符串地址 或者单元格数组 联合成一个区域 多用于筛选单元格后联合为一个区域做选定或者批量操作
别名:
  • z联合区域
参数列表:
参数名称 参数类型 备注
rng any 单元格地址 以及单元格数组
op_sht Sheet 工作表对象,跨表的时候可以指定表
返回值:
单元格对象
Type
Range
例子
console.log($.unionAll('a1,a2,B4:C10').Address()) 
console.log($.unionAll([Range('A1:C1'),Range("D1:D10")]).Address()) 

z联合区域(rng, op_sht) → {Range}

说明:
  • union函数的增强版 对字符串地址 或者单元格数组 联合成一个区域 多用于筛选单元格后联合为一个区域做选定或者批量操作
别名:
  • unionAll
参数列表:
参数名称 参数类型 备注
rng any 单元格地址 以及单元格数组
op_sht Sheet 工作表对象,跨表的时候可以指定表
返回值:
单元格对象
Type
Range
例子
console.log($.z联合区域('a1,a2,B4:C10').Address()) 
console.log($.z联合区域([Range('A1:C1'),Range("D1:D10")]).Address()) 

z多列排序(rng, 排序参数, 表头行数, 自定义序列) → {undefined}

说明:
  • 单元格多列排序函数 f1,f2形式指定列数,后面跟+-表示升序降序 可指定跳过表头行数
别名:
  • rngSortCols
参数列表:
参数名称 参数类型 备注
rng Range 待排序的范围
排序参数 String 排序参数
表头行数 Number 表头的行数,默认为1
自定义序列 String 自定义序列,默认为空
返回值:
无返回值
Type
undefined
例子
z多列排序($("A1:F10"),'f1+,f2-,f3+',1)

rngSortCols(rng, 排序参数, 表头行数, 自定义序列) → {undefined}

说明:
  • 单元格多列排序函数 f1,f2形式指定列数,后面跟+-表示升序降序 可指定跳过表头行数
别名:
  • z多列排序
参数列表:
参数名称 参数类型 备注
rng Range 待排序的范围
排序参数 String 排序参数
表头行数 Number 表头的行数,默认为1
自定义序列 String 自定义序列,默认为空
返回值:
无返回值
Type
undefined
例子
rngSortCols($("A1:F10"),'f1+,f2-,f3+',1)

z强力筛选(rng, 列, 条件回调, …args) → {undefined}

说明:
  • 单元格强力筛选函数
别名:
  • rngFilter
参数列表:
参数名称 参数类型 属性 备注
rng Range 待筛选的范围
Number 筛选的列号
条件回调 function 筛选的条件回调函数
args any <repeatable>
其他参数
返回值:
无返回值
Type
undefined
例子
z强力筛选($("A1:F10"),1,x=>x>1,2,x=>x=="A") 多列指定筛选条件 得到手工筛选的结果

rngFilter(rng, 列, 条件回调, …args) → {undefined}

说明:
  • 根据列筛选函数
别名:
  • z强力筛选
参数列表:
参数名称 参数类型 属性 备注
rng Range 待筛选的范围
Number 筛选的列号
条件回调 function 筛选的条件回调函数
args any <repeatable>
其他参数
返回值:
无返回值
Type
undefined
例子
rmgFilter($("A1:F10"),1,x=>x>1,2,x=>x=="A") 多列指定筛选条件 得到手工筛选的结果

rngSelectCols(rng, col) → {Range}

说明:
  • 根据多列参数选择单元格区域
别名:
  • z单元格多列选择
参数列表:
参数名称 参数类型 备注
rng Range 待选择的范围
col any 列选择
返回值:
选择的列范围
Type
Range
例子
$.rngSelectCols('A1:Z10','f1,f3,f6-f9') 不连续列用逗号分隔 连续列用-连接

z单元格多列选择(rng, col) → {Range}

说明:
  • 根据多列参数选择单元格区域
别名:
  • z单元格多列选择
参数列表:
参数名称 参数类型 备注
rng Range 待选择的区域
col any 列选择
返回值:
选择的列范围
Type
Range
例子
$.z单元格多列选择('A1:Z10','f1,f3,f6-f9')// 不连续列用逗号分隔 连续列用-连接 得到一个联合区域

rngSelectRows(rng, rows) → {Range}

说明:
  • 根据多行参数选择单元格区域
别名:
  • z单元格多行选择
参数列表:
参数名称 参数类型 备注
rng Range 待选择的区域
rows any 行选择器 与列选择器一样 f1代表第一行 f3-f5代表3到5行
返回值:
选择的行范围
Type
Range
例子
$.rngSelectRows('A1:C10','f1,f3,f6-f9') //不连续行用逗号分隔 连续列用-连接 得到一个联合区域

z单元格多行选择(rng, col) → {Range}

说明:
  • 根据单元格多行选择范围函数
别名:
  • rngSelectRows
参数列表:
参数名称 参数类型 备注
rng Range 待选择的区域
col any 列选择
返回值:
选择的行范围
Type
Range
例子
$.z单元格多行选择('A1:C10','f1,f3,f6-f9') //不连续行用逗号分隔 连续列用-连接 得到一个联合区域

findRange(rng, args) → {Array}

说明:
  • 按条件查找单元格 返回结单元格数组
参数列表:
参数名称 参数类型 备注
rng Range 单元格对象
args Array 参数数组 默认按单个值 也可以传完整的Range.Find函数对应的参数
返回值:
- 单元格数组
Type
Array
例子
$.findRange($('A1:C10'),5) //查找等于5的单元格

z查找单元格(rng, args) → {Array}

说明:
  • 按条件查找单元格 返回结单元格数组
参数列表:
参数名称 参数类型 备注
rng Range 单元格对象
args Array 参数数组 默认按单个值 也可以传完整的Range.Find函数对应的参数
返回值:
- 单元格数组
Type
Array
例子
$.findRange($('A1:C10'),5) //查找等于5的单元格