2017-04-23 51 views
0

我試圖使用basil.js將CSV導入到InDesign文檔中。然而,根據該數據集,我往往會得到一個錯誤:使用basil.js從CSV導入數據到InDesign

Javascript Error! 

Error Number: 21 
Error String: undefined object is not an object 

Engine: main 
File: /Users/... 
includes/core.js 
Line: 137 Source: 
app.doScript(function() { 

我的劇本是根據本Working with CSV files演示除了我已經修改了它的數據所以只有一個行每行提出,並將其插入一個每4行新一頁。這是我的腳本:

#includepath "~/Documents/;%USERPROFILE%Documents"; 
#include "basiljs/bundle/basil.js"; 

function draw() { 
    // load & convert 
    var data = b.CSV.decode(b.loadString("donorsopenS.csv")); 
    for (var i = 0; i < data.length; i++) { 
    data[i].Zip = parseInt(data[i].Zip); 
    }; 

    // text settings 
    b.textSize(12); 
    b.textFont('Helvetica'); 
    b.textAlign(Justification.LEFT_ALIGN); 
    b.units(b.MM); 

    var i = 0; 
    var verticalUnitSize = 20; 
    var horizontalUnitSize = 50; 

    for (var i = 0; i < data.length; i++) { 

    for (var y = 0; y < 4; y++) { 
     var posX = horizontalUnitSize; 
     var posY = y*(verticalUnitSize); 

     var Contributor = data[i].Contributor; 
     var PositionBoard = data[i].PositionBoard; 
     var Amount = data[i].Amount; 
     var Recipient = data[i].Recipient; 

     b.text(Contributor, 0, posY,50,20); 
     b.text(PositionBoard, posX, posY,50,20); 
     b.text(Amount, posX*2, posY,50,20); 
     b.text(Recipient, posX*3, posY,50,20); 

     // stop drawing if no more rows are available 
     if (i > data.length) break; 

     i++; 
    }; 

    // add new page 
    if (i < data.length-1) { 
     b.addPage(); 
    } 

    } 

} 

b.go(); 

它正常工作與10行的數據集 - here is a sample dataset,但是當它是一個不同的行數將返回錯誤。即使在這種情況下,如果我要更改for循環,以便每頁顯示5行,它就會中斷。

任何幫助,非常感謝。謝謝!

回答

2

更改嵌套循環中的行數也會爲我破壞腳本。我認爲你應該清理一下你的代碼。

  1. 您正在循環之前聲明var i = 0;,然後在i循環內聲明。您在y內遞增i
  2. 然後如果(i > data.length) breaky循環也是一回事。當i循環到達data.length的末尾時,它最終會停止。

您正在改變嵌入式環路中一個環路的條件。


我建議有一個循環的行和一個嵌套的列。 y是事先聲明的變量,將在外循環中增加。如果y大於b.height,則添加一個新頁面。在列的內循環中,將內容添加到文本框中,並增加x在第一個循環內聲明的內容。

這可能是這樣的:

var y = 0; 
// width and height for the textbox 
var w = 10; 
var h = 10; 
for(var row = 0; row < data.length; row++) { 
    var x = 0; 
    for(var column in data[row]) { 
    // we need this check if we use 
    // for var key in object loops 
    if(data[row].hasOwnProperty(column)){ 
     b.println(data[row][column]); // just take a look 
     // add some text boxes here 
     // b.text(data[row][column], x, y, w, h); 
     x++; // or x = x + w; 
    } 
    } 
    y++; // y = y + h; 
    if(y >= b.height){ 
    b.addPage(); 
    y = 0; 
    } 
} 

此外,我建議您更新到latest release。我們修復了一些bug,並使basil.js文件自成一體。你的錯誤指向一箇舊版本,其中的文件仍然是分開的。只需將bundle文件夾中的basil.js替換爲下載文件夾中的basil.js即可。

+0

感謝您的及時響應!這解決了我的問題。導入1800行左右的數據集最後導致我的InDesign崩潰:P – christopher

+0

您是否嘗試將其轉換爲JSON並直接包含它? https://www.npmjs.com/package/babyparse? – fabianmoronzirfas