[英]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行也會中斷。
任何幫助深表感謝。 謝謝!
更改嵌套循環中的行數也確實會破壞腳本。 我認為您應該清理一下代碼。
var i = 0;
在循環之前,然后在i
循環內。 y
中增加i
。 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.