Welcome Dialog

Welcome to the Community!

We have a brand new look! Take a tour with us and explore the latest updates on Adobe Support Community.


Script for exporting LAB Color swatch values to Excel (CSV)

Enthusiast ,
Oct 15, 2019 Oct 15, 2019

Copy link to clipboard

Copied

Not sure this landed on the right place. Where is the scripting part of the forum? Was it deleted? All that work...

 

(This post is not a question.)

Below you will find a sample script for exporting LAB color swatches from InDesign. InDesign seem to have difficulties keeping thousands of swatches in its palette, so take care. A variant of this script made for Illustrator or Photoshop would probably have been a better idea.

 

 

 

/*
	Script for exporting LAB colours from InDesign Swatches. 
	Number, Name, L, A, and B columns semi colon separated.
	By Andreas Jansson, Code Combinations AB, Sweden, 2019.
	
	Description:
	First import a library of Pantone Colours so that they are present in the swatches palette of InDesign (you can export swatches from Photoshop, to an ASE file that is importable in InDesign).
	Then alter the path below to a folder of your choice and run this script with InDesign.
	The resulting file, I pasted into Excel.
*/

var result = '';
for (var i = 0; i <= app.swatches.length-1; i++){	
	var currentSwatch = app.swatches[i];
	if (currentSwatch.hasOwnProperty('space') && currentSwatch.space == ColorSpace.LAB){
		var val = currentSwatch.colorValue;
		result += i.toString() + ';' + currentSwatch.name + ';' + val[0] + ';' + val[1] + ';' + val[2] + '\r\n';
	}
}
result = 'N:o;Name;Lightness;A;B' + '\r\n' + result;
var outPath = 'C:/temp/test/out.txt';  // Put an existing path here
alert(writeToFile (result, outPath));

function writeToFile(fileContents, destinationFilePath){
	var myFileOut = new File(destinationFilePath);
	myFileOut.open('w');
	// myFileOut.encoding = 'UTF-8';
	myFileOut.write(fileContents);
	myFileOut.close();
	return new File(destinationFilePath).fsName;
}

 

 

 

 

TOPICS
Scripting

Views

339

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Nov 10, 2021 Nov 10, 2021

Copy link to clipboard

Copied

Good Day Everyone, 

 

I am a new Adobe Photoshop and InDesign user and am looking for some help or direction. I need to import a color library using the color name and L a b values for a set of colors into my  inDesign Swatch Library. Does anyone know of an available script to do this? I saw a post from Mark that had the formatted spreadsheet to do this and it had the MacOS script but not the PC javascript. The requestor was using a Mac. If anyone could point me in the right direction or suggest a script to do this on my PC it would be greatly appreciated. My data is in the following format in excel.  

 

Thank you! 

 

NAMEL*a*b*
SWATCH 150.00-30.0020.00
SWATCH 253.00-32.0021.00
SWATCH 356.00-34.0022.00
SWATCH 459.00-36.0023.00

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Nov 10, 2021 Nov 10, 2021

Copy link to clipboard

Copied

Hi @ColorDyeingMan2021 Save your csv named LabColors.csv to the desktop, and try this:

 

var path = File(Folder.desktop + "/LabColors.csv");
var cTable = readFile(path);
//split the table into an array of rows
var r = cTable.split("\n");

var doc = app.activeDocument;
var c, ns;

for (var i = 1; i < r.length-1; i++){
    //split the row into an array of cells
    c = r[i].split(",");
    ns = makeSwatch(doc, c[0]); 
    ns.model = ColorModel.PROCESS;
    ns.space = ColorSpace.LAB;
    ns.colorValue = [Number(c[1]),Number(c[2]),Number(c[3])]
};   


/**
* Read a text file 
* @param the file’s path 
* @return the file’s contents 
* 
*/

function readFile(p) {
	var f = new File(p);
	f.open("r");  
	var x = f.read();  
	f.close();
	return x; 
}


/**
* Makes a new swatch 
* @param the document to add the swatch to 
* @param swatch name 
* @return the new or existingswatch 
* 
*/
function makeSwatch(d, n){
    var s;
    try {
        d.colors.add({name:n});
    }catch(e) {
        s = d.colors.itemByName(n);
    } 
    return d.colors.itemByName(n);
}

 

