如何在Photoshop的JS脚本中读取.xlsx数据并推入数组
解决方案
Photoshop的ExtendScript环境无法直接调用Node.js,我们通过读取CSV文件的方式实现Excel数据匹配(将Excel另存为CSV更易处理,且跨平台通用),具体步骤如下:
1. 预处理Excel文件
将你的.xlsx文件另存为design_templates.csv,确保格式满足:
- A列内容为设计名称(和PNG文件名完全一致,不含后缀)
- B列为对应模板的完整路径;若一个设计对应多个模板,重复设计名,每行对应一个模板路径
- 可选添加表头(如
DesignName,TemplatePath),后续脚本可跳过表头行
2. 修改Photoshop脚本
替换原手动定义模板的代码,改为读取CSV并自动匹配模板,完整代码如下:
#target photoshop // 读取CSV并构建「设计名-模板路径数组」的映射 function readCSV(csvPath) { var csvFile = new File(csvPath); if (!csvFile.exists) { alert("CSV文件不存在,请检查路径"); return {}; } csvFile.open('r'); var designMap = {}; var lineContent; // 若CSV有表头,保留此句跳过第一行;无表头则注释掉 csvFile.readln(); while ((lineContent = csvFile.readln()) !== null) { var lineParts = lineContent.split(','); if (lineParts.length >= 2) { var designName = lineParts[0].trim(); var templatePath = lineParts[1].trim(); // 同一设计名的模板路径存入数组 if (!designMap[designName]) { designMap[designName] = []; } designMap[designName].push(templatePath); } } csvFile.close(); return designMap; } // 替换为你的CSV文件实际路径(Windows用\\或/,macOS用/) var csvFilePath = "/your/full/path/design_templates.csv"; var templateMap = readCSV(csvFilePath); // 获取当前打开的PNG文件名(移除后缀) var currentDoc = app.documents[0]; var targetDesignName = currentDoc.name.replace(/\.[^/.]+$/, ""); // 匹配得到对应模板数组,无匹配则为空数组 var excelArray = templateMap[targetDesignName] || []; // 执行模板处理逻辑 for (var i = 0; i < excelArray.length; i++){ var templateFile = new File(excelArray[i]); if (!templateFile.exists) { alert(`模板文件不存在:${excelArray[i]}`); continue; } app.open(templateFile); if (currentDoc.name.charAt(0) === "W"){ app.doAction("WGARMENTS-ArtPlace", "ProductActions.ATN"); } else { app.doAction("GARMENTS-ArtPlace", "ProductActions.ATN"); } }
关键说明
readCSV函数负责解析CSV并构建映射关系,确保一个设计名对应所有关联模板targetDesignName = currentDoc.name.replace(/\.[^/.]+$/, "")用来提取不带后缀的文件名,保证和Excel A列内容匹配- 需根据CSV是否有表头,决定是否保留
csvFile.readln()语句
内容的提问来源于stack exchange,提问作者MKriegerTW
相关产品推荐
相关产品推荐

