表格案例#
为了帮助您理解AirScript,以及快速上手脚本开发,我们将表格中开始-快捷工具中的部分功能源码展示出来, 希望您能在阅读完这些真实的案例代码后,能有效利用脚本编辑器来解决问题。
清除公式仅保留值#
手动选中一个或多个单元格,然后执行脚本,执行完成后会批量清除其公式,仅保留其值。
js
const API = Application
// 用户选区
const Selection = API.Selection
// 获取用户激活工作簿的使用范围
const UsedRange = API.ActiveSheet.UsedRange
// 取二者的最小集合,即所需遍历最小集合
const rowFrom = Math.max(Selection.Row, UsedRange.Row)
const rowTo = Math.min(Selection.RowEnd, UsedRange.RowEnd)
const colFrom = Math.max(Selection.Column, UsedRange.Column)
const colTo = Math.min(Selection.ColumnEnd, UsedRange.ColumnEnd)
for (let i = rowFrom; i <= rowTo; i++) {
const row = API.ActiveSheet.Rows(i) // 确定行
for (let j = colFrom; j <= colTo; j++) {
const rg = row.Columns(j) // 从行对象中指定列,从而确定单元格
// Text是单元格的显示值,即如果该单元格原先是公式,那Text即公式计算后的结果,
// 如果想获取未计算的结果,使用rg.Formula
const text = rg.Text
if (text !== '') {
rg.Value = text // 原先的Value是公式,通过将Value重写成计算后的结果从而清除公式
}
}
}
高亮错误手机号#
手动选中一个或多个单元格,然后执行脚本,脚本会自动判断单元格的内的手机号是否正确,执行完成后会高亮错误手机号单元格。
js
// 手机号码的正则表达式,匹配第一位是1,第二位是3-9,其余位是数字的11位字符串
const PhoneReg = /^1[3-9](\d{9})$/i
// 生成一个1-16777215的随机数,转换成16进制字符串,作为随机颜色(例如:#FFFFFF)
const randomColor = '#' + Math.floor(Math.random() * 16777215).toString(16);
const API = Application
// 用户选择的区域
const Selection = API.Selection
// 工作簿激活的范围
const UsedRange = API.ActiveSheet.UsedRange
// 取二者的最小集合,即所需遍历最小集合
const rowFrom = Math.max(Selection.Row, UsedRange.Row)
const rowTo = Math.min(Selection.RowEnd, UsedRange.RowEnd)
const colFrom = Math.max(Selection.Column, UsedRange.Column)
const colTo = Math.min(Selection.ColumnEnd, UsedRange.ColumnEnd)
for (let i = rowFrom; i <= rowTo; i++) {
const row = API.ActiveSheet.Rows(i) // 确定行对象
for (let j = colFrom; j <= colTo; j++) {
const rg = row.Columns(j) // 再确定列对象,即确定单元格
const text = rg.Text // 获取单元格的文本内容
if (text !== '' && !PhoneReg.test(text)) { // 正则表达式匹配不通过的情况下
rg.Interior.Color = randomColor // 用之前生成的随机颜色高亮该单元格
}
}
}
取消合并填充相同内容#
手动选中一个或多个单元格,然后执行脚本,脚本会自动取消合并单元格并填充相同内容。
js
const API = Application
// 用户选择的区域
const Selection = API.Selection
// 如果选区内有合并的单元格
if (Selection.MergeCells) {
// 获取所有合并的单元格和数量
const areas = Selection.MergeArea.Areas
const areaCount = areas.Count
// 遍历每个合并的单元格
for (let areaIndex = 1; areaIndex <= areaCount; areaIndex++) {
const area = areas.Item(areaIndex)
const text = area.Formula // 保存取消合并前该合并单元格的内容
// 该合并单元格的范围
const rowFrom = area.Row
const rowTo = area.RowEnd
const colFrom = area.Column
const colTo = area.ColumnEnd
// 取消合并
area.UnMerge()
// 将原先合并单元格的区域内容改写成合并单元格的值
for (let i = rowFrom; i <= rowTo; i++) {
const row = API.ActiveSheet.Rows(i) // 确定行
for (let j = colFrom; j <= colTo; j++) {
const cell = row.Columns(j) // 确定列
cell.Value = text // 将之前保存的内容写到单元格里
}
}
}
}
统计重复次数#
手动选中一个或多个单元格,然后执行脚本,脚本会自动计算选区内的重复的值和重复的次数,新建工作表并将重复的值和重复的次数写入新建工作表的A2单元格
和B2单元格
。
js
const API = Application
// 用户选择的区域
const Selection = API.Selection
// 工作簿激活的范围
const UsedRange = API.ActiveSheet.UsedRange
// 取二者的最小集合,即所需遍历最小集合
const rowFrom = Math.max(Selection.Row, UsedRange.Row)
const rowTo = Math.min(Selection.RowEnd, UsedRange.RowEnd)
const colFrom = Math.max(Selection.Column, UsedRange.Column)
const colTo = Math.min(Selection.ColumnEnd, UsedRange.ColumnEnd)
// countMap用于统计每个字符串出现次数
const countMap = {}
for (let i = rowFrom; i <= rowTo; i++) {
const row = API.ActiveSheet.Rows(i) // 确定行
for (let j = colFrom; j <= colTo; j++) {
const rg = row.Columns(j) // 再确定列对象,即确定单元格
const text = rg.Text // 取出该单元格的值用于统计
if (text) {
if (countMap[text]) {
countMap[text]++
} else {
countMap[text] = 1
}
}
}
}
const Name = API.ActiveSheet.Name
// 在当前单元格之后新建一个工作表,使用默认名称,改调用之后,当前激活的工作表会变成新增工作表
API.Sheets.Add(null, Name, 1)
// 在新工作表的A1和B1写入'重复值'和'重复次数'
API.Range('A1').Value = '重复值'
API.Range('B1').Value = '重复次数'
// 从第三行开始,每行第一列输出字符串,第二列输出该字符串重复出现的次数
let index = 2
for (let k in countMap) {
const row = API.ActiveSheet.Rows(index)
row.Columns(1).Value = "'" + k
row.Columns(2).Value = countMap[k] + ''
index++
}
最后更新于: 2023/12/15 15:06:05