吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1414|回复: 7
收起左侧

[求助] 求教会写WPS的JS宏的大佬。

[复制链接]
吾爱咖啡 发表于 2024-6-29 00:14
300吾爱币

我使用某软件采集某网站商品,但出了些BUG。
正常应该像图1一样,但导出来的是图2这样的,没办法,只能改成图3这样的。
本想让ChatGPT帮我写个宏,沟通中发现,公司的WPS是个人版,不支持VBA宏,只有JS宏。
反正沟通了几个小时,写出了如下步骤和代码,还是不能用。有没有大佬能帮忙修改一下?为方便实验,我把表格也放下面了。
前置:
我把需处理的xlsm文件和xlsx文件单独放在一个文件夹。
理想需求是像批处理文件一样,双击xlsm文件,就可以自动处理xlsx文件。
如果不行,打开xlsm文件,然后选择宏、运行宏也可以。
手动操作的话,就是先后筛选出“产品1”和“M”,然后依次修改为color 1、color 2、color 3,然后依此重复。然后我按照这个想法和ChatGPT沟通的。
步骤:

    • 读取数据:
      • 检查当前文件夹下是否存在且仅存在一个xlsx文件。如果不存在xlsx文件,或者存在多个xlsx文件,则报错。
      • 打开该xlsx文件,读取C列(产品标题)、J列(颜色)和K列(尺寸)的数据。
    • 数据处理:
      • 遍历每一行数据,检查J列(颜色)是否为“as the picture”。
      • 对于J列为“as the picture”的行,提取相同产品标题和尺寸值的行。
    • 分配颜色:
      • 为每个相同产品标题和尺寸值的组分配不同的颜色标签(如color1、color2、color3等),确保每个颜色标签唯一。
      • 将这些颜色标签替换原来的“as the picture”。
    • 更新数据:
      • 将处理后的数据写回到xlsx文件中,直接覆盖原始数据。


代码:
[JavaScript] 纯文本查看 复制代码
function processXlsxFile() {
    try {
        // 获取当前文件夹下的所有xlsx文件
        var folder = WPS.Application.ActiveWorkbook.Path;
        var files = WPS.Application.FileSearch.Search(folder, "*.xlsx");
        
        // 检查是否存在且仅存在一个xlsx文件
        if (files.length !== 1) {
            throw new Error("必须存在且仅存在一个xlsx文件");
        }
        
        // 打开xlsx文件
        var filePath = files[0];
        var workbook = WPS.Application.Workbooks.Open(filePath);
        var sheet = workbook.Sheets[0];
        
        // 读取数据
        var lastRow = sheet.Cells(sheet.Rows.Count, "C").End(WPS.xlUp).Row;
        var data = [];
        for (var i = 1; i <= lastRow; i++) {
            var title = sheet.Cells(i, "C").Value;
            var color = sheet.Cells(i, "J").Value;
            var size = sheet.Cells(i, "K").Value;
            data.push({ title: title, color: color, size: size, row: i });
        }
        
        // 数据处理
        var colorIndex = 1;
        var colorMap = {};
        for (var i = 0; i < data.length; i++) {
            if (data[i].color === "as the picture") {
                var key = data[i].title + "|" + data[i].size;
                if (!colorMap[key]) {
                    colorMap[key] = "color" + colorIndex++;
                }
                data[i].color = colorMap[key];
            }
        }
        
        // 更新数据
        for (var i = 0; i < data.length; i++) {
            sheet.Cells(data[i].row, "J").Value = data[i].color;
        }
        
        // 不保存和关闭表格
        // workbook.Close(false);
    } catch (e) {
        WPS.Application.StatusBar = "错误: " + e.message;
    }
}

表格:
产品标题颜色尺寸值
产品1as the pictureM
产品1as the pictureL
产品1as the pictureXL
产品1as the pictureM
产品1as the pictureL
产品1as the pictureXL
产品1as the pictureM
产品1as the pictureL
产品1as the pictureXL
产品236
产品238
产品240
产品242
产品3as the picture
产品3as the picture
产品3as the picture
产品3as the picture

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

