前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPS JS宏代码(更新2023.06.12)

WPS JS宏代码(更新2023.06.12)

原创
作者头像
逗号技巧
修改2023-07-28 16:32:43
8.3K0
修改2023-07-28 16:32:43
举报
文章被收录于专栏:来个代码

[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
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [001]WPS JS将工作表拆分成单独的文件
  • [002]WPS JS将多个Excel文件合并成一个工作表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档