我想自动化我一直在为每周会议手动创建的 Google 表格,该表格显示过去 15 天内未更新的项目中的问题。运行脚本时,尽管没有出现错误,但没有任何内容写入 Google 表格。
function getJiraIssues() {
var username = "<my_jira_username>";
var apiToken = "<my_jira_password>";
var jqlQuery = "project=xyz AND issuetype = Bug)";
var sheet = SpreadsheetApp.getActiveSheet();
var headers = sheet.getRange(1, 1, 1, 8).getValues()[0];
var options = {
'method': 'get',
'contentType': 'application/json',
'headers': {
'Authorization': 'Basic ' + Utilities.base64Encode(username + ':' + apiToken)
},
'muteHttpExceptions': true
};
var url = 'https://<my_jira_instance>.jira.com/rest/api/2/search?jql=' + encodeURIComponent(jqlQuery);
var response = UrlFetchApp.fetch(url, options);
if (response.getResponseCode() === 200) {
var data = JSON.parse(response.getContentText());
var issues = data.issues.map(function(issue) {
var issueData = {};
issueData['Issue Summary'] = issue.fields.summary;
issueData['Assignee'] = issue.fields.assignee ? issue.fields.assignee.displayName : '';
issueData['Issue Key'] = issue.key;
issueData['Issue Type'] = issue.fields.issuetype.name;
issueData['Component/s'] = issue.fields.components.map(function(component) {
return component.name;
}).join(', ');
issueData['Status'] = issue.fields.status.name;
issueData['Created'] = issue.fields.created;
issueData['Updated'] = issue.fields.updated;
return issueData;
});
var row = sheet.getLastRow() + 1;
var numRows = issues.length;
var numCols = headers.length;
sheet.getRange(row, 1, numRows, numCols).setValues(issues.map(function(issue) {
return headers.map(function(header) {
return issue[header];
});
}));
}
}
我已经 参考了其他项目 寻求做类似的事情,所以我相信我正在尝试做的事情最终是可能的,但仍然在某个地方遇到了障碍。并且没有错误地尝试追查,我不太确定是什么坏了。
这是你的代码吗?代码本身有效,但它希望您的工作表中已经有标题。如果您没有标题,那么它只会返回一个充满
undefined
值的数组,这不会将任何数据写入工作表。关键是这部分:
sheet.getRange(row, 1, numRows, numCols).setValues(issues.map(function(issue) {
return headers.map(function(header) {
return issue[header];
});
}));
这将获取第 1 行中每一列的名称(存储在
headers
变量中),并尝试在 Jira 返回的 issue
对象数组的每一项中找到其对应的值。尝试添加一个标题行,其值对应于 issueData
键,如下所示:
我制作了一个具有像
issueData
结构的测试对象,它对我有用。我实际上并没有连接到 Jira,但如果它仍然不起作用,请尝试记录您的 response.getContentText()
以查看它是否确实有数据,因为它可能会返回 200
并且仍然不会返回您期望的对象。让我知道它是否有效。