need script to export all layer names into an excel sheet or text file.
Copy link to clipboard
Copied
are there any scripts to export layer names into an excel sheet or a text file?
Explore related tutorials & articles
Copy link to clipboard
Copied
Hi maninthebox390,
Try this Code..... and Big Thanks to c.pfaffenbichler.
-yajiv
#target photoshop
var theLayers = collectLayers(app.activeDocument, []);
////// function collect all layers //////
function collectLayers (theParent, allLayers) {
if (!allLayers) {var allLayers = new Array}
else {};
var theNumber = theParent.layers.length - 1;
for (var m = theNumber; m >= 0;m--) {
var theLayer = theParent.layers
// apply the function to layersets;
if (theLayer.typename == "ArtLayer") {
OutFoldCSV("~/Desktop",theLayer.name);
}
else {
allLayers = (collectLayers(theLayer, allLayers))
// this line includes the layer groups;
OutFoldCSV("~/Desktop/Layer_Data",theLayer.name);
}
};
//return allLayers
};
function OutFoldCSV(App_Path,Layer_name){
var outfolder = new Folder(App_Path)
if (outfolder.exists == false){
outfolder.create();
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
else{
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
}
Copy link to clipboard
Copied
This is a useful working script. I would like to customize the script by adding the file name to the list of layers in the xml file. Can someone provide guidance to achieve this result.
Copy link to clipboard
Copied
Photoshop is not a file editor and new documents have no associated files till you save one. Do you want the full file path and name and extension?
Copy link to clipboard
Copied
Just the file name and extension in the xml document if possible.
Copy link to clipboard
Copied
Adding the before the first if may work. Id the document is nor saved it will just add the document mane without any extension
OutFoldCSV("~/Desktop",app.activeDocument.name); |
Copy link to clipboard
Copied
OutFoldCSV("~/Desktop",app.activeDocument.name); replaces the layers names in the xls with the document name.
When placed before the first if statement it prints the document name before each layer name in the xls.
Copy link to clipboard
Copied
Before the first if...
#target photoshop
var theLayers = collectLayers(app.activeDocument, []);
////// function collect all layers //////
function collectLayers (theParent, allLayers) {
OutFoldCSV("~/Desktop",app.activeDocument.name); //<---------------------------------------------------------------------------------
if (!allLayers) {var allLayers = new Array}
else {};
var theNumber = theParent.layers.length - 1;
for (var m = theNumber; m >= 0;m--) {
var theLayer = theParent.layers
// apply the function to layersets;
if (theLayer.typename == "ArtLayer") {
OutFoldCSV("~/Desktop",theLayer.name);
}
else {
allLayers = (collectLayers(theLayer, allLayers))
// this line includes the layer groups;
OutFoldCSV("~/Desktop/Layer_Data",theLayer.name);
}
};
//return allLayers
};
function OutFoldCSV(App_Path,Layer_name){
var outfolder = new Folder(App_Path)
if (outfolder.exists == false){
outfolder.create();
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
else{
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
}
Copy link to clipboard
Copied
Placing the function call OutFoldCSV("~/Desktop",app.activeDocument.name); before the first if statement prints the document name in the xls. However if the document has layer groups it prints the document name folder name. Is there a way to by pass the layer groups?
Copy link to clipboard
Copied
I did not see that the function collectLayers was being used recursively. The statement I added needs to be outside that function.
#target photoshop
OutFoldCSV("~/Desktop",app.activeDocument.name);
var theLayers = collectLayers(app.activeDocument, []);
////// function collect all layers //////
function collectLayers (theParent, allLayers) {
if (!allLayers) {var allLayers = new Array}
else {};
var theNumber = theParent.layers.length - 1;
for (var m = theNumber; m >= 0;m--) {
var theLayer = theParent.layers
// apply the function to layersets;
if (theLayer.typename == "ArtLayer") {
OutFoldCSV("~/Desktop",theLayer.name);
}
else {
allLayers = (collectLayers(theLayer, allLayers))
// this line includes the layer groups;
OutFoldCSV("~/Desktop/Layer_Data",theLayer.name);
}
};
//return allLayers
};
function OutFoldCSV(App_Path,Layer_name){
var outfolder = new Folder(App_Path)
if (outfolder.exists == false){
outfolder.create();
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
else{
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
}
Copy link to clipboard
Copied
Yes, this works great. I modified the docPath to save the Layer_Data directory and LayerRef.xls file in the same directory as the source files which the script process.
The final issue to consider is adding the file name to the Layer_Data/LayeRef.xls which lists the layer groups from the source file.
Below is the script with the docPath modifications.
Thanks for your help!
#target photoshop
var thedoc = app.activeDocument;
var docPath = thedoc.path;
OutFoldCSV(docPath,app.activeDocument.name);
var theLayers = collectLayers(app.activeDocument, []);
////// function collect all layers //////
function collectLayers (theParent, allLayers) {
if (!allLayers) {var allLayers = new Array}
else {};
var theNumber = theParent.layers.length - 1;
for (var m = theNumber; m >= 0;m--) {
var theLayer = theParent.layers
// apply the function to layersets;
if (theLayer.typename == "ArtLayer") {
OutFoldCSV(docPath,theLayer.name);
}
else {
allLayers = (collectLayers(theLayer, allLayers))
// this line includes the layer groups;
OutFoldCSV (docPath+"/Layer_Data",theLayer.name)
}
};
//return allLayers
};
function OutFoldCSV(App_Path,Layer_name){
var outfolder = new Folder(App_Path)
if (outfolder.exists == false){
outfolder.create();
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
else{
var myLogFile = new File(outfolder + "/LayerRef.xls");
myLogFile.open("a", undefined, undefined)
myLogFile.write(Layer_name);
myLogFile.write("\n");
}
};
Copy link to clipboard
Copied
Hi Guys, should this still work? I am getting an error message
Error 1302: No such element
Line :13
-> var thenumber = the Parent.layers.length - 1;
Do I take this from the web and save as a 'js' file and run through photoshop?
Copy link to clipboard
Copied
getting the same error
Copy link to clipboard
Copied
I am getting the same error. Were you able to solve it?
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Ok thanks. It worked.
Copy link to clipboard
Copied
Is there another update to the code where i wont get this error? @jazz-y doesnt seem to be active on the forum.
Copy link to clipboard
Copied
Hi, does this work for Illustrator too? thanks
Copy link to clipboard
Copied
I just tried this in illustrator and it works ... kind of ...
For some reason, the script only outputs the first (top) layer and second (nested) layer. I'm not too good at javascript so I don't really know how to get it to output all layers and sub layers.
Copy link to clipboard
Copied
I have a project I am working on that has almost 1400 layers and I need help with a script that will export the layer names to a text file (preferably) or an .xls file.
I tried the code in this link but it doesn't work... may just need some mods. (It was something I found on the web from 2015).
Can anyone help me with this?
need script to export all layer names into an excel sheet or text file.
Thanks in advance!
Scott
Copy link to clipboard
Copied
It's better to ask same question in that topic instead of 'duplicating' existing one.
Copy link to clipboard
Copied
Thanks for the reprimand but still doesn't help. Total novice at this, just trying to get friendly help!
Sorry if I duplicated a question...
Copy link to clipboard
Copied
Unfortunately it's my ACP role to say it when there's need 😉
Copy link to clipboard
Copied
Hard for me to script... Easy for me to write a single line of code for ExifTool:
exiftool -csv -ext .psd -LayerNames 'Mac OS Path to PSD/Input Folder' > 'Mac OS Path to/output file.csv'
(Note: Win OS uses straight double quotes around file paths that contain spaces)
Copy link to clipboard
Copied
Thanks! Will give this a try and assuming it works on PC versionas well. Much appreciated!
Worked great! Thanks again for the help!
Best-
S