Also, if the color channels are evenly incremented you wouldn’t need to load a spreadsheet—you should be able to increment the values in a loop

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Nov 10, 2021 Nov 10, 2021

Copy link to clipboard

Copied

Hi rob day, 

 

Thank you so much. I am not a programmer but was able to get the jsx file created (after a couple of tries and an error) and added as a script in InDesign and to try on the stored csv. Success!!! The colors and data values look great. I really appreciate this. One more question. If I wanted to store the swatches to a specific swatch library can /could I do that using this script? Or is this something I would do post importing? I want to be able to save a color library and share as an ASE file eventually.  I will look for more details on managing libraries and see if I can figure that out.

 

Again, thank you.This is gonna save me hours of time.  

 

ColorDyeingMan2021_1-1636572951925.png

 

 

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Nov 10, 2021 Nov 10, 2021

Copy link to clipboard

Copied

Unless something has changed with the new ID version, Libraries are not scriptable, and I don’t think there is a way to add an .ase file to a Library, but it’s easy to select the swaches and save an .ASE after you run the script.

 

You could make a matrix of rectangles filled with the Lab colors, and add that to the Library as a Graphic. If the user dragged the matrix graphic on the a document, the fill colors would be added to the Swatches panel, but an .ase seems simpler.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Nov 10, 2021 Nov 10, 2021

Copy link to clipboard

Copied

Thank you for the advice. The graphic is an interesting idea.  

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Nov 10, 2021 Nov 10, 2021

Copy link to clipboard

Copied

This version creates a group of rectangles in the upper left corner of page 1, with the new Lab swatches as fills. If you drag the group into the CC Library, make a new document, and drag the library group on to the new doc the swatches should get added:

 

 

 

var path = File(Folder.desktop + "/LabColors.csv");
var cTable = readFile(path);
//split the table into an array of rows
var r = cTable.split("\n");

var doc = app.activeDocument;
app.scriptPreferences.measurementUnit = MeasurementUnits.INCHES
var sArray = []
var c, ns, sr;

for (var i = 1; i < r.length; i++){
    //split the row into an array of cells
    c = r[i].split(",");
    try {
       ns = makeSwatch(doc, c[0]); 
       ns.model = ColorModel.PROCESS;
       ns.space = ColorSpace.LAB;
       ns.colorValue = [Number(c[1]),Number(c[2]),Number(c[3])]
    }catch(e) {}  

    sr = doc.pages[0].rectangles.add({geometricBounds:[0, 0, 2, 2], fillColor:ns.name});
    sArray.push(sr)
};   

//makes a group of rectangles with the new swatch fills
var sGroup = doc.pages[0].groups.add(sArray);
sGroup.name = "LabSwatches"


/**
* Read a text file 
*  the file’s path 
*  the file’s contents 
* 
*/

function readFile(p) {
	var f = new File(p);
	f.open("r");  
	var x = f.read();  
	f.close();
	return x; 
}


/**
* Makes a new swatch 
*  the document to add the swatch to 
*  swatch name 
*  the new or existingswatch 
* 
*/
function makeSwatch(d, n){
    var s;
    try {
        d.colors.add({name:n});
    }catch(e) {
        s = d.colors.itemByName(n);
    } 
    return d.colors.itemByName(n);
}

 

 

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Nov 10, 2021 Nov 10, 2021

Copy link to clipboard

Copied

Hi,
creating ase files via script is possible

app.saveSwatches()
https://www.indesignjs.de/extendscriptAPI/indesign-latest/#Application.html#d1e42253__d1e48249

But CC libraries not, true. The old-style library files on the other hand would be...

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Community Professional ,
Nov 11, 2021 Nov 11, 2021

Copy link to clipboard

Copied

LATEST

Thanks Jens, I was assuming @ColorDyeingMan2021 was looking for a way to distribute .ase files via a CCLibraries invite, but I don’t see a way to add .ase files to a CC or regular Library via scripting or the UI.

 

Another option might be to save the .ase files to a folder inside of the local Creative Cloud Files folder and share the ase folder with a group of users. In that case the .ase files would sync to the group’s computers as they are created.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines