WPS JS宏代码(更新2023.06.12)

2023-07-28 16:32:43 浏览数 (1)

[001]WPS JS将工作表拆分成单独的文件

代码语言:javascript复制
function 拆分工作表成单独文件(){
 let path=ThisWorkbook.Path   "\";//路径
 app_set(false);//取消屏幕刷新
 for(let sht of Worksheets){//遍历工作表
  sht.Copy();//工作表复制后成为活动工作簿
  with(ActiveWorkbook){
   SaveAs(path   sht.Name);//默认文件类型并覆盖同名同类型文件并放在当前工作簿路径下
   Close(true);//保存关闭
  }
 }
 app_set(true);//恢复屏幕刷新
 MsgBox("拆分完成",0,"逗号Office技巧")
}

function app_set(bln){//设定屏幕刷新等
 with(Application){
  DisplayAlerts=bln;
  ScreenUpdating=bln
 }
}

[002]WPS JS将多个Excel文件合并成一个工作表

代码语言:javascript复制
//按钮1点击事件处理函数,注意此代码不能保留单元格样式
function CommandButton1_Click() {
    let fd = Application.FileDialog(msoFileDialogFilePicker) //创建文件对话框对象
        , mysht = ThisWorkbook.ActiveSheet //绑定第一张工作表对象
        , arr = []
 
    fd.Filters.Clear() //清空文件对话框的文件过滤规则
    fd.Filters.Add('Excel文件', '*.xls;*.xlsx;*.csv') //添加xls、xlsx、csv文件过滤规则
    fd.Title = '请选文件'
 
    /*利用Show方法显示对话框,如果用户选择了文件,返回值等于-1
    这里的if条件是:如果用户取消,则清空B3单元格并提示信息,然后return 结束函数运行*/
    if (fd.Show() != -1) {
        mysht.Range('B3').Value2 = ''
        return alert('亲,你没选中文件!')
    }
 
    //遍历每一项选中的文件,将文件路径写入数组arr变量
    for (let i = 0; i < fd.SelectedItems.Count; i  ) {
        arr[i] = fd.SelectedItems.Item(i   1)
    }
 
    //将文件路径赋值到B3单元格,用换行符n 拼接每个数组元素,Value2表示二维数组取值,你可以把表格当做一个二维数组理解
    mysht.Range('B3').Value2 = arr.join('n')
}
 
//按钮2点击事件处理函数
function CommandButton2_Click() {
    let mysht = ThisWorkbook.ActiveSheet
        , pth = mysht.Range('B3').Value2.split('n') //获取刚才赋值到B3单元格的文件路径,用js本身的split方法分割成数组
        , data = [] //每个工作簿的数据写入到数组里
 
    //循环打开工作簿,这里用Range.CurrentRegion方法获取以空行与空列的组合为边界的区域,然后将数据写入到arr数组变量
    for (let i = 0; i < pth.length; i  ) {
        let wb = Workbooks.Open(pth[i])
            , sht = wb.ActiveSheet
            , arr = sht.Range('A1').CurrentRegion.Value2
 
        wb.Close() //关闭工作簿
        if (i > 0) arr.shift() //因为只要保留1行表头,其他都要去掉表头才行,所以循环到第二个工作簿开始就要去掉表头
        data = data.concat(arr) //合并数组
    }
 
    //新建一个工作簿
    let wb = Workbooks.Add()
        , wbsht = wb.ActiveSheet
        , fileName = ''
 
    //如果B2单元格指定了文件名就用,如果没有指定就自动生成一个日期格式的文件名
    //ThisWorkbook.Path表示当前代码工作簿的路径
    if (mysht.Range('B2').Value2) {
        fileName = ThisWorkbook.Path   '\'   mysht.Range('B2').Value2   '.xlsx'
    } else {
        fileName = ThisWorkbook.Path   '\newFile'   dateFormat('yyyymmddHHMMSS', new Date)   '.xlsx'
    }
 
    //把合并的数据全部写入到刚刚新建的工作簿里
    wbsht.Range('A1').Resize(data.length, data[0].length).Value2 = data
    wb.SaveAs(fileName) //保存文件
}
 
//上网找的js通用的时间格式化函数:yyyy-mm-dd HH:MM:SS
function dateFormat(fmt, date) {
    let ret
    const opt = {
        'y ': date.getFullYear().toString(),        // 年
        'm ': (date.getMonth()   1).toString(),     // 月
        'd ': date.getDate().toString(),            // 日
        'H ': date.getHours().toString(),           // 时
        'M ': date.getMinutes().toString(),         // 分
        'S ': date.getSeconds().toString()          // 秒
        // 有其他格式化字符需求可以继续添加,必须转化成字符串
    }
    for (let k in opt) {
        ret = new RegExp('('   k   ')').exec(fmt)
        if (ret) {
            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
        }
    }
    return fmt
}

0 人点赞