Smartsheet ドキュメントの列のすべての項目を印刷することになっている、hubot 用のスクリプトを作成しています。残念ながら、セルは主に行に格納されるため、列のすべての要素を単純に出力することはできません。API でセルを参照するには、https://api.smartsheet.com/2.0/sheets/ [SHEET-ID]/rows/[ROW-ID]/columns/[COLUMN- ID] . 行と列の ID は、単にシート内での配置ではなく、一意の複数桁の識別子を持っています。
列の項目を印刷する私の計画は、特定のドキュメントからすべての行 ID を配列 rowNums に収集することでした。必要な列 ID を取得し (目的は名前のリストを出力することなので、'Name' というタイトルの列を探しています)、それを colNum に格納します。次に、rowNums の各要素に対して、rowNums と colNum の要素を使用してセルへの HTTP GET 要求を作成し、それをユーザーに出力する配列に格納します。
コードの後半部分は問題ないように見えますが、Smartsheet ドキュメントから 'rows' 配列の要素を参照するだけで問題が発生します。以下のコードは、CoffeeScript (スクリプトが含まれている必要があります) と JavaScript ('coffee --c' を使用してコンパイルされているため、少し面倒です) の両方にあります。私は何を間違っていますか?
コーヒースクリプト
robot.http(url)
.headers(Authorization: auth, Accept: 'application/json')
.get() (err, res, body) ->
data = JSON.parse(body)
if res.statusCode isnt 200
msg.send "An error occurred when processing your request:
#{res.statusCode}. The list of error codes can be found at
http://bit.ly/ss-errors. Talk to the nearest code nerd for
assistance."
else
# Populate 'rows' with all rowId's from default sheet.
rowNums = (row.id for row in data.rows)
# Parses 'columns' for column titled 'Name'. Stops when it finds it.
for column in data.columns
if column.title.toLowerCase() == "name"
colNum = column.id
break
else
return undefined
ジャバスクリプト
robot.http(url).headers({
Authorization: auth,
Accept: 'application/json'
}).get()(function(err, res, body) {
var column, data, i, len, ref, row;
data = JSON.parse(body);
if (res.statusCode !== 200) {
return msg.send("An error occurred when processing your request: " + res.statusCode + ". The list of error codes can be found at http://bit.ly/ss-errors. Talk to the nearest code nerd for assistance.");
} else {
rowNums = (function() {
var i, len, ref, results;
ref = data.rows;
results = [];
for (i = 0, len = ref.length; i < len; i++) {
row = ref[i];
results.push(row.id);
}
return results;
})();
ref = data.columns;
for (i = 0, len = ref.length; i < len; i++) {
column = ref[i];
if (column.title.toLowerCase() === "name") {
colNum = column.id;
break;
} else {
return void 0;
}
}
}
});
また、CoffeeScript から 'return void 0' 行を削除するにはどうすればよいですか? 「else > return undefined」行があってもなくてもそこにあります。