[WPS-JS02]WPS JS将多个Excel文件合并成一个工作表.txt
//按钮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
}
返回视频教程