【发布时间】:2015-08-27 18:47:48
【问题描述】:
我有下面的代码,它采用第一列并根据日期将其打印在谷歌文档中。不幸的是,这会重复并打印该行三次。
function saveAsDOC() {
var fileName = "Announcements Test File";
var doc = DocumentApp.create(fileName);
// Get the range in the spreadsheet
var ws = SpreadsheetApp.getActiveSpreadsheet().getDataRange();
try {
var data = ws.getValues();
// Announcements loop
if (data.length > 1) { // Make sure data is longer than one character
for (var row = 1; row < data.length; row++) {
if(new Date(data[row][2]) <= new Date()) { // Check the date
for (var col = 1; col < data[row].length; col++) {
if(data[row][col]!=""){ // Make sure the data is not empty
doc.appendParagraph(data[row][1]); // Append announcement
doc.appendParagraph("") // Line break between announcements
}
}
}
}
}
}
catch(err) {
Logger.log(err);
Browser.msgBox(err);
}
}
源数据位于 Google 电子表格中,包含“公告”、“开始日期”和“结束日期”三列。我想为“今天”编制一份公告列表(即今天的日期介于开始日期和结束日期之间,含)。
A B C
1 | Announcement | Start date | End date |
2 | You SHOULD see this. | 1 Jan 2015 | 31 Dec 2015 |
3 | You SHOULD NOT see this. | 1 Jan 2015 | 1 Jan 2015 |
4 | You SHOULD ALSO see this. | 1 Jan 2015 | 31 Dec 2015 |
5 | You SHOULD NOT see this. | 31 Dec 2015 | 31 Dec 2015 |
我的代码跳过了不应该看到的公告,这很好。但它会多次打印预期的公告。我该如何解决?
【问题讨论】:
-
您的问题不清楚,您需要edit 提供更多信息,并将代码缩减为minimal reproducible example。你的数据是什么样的? (产生您的问题的示例会有所帮助。)创建文档与您面临的问题无关,将其取出,并使用更简单的方法来跟踪内部循环的执行,例如日志。同样,不需要任何 UI 部分 (
toast)。如果您使 核心 问题易于重现,您将获得更好的答案......并且可能自己解决! -
我已经更新了我的帖子。我很清楚如何发布问题,不幸的是我一直这样做却没有得到任何答案。
-
试试这个。选择电子表格中的任何行,该行具有当前在文档中显示 3 次的公告。在行的末尾添加另一个单元格,其中包含任何内容。然后运行脚本。您现在应该会看到该公告的 4 份副本。
-
我已经这样做了,它打印了 4 份。我假设行
for (var row = 1; row < data.length; row++) {与它有关? -
部分,是的 - 循环遍历行中的所有单元格。结合检查单元格是否为空的比较,您最终将为每个非空单元格打印 something 。而且那东西总是相同的东西,因为你附加了
data[row][1]。
标签: javascript google-apps-script google-sheets google-docs