WPS AirScript表格案例

表格案例#

为了帮助您理解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

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值