求教:如何用AfterEffects脚本将图层信息写入Excel
After Effects脚本写入Excel的实现方法
方法一:跨平台通用(生成CSV文件,可直接用Excel打开)
这种方法不依赖Excel应用,生成的CSV文件能被Excel直接读取,适配Windows和Mac双平台。
- 收集图层信息
遍历目标合成的图层,提取需要的属性(如名称、类型、持续时间等):
var comp = app.project.activeItem; if (!(comp instanceof CompItem)) { alert("请先选中一个合成!"); exit(); } var layerData = []; // 添加表头 layerData.push(["图层名称", "图层类型", "持续时间(秒)"]); // 遍历图层收集数据 for (var i = 1; i <= comp.numLayers; i++) { var layer = comp.layer(i); var layerName = layer.name; var layerType = layer instanceof AVLayer ? "视频/音频层" : layer instanceof ShapeLayer ? "形状层" : layer instanceof TextLayer ? "文本层" : "其他类型"; var duration = layer.outPoint - layer.inPoint; duration = duration.toFixed(2); // 保留两位小数 layerData.push([layerName, layerType, duration]); }
- 生成CSV格式字符串
将收集到的数组转换为CSV格式,自动处理包含逗号或引号的内容:
function arrayToCSV(arr) { return arr.map(row => { return row.map(cell => { // 若单元格内容含逗号或引号,用双引号包裹并转义内部引号 if (typeof cell === "string" && (cell.includes(",") || cell.includes('"'))) { return '"' + cell.replace(/"/g, '""') + '"'; } return cell; }).join(","); }).join("\n"); } var csvContent = arrayToCSV(layerData);
- 写入本地文件
用AE原生File对象保存CSV文件到桌面:
var saveFile = new File(Folder.desktop + "/图层信息.csv"); saveFile.open("w", "TEXT", "UTF-8"); saveFile.write(csvContent); saveFile.close(); alert("CSV文件已保存到桌面!");
方法二:Windows平台直接操控Excel(ActiveX)
Windows下可通过ActiveX直接调用Excel应用,实时写入数据到表格:
var comp = app.project.activeItem; if (!(comp instanceof CompItem)) { alert("请先选中一个合成!"); exit(); } // 创建Excel实例 var excel = new ActiveXObject("Excel.Application"); excel.Visible = true; // 显示Excel窗口 var workbook = excel.Workbooks.Add(); var worksheet = workbook.Worksheets(1); // 写入表头 worksheet.Cells(1, 1).Value = "图层名称"; worksheet.Cells(1, 2).Value = "图层类型"; worksheet.Cells(1, 3).Value = "持续时间(秒)"; // 写入图层数据 for (var i = 1; i <= comp.numLayers; i++) { var layer = comp.layer(i); var row = i + 1; // 从第二行开始写入数据 worksheet.Cells(row, 1).Value = layer.name; worksheet.Cells(row, 2).Value = layer instanceof AVLayer ? "视频/音频层" : layer instanceof ShapeLayer ? "形状层" : layer instanceof TextLayer ? "文本层" : "其他类型"; worksheet.Cells(row, 3).Value = (layer.outPoint - layer.inPoint).toFixed(2); } // 自动调整列宽 worksheet.Columns.AutoFit(); // 保存文件到桌面 var savePath = Folder.desktop + "/图层信息.xlsx"; workbook.SaveAs(savePath); alert("Excel文件已保存到桌面!");
方法三:Mac平台操控Excel/Numbers(AppleScript)
Mac下可通过执行AppleScript来操控Excel或Numbers,实现数据导入:
var comp = app.project.activeItem; if (!(comp instanceof CompItem)) { alert("请先选中一个合成!"); exit(); } // 收集图层数据并转成适合AppleScript的字符串格式 var dataStr = "图层名称,图层类型,持续时间(秒)\n"; for (var i = 1; i <= comp.numLayers; i++) { var layer = comp.layer(i); var layerName = layer.name.replace(/"/g, '\\"'); // 转义双引号避免脚本报错 var layerType = layer instanceof AVLayer ? "视频/音频层" : layer instanceof ShapeLayer ? "形状层" : layer instanceof TextLayer ? "文本层" : "其他类型"; var duration = (layer.outPoint - layer.inPoint).toFixed(2); dataStr += `"${layerName}",${layerType},${duration}\n`; } // 构造AppleScript代码,生成CSV并导入Numbers var scriptStr = ` set csvData to "${dataStr}" set savePath to (path to desktop as text) & "图层信息.csv" set fileRef to open for access file savePath with write permission write csvData to fileRef as «class utf8» close access fileRef tell application "Numbers" activate open file savePath end tell `; // 执行AppleScript app.doScript(scriptStr, ScriptLanguage.APPLESCRIPT_LANGUAGE); alert("数据已导入Numbers!");
内容的提问来源于stack exchange,提问作者user52885
相关产品推荐
相关产品推荐

