2016-08-16 1 views
-1

J'aimerais lire une feuille de calcul google publiée (publiquement) en tant que csv et utiliser les données qu'elle contient pour modifier un fichier psd (où une couche de texte nommée «num» est remplacée par le contenu d'une colonne dans la feuille de calcul). Voici la feuille de calcul: https://docs.google.com/spreadsheets/d/16v0CAFL7iBIRGYbQfzmRJNUaI3xytXmkkmloa41BJ5o/pub?gid=0&single=true&output=csvImporter des données de la feuille de calcul google à utiliser avec ExtendScript Toolkit

Et voici mon code:

#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); 

} 

Comment accomplir cela en javascript dans les ExtendScript?

+1

Quelle est votre question? Comment lire csv? – fabianmoronzirfas

Répondre

2

lecture csv dans ExtendScript

Ce scipt asumes que le data.csv est à côté des index.js. Le contenu de data.csv est:

| 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 | 

Ceci est l'approche rapide et sale. Pour les données que vous ne savez pas comment il est formulé, je suggère d'utiliser une bibliothèque comme github.com/Rich-Harris/BabyParse. Avec des ajustements mineurs, cela fonctionne bien dans 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 

La sortie est:

[({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

merci! le cœur de votre code fonctionne bien, mais j'ai aussi besoin de télécharger (chaque fois que le code est exécuté) le csv de la feuille de calcul google partagé. Puis-je simplement changer le "var file =" pour ajouter l'url du csv? – Rodolphe

+1

'File' n'accepte pas une URL dont vous aurez besoin pour le télécharger différemment. Vous pouvez utiliser un panneau CEP ou un plugin générateur photoshop. Ou même essayer d'appeler une commande système comme curl pour télécharger votre fichier. – fabianmoronzirfas