2016-08-16 5 views
-1

Я использую Adobe ExtendScript Toolkit для автоматизации создания некоторых образов фотошоп. Я хотел бы прочитать электронную таблицу google, опубликованную (публично) как csv, и использовать данные, которые она содержит для редактирования файла psd (где некоторый текстовый слой с именем «num» заменяется содержимым столбца в электронной таблице). Вот таблица: https://docs.google.com/spreadsheets/d/16v0CAFL7iBIRGYbQfzmRJNUaI3xytXmkkmloa41BJ5o/pub?gid=0&single=true&output=csvИмпорт данных из электронной таблицы google для использования с ExtendScript Toolkit

И вот мой код:

#target photoshop 

**import google spreadsheet here as a csv, and parse** 

for (i = 1; i < num_of_rows_in_csv_file; i++) { 

    var fileRef = new File('/file.psd') 
    var doc = app.open(fileRef) 
    var layer = doc.layers.getByName('num'); 

    if (layer.kind == LayerKind.TEXT) layer.textItem.contents = content_of_column_A_at_row_i; //replace text by content of cell 

    var opts, file; 
    opts = new ExportOptionsSaveForWeb(); 
    opts.format = SaveDocumentType.PNG; 
    opts.PNG8 = false; 
    opts.quality = 100; 

    pngFile = new File("/file_" + i + ".png"); 
app.activeDocument.exportDocument(pngFile, ExportType.SAVEFORWEB, opts); 

} 

Как сделать это в JavaScript в ExtendScript?

+1

Что ваш вопрос? Как читать csv? – fabianmoronzirfas

ответ

2

чтения CSV в ExtendScript

Это scipt asumes что data.csv находится рядом с index.js. Содержание данных.csv:

| num | name | w | f | h | 
| :--: | :--: | :--: | :--: | :--: | 
| 1 | A | 1 | 4 | 2 | 
| 2 | B | 2 | 3 | 1 | 
| 3 | C | 3 | 2 | 4 | 
| 4 | D | 4 | 1 | 3 | 
| 5 | E | 3 | 2 | 2 | 
| 6 | F | 2 | 3 | 1 | 

Это быстрый и грязный подход. Для данных, которые вы не знаете, как они формируются, я предлагаю использовать библиотеку, такую ​​как github.com/Rich-Harris/BabyParse. При незначительных настройках он отлично работает в ExtendScript.

/* global File $ */ 
/* eslint-disable new-cap */ 
// tested on osx 
var file = File(File($.fileName).parent.fsName + '/data.csv'); // get the file 
file.encoding = 'UTF8'; // set some encoding 
file.lineFeed = 'Macintosh'; // set the linefeeds 
file.open('r',undefined,undefined); // read the file 
var content = file.read(); // get the text in it 
file.close(); // close it again 
var lines = content.split('\n');// split the lines (windows should be '\r') 
var data = [];// will hold the data 
var keys = lines[0].split(','); // get the heads 
// loop the data 
for(var i = 1; i < lines.length;i++){ 
    var obj = {}; // temp object 
    var cells = lines[i].split(',');// get the cells 
    // assign them to the heads 
    obj[keys[0]] = cells[0]; 
    obj[keys[1]] = cells[1]; 
    obj[keys[2]] = cells[2]; 
    obj[keys[3]] = cells[3]; 
    obj[keys[4]] = cells[4]; 
    data.push(obj); // add to data 
    } 

$.writeln(data.toSource()); // show what we got 

Выход:

[({num:"1", name:"A", w:"1", f:"4", h:"2"}), ({num:"2", name:"B", w:"2", f:"3", h:"1"}), ({num:"3", name:"C", w:"3", f:"2", h:"4"}), ({num:"4", name:"D", w:"4", f:"1", h:"3"}), ({num:"5", name:"E", w:"3", f:"2", h:"2"}), ({num:"6", name:"F", w:"2", f:"3", h:"1"})] 
+0

спасибо! ядро вашего кода работает хорошо, но мне также нужно загрузить (каждый раз, когда код запускается) csv из общей электронной таблицы google. Могу ли я просто изменить «var file =», чтобы добавить URL-адрес csv? – Rodolphe

+1

'File' не принимает URL-адрес, который вам нужно будет загрузить по-другому. Вы можете использовать панель CEP или плагин генератора фотошоп. Или даже попробуйте вызвать системную команду, например curl, чтобы загрузить файл. – fabianmoronzirfas