簡體   English   中英

使用basil.js將數據從CSV導入到InDesign

[英]Importing Data to InDesign from a CSV with basil.js

我正在嘗試使用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() {

我的腳本基於“ 使用CSV文件”演示程序,但我已對其進行了修改,因此每行僅顯示一行數據,並且每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行的數據集- 這是一個示例數據集 ,但是當行數不同時,它將返回錯誤。 即使在這種情況下,如果我要更改for循環,那么每頁顯示5行也會中斷。

任何幫助深表感謝。 謝謝!

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

  1. 您正在宣告var i = 0; 在循環之前,然后在i循環內。
  2. 您正在y中增加i
  3. 那么y循環中的if (i > data.length) break也是一件事情。 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;
  }
}

我也建議更新到最新版本 我們修復了一些錯誤,並使basil.js文件自成一體。 您的錯誤指向一個舊版本,其中文件仍然分開。 只需將bundle文件夾中的basil.js替換為下載中的一個,就可以了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM