我使用某软件采集某网站商品,但出了些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;
}
}
表格:
产品标题 | 颜色 | 尺寸值 | 产品1 | as the picture | M | 产品1 | as the picture | L | 产品1 | as the picture | XL | 产品1 | as the picture | M | 产品1 | as the picture | L | 产品1 | as the picture | XL | 产品1 | as the picture | M | 产品1 | as the picture | L | 产品1 | as the picture | XL | 产品2 | 黑 | 36 | 产品2 | 黑 | 38 | 产品2 | 黑 | 40 | 产品2 | 黑 | 42 | 产品3 | as the picture | 大 | 产品3 | as the picture | 小 | 产品3 | as the picture | 大 | 产品3 | as the picture | 小 |
|