gpt4 book ai didi

javascript - 使用 basil.js 将数据从 CSV 导入到 InDesign

转载 作者:行者123 更新时间:2023-12-01 03:46:05 29 4
gpt4 key购买 nike

我正在尝试使用 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 行,它也会中断。

非常感谢任何帮助。谢谢!

最佳答案

更改嵌套循环中的行数也会破坏我的脚本。我认为你应该稍微清理一下你的代码。

  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;
}
}
<小时/>

我还建议更新到 latest release 。我们修复了一些错误并使 basil.js 文件独立。您的错误指向旧版本,其中文件仍然分开。只需将捆绑文件夹中的 basil.js 替换为下载的 basil.js 即可。

关于javascript - 使用 basil.js 将数据从 CSV 导入到 InDesign,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43566330/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com