【发布时间】:2019-10-03 15:19:22
【问题描述】:
我正处于编程的初级到中级状态,我知道的足够多的东西可以拼凑一些可能相当复杂的东西,但也许我没有以最好的方式去做,被难倒了,而且它肯定没有优化.
我已经构建了一个发票生成器,它获取从工作表中输入的数据并将其转换为谷歌文档中的相同模板。我想要一个脚本来获取报价信息,并将行复制到文档中的模板,除非该行是空的,在这种情况下它会跳到下一个。
到目前为止,我已经通过将每个单元格指定为自变量并单独复制它们来实现这一点,无论它们是否填充。
它可以工作,但它似乎不是最有效的解决方案,而且很快就会变得很痛苦,因为我们仍然需要修复生成的报价文档中的一些格式。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sinput = ss.getSheetByName("QUOTE TEMPLATE");
//TO GENERATE DOCUMENT
var templateId = '1jIxHUZAoVd00a9eTZM-ORL0H7qMLfEmyat04l89GNwE';
//devis
var item1 = sinput.getRange("B18").getValues();
var item2 = sinput.getRange("B19").getValues();
var item3 = sinput.getRange("B20").getValues();
var qty1 = sinput.getRange("C18").getValues();
var qty2 = sinput.getRange("C19").getValues();
var qty3 = sinput.getRange("C20").getValues();
var unitprice1 = sinput.getRange("D18").getValues();
var unitprice2 = sinput.getRange("D19").getValues();
var unitprice3 = sinput.getRange("D20").getValues();
var total1 = sinput.getRange("E18:G18").getValues();
var total2 = sinput.getRange("E19:G19").getValues();
var total3 = sinput.getRange("E20:G20").getValues();
//Make a copy of the template file
var documentId = DriveApp.getFileById(templateId).makeCopy().getId();
//Get the document body as a variable
var body = DocumentApp.openById(documentId).getBody();
//All the text to be replaced
body.replaceText('%DESCRIPTION_STRING1%', item1 );
body.replaceText('%DESCRIPTION_STRING2%', item2 );
body.replaceText('%DESCRIPTION_STRING3%', item3 );;
body.replaceText('%Q1%', qty1 );
body.replaceText('%Q2%', qty2 );
body.replaceText('%Q3%', qty3 );
body.replaceText('%PRIC1%', unitprice1 );
body.replaceText('%PRIC2%', unitprice2 );
body.replaceText('%PRIC3%', unitprice3);;
body.replaceText('%TOTAL_1%', total1 );
body.replaceText('%TOTAL_2%', total2);
body.replaceText('%TOTAL_3%', total3 );;
}
这是一个简化版本,因为原始代码包含 20 行不同的输入,甚至更多。 目前,任何空单元格都会导致逗号 (,) 被导出到 google 文档中。
我愿意:
- 减少代码长度
- 让代码更快
- 构造代码以跳过空行
- 使用不是
body.replaceText的东西
但我不知道如何在代码中正确表达“如果一行为空,只需移动到下一位”。
我有大约 6 个月的经验,所以我认为自己仍然是一个学习者。任何帮助或见解表示赞赏!
【问题讨论】:
-
欢迎来到 SO 并再次欢迎您对完善代码的全新态度。
-
您好,谢谢! :)
标签: google-apps-script google-sheets-api