eenny820 发表于 2024-6-29 00:25
function processXlsxFile() {
    try {
        // 获取当前文件夹下的所有xlsx文件
        var folder = WPS.Application.ActiveWorkbook.Path;
        var files = WPS.Application.FileSearch.Search(folder, "*.xlsx");
         
        // 检查是否存在且仅存在一个xlsx文件
        if (files.length !== 1) {
            throw new Error("必须存在且仅存在一个xlsx文件");
        }
         
        // 打开xlsx文件
        var filePath = files[0];
        var workbook = WPS.Application.Workbooks.Open(filePath);
        var sheet = workbook.Sheets[0];
         
        // 读取数据
        var lastRow = sheet.Cells(sheet.Rows.Count, 3).End(WPS.XlDirection.xlUp).Row; // 获取最后一行
        var data = [];
        for (var i = 1; i <= lastRow; i++) {
            var title = sheet.Cells(i, 3).Value; // C列
            var color = sheet.Cells(i, 10).Value; // J列
            var size = sheet.Cells(i, 11).Value; // K列
            data.push({ title: title, color: color, size: size, row: i });
        }
         
        // 数据处理
        var colorIndex = 1;
        var colorMap = {};
        for (var i = 0; i < data.length; i++) {
            if (data[i].color === "as the picture") {
                var key = data[i].title + "|" + data[i].size;
                if (!colorMap[key]) {
                    colorMap[key] = "color" + colorIndex++;
                }
                data[i].color = colorMap[key];
            }
        }
         
        // 更新数据
        for (var i = 0; i < data.length; i++) {
            sheet.Cells(data[i].row, 10).Value = data[i].color; // 更新J列
        }
         
        // 保存并关闭工作簿
        workbook.Save();
        workbook.Close(false);
    } catch (e) {
        WPS.Application.StatusBar = "错误: " + e.message;
    }
}
yinlin 发表于 2024-6-29 10:57
妮可妮可妮 发表于 2024-6-29 11:22
歪个楼,wps我是装个vba就可以用宏了,你百度wps vba宏下载就有了
 楼主| 吾爱咖啡 发表于 2024-6-29 14:25
eenny820 发表于 2024-6-29 00:25
function processXlsxFile() {
    try {
        // 获取当前文件夹下的所有xlsx文件


报错,Project-Module1:第50行 第8列:引用错误: WPS is not definedat processXlsxFile (Project:50:9),这要怎么处理呢?
eenny820 发表于 2024-6-30 23:16
吾爱咖啡 发表于 2024-6-29 14:25
报错,Project-Module1:第50行 第8列:引用错误: WPS is not definedat processXlsxFile (Project:50:9) ...

function processXlsxFile() {
    try {
        // 获取当前文件夹下的所有xlsx文件
        var folder = wps.EtApplication().ActiveWorkbook.Path;
        var files = wps.FileSystemObject().GetFolder(folder).Files;
         
        // 检查是否存在且仅存在一个xlsx文件
        var xlsxFiles = [];
        for (var fileEnum = new Enumerator(files); !fileEnum.atEnd(); fileEnum.moveNext()) {
            var file = fileEnum.item();
            if (file.Name.match(/\.xlsx$/i)) {
                xlsxFiles.push(file);
            }
        }
        
        if (xlsxFiles.length !== 1) {
            throw new Error("必须存在且仅存在一个xlsx文件");
        }
         
        // 打开xlsx文件
        var filePath = xlsxFiles[0].Path;
        var workbook = wps.EtApplication().Workbooks.Open(filePath);
        var sheet = workbook.Sheets(1);
         
        // 读取数据
        var lastRow = sheet.Cells(sheet.Rows.Count, 3).End(-4162).Row; // 获取最后一行,-4162是xlUp的枚举值
        var data = [];
        for (var i = 1; i <= lastRow; i++) {
            var title = sheet.Cells(i, 3).Value; // C列
            var color = sheet.Cells(i, 10).Value; // J列
            var size = sheet.Cells(i, 11).Value; // K列
            data.push({ title: title, color: color, size: size, row: i });
        }
         
        // 数据处理
        var colorIndex = 1;
        var colorMap = {};
        for (var i = 0; i < data.length; i++) {
            if (data.color === "as the picture") {
                var key = data.title + "|" + data.size;
                if (!colorMap[key]) {
                    colorMap[key] = "color" + colorIndex++;
                }
                data.color = colorMap[key];
            }
        }
         
        // 更新数据
        for (var i = 0; i < data.length; i++) {
            sheet.Cells(data.row, 10).Value = data.color; // 更新J列
        }
         
        // 保存并关闭工作簿
        workbook.Save();
        workbook.Close(false);
    } catch (e) {
        wps.EtApplication().StatusBar = "错误: " + e.message;
    }
}
bu^shan 发表于 2024-7-22 17:40
你这纯粹是采集规则有问题,改一下采集规则就好了,用不着来回折腾
fengshengshou 发表于 2024-9-6 16:16
学习JS宏中,围观
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 17:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表