gpt4 book ai didi

javascript - 如何通过使用数组从 Google 表格中提取数据并对其进行格式化来优化 Apps 脚本代码?

转载 作者:行者123 更新时间:2023-12-03 22:25:18 25 4
gpt4 key购买 nike

我有一个脚本,它从 gsheet 中获取数据并替换 gdoc 上的占位符。我希望通过使用数组来优化脚本。

这是我的 gsheet 示例(原始 gsheet 跨越 1000+ 行和 15+ 列),

sample gsheet

原脚本:

function generategdoc() {

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").activate();

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();

for (var i =2;i<=lr;i++){

if(ss.getRange(i, 1).getValue()){

//Make a copy of the template file
var documentId = DriveApp.getFileById('FileID').makeCopy().getId();

var Client = ss.getRange(i, 2).getValue();
var Amount = ss.getRange(i, 3).getValue();
var AmountFormat = Amount.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');

var Date = ss.getRange(i, 4).getValue();
var temp = new Date(Date)
var DateFormat = Utilities.formatDate(temp, "GMT+0400", "dd MMM yyyy")

//Rename the copied file
DriveApp.getFileById(documentId).setName(Client);

//Get the document body as a variable
var body = DocumentApp.openById(documentId).getBody();

body.replaceText('##Client##', Client).replaceText('##Amount##', AmountFormat).replaceText('##Date##', DateFormat)
}
else {}
}
}

如您所见,此脚本将仅针对已选中 TRUE 的所有行运行。

尝试 1 优化:
function optimise() {

SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").activate();

var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss.getLastRow();

var rng = ss.getRange("A1:"+"D"+lr).getValues(); //Creation of Array

for (var i =2;i<=lr;i++){

if(ss.getRange(i, 1).getValue()){
var Client = rng[i-1][1];
var Amount = rng[i-1][2];
var Date = rng[i-1][3];

var documentId = DriveApp.getFileById('FileID').makeCopy().getId();

DriveApp.getFileById(documentId).setName(Client);

var body = DocumentApp.openById(documentId).getBody();
body.replaceText('##Client##', Client).replaceText('##Amount##', Amount).replaceText('##Date##', Date)
}
else {}
}
}

问题:
我能够格式化 Amount 的原始脚本和 Date .如何对数组使用相同的格式?因为我不能申请 formatDate (class utilities)toFixed我的变量了,因为它们现在是数组。

最佳答案

我相信您可以通过使用适当的方法来优化您的代码,以保留您的 Google 工作表值的文本格式。

研究使用类 Range 的以下方法来自 SpreadsheetApp服务。

方法getDisplayValue()返回范围内单元格的显示值。该值是一个字符串。显示的值考虑了日期、时间和货币格式,包括由电子表格的区域设置自动应用的格式。空单元格返回一个空字符串。

这应该通过消除正则表达式的必要性来优化您的代码。如果我没有正确理解您的问题,请发表评论。

引用文献:

  • getDisplayValue()
  • getDisplayValues()
  • getRichTextValue()
  • getRichTextValues()
  • 关于javascript - 如何通过使用数组从 Google 表格中提取数据并对其进行格式化来优化 Apps 脚本代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61622332/

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