Google apps script Google Sheets,将表单中的数据填充到其他表单上的特定单元格中
一般来说,我对编码还不熟悉(除了使用MATLAB的经验,我认为这并不重要),但我开始尝试在GoogleSheetsAPI中编写一些高级功能的代码 我试图写的代码是为了一个电子表格,我跟踪我所有的汽车费用。我现在让它为MPG做了一系列的数字运算,但我不想每次都要找到行和列来输入日期。相反,我想要一张干净、简单的表格,我可以在上面输入变量(行驶里程、泵送加仑数、每加仑汽油的价格、从汽车电脑中估算的MPG),当我点击save时,它会自动用这些信息填充文档中的其他表格,然后清除表格,以便我下次可以再次这样做 这是我到目前为止所拥有的Google apps script Google Sheets,将表单中的数据填充到其他表单上的特定单元格中,google-apps-script,google-sheets,Google Apps Script,Google Sheets,一般来说,我对编码还不熟悉(除了使用MATLAB的经验,我认为这并不重要),但我开始尝试在GoogleSheetsAPI中编写一些高级功能的代码 我试图写的代码是为了一个电子表格,我跟踪我所有的汽车费用。我现在让它为MPG做了一系列的数字运算,但我不想每次都要找到行和列来输入日期。相反,我想要一张干净、简单的表格,我可以在上面输入变量(行驶里程、泵送加仑数、每加仑汽油的价格、从汽车电脑中估算的MPG),当我点击save时,它会自动用这些信息填充文档中的其他表格,然后清除表格,以便我下次可以再次这
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName('Fill-Up'); //Form Sheet
var datasheet1 = ss.getSheetByName('Mileage Stats'); //Data Sheet 1
var datasheet2 = ss.getSheetByName('Costs and Savings'); //Data Sheet 2
//Input Values 1
var values1 = [[formSS.getRange('B3').getValue(),
formSS.getRange('B6').getValue()]];
datasheet1.getRange(datasheet1.getLastRow()+1, 2, 1, 2).setValues(values1);
//Input Values 2
var values2 = [[formSS.getRange('B4').getValue(),
formSS.getRange('B5').getValue()]];
datasheet2.getRange(datasheet2.getLastRow()+1, 2, 1, 2).setValues(values2);
}
除了两个我还没能解决的问题外,它还能工作
1) 它将信息写入页面底部的新行,而不是下一个空行
2) 它没有将B6中的信息写入正确的单元格。我希望B3写在“里程统计”表的B列,B4写在“成本和节约”表的B列,B5写在“成本和节约”表的C列,但B6写在“里程统计”表的C列,但我希望它写在G列,我现在的代码无法改变这一点,或者我能找到的任何其他代码
任何人能给予的任何帮助都会很棒 您是否在试图使用
getLastRow()
的工作表上使用了任何ArrayFormulas
?如果是这样,ArrayFormula
将向整个范围的单元格中添加数据
您可能希望使用下面的Sheet.appendRow()
方法,删除数据表上的所有空行appendRow()
将在工作表底部添加一个新行,其中包含传递给方法的数据
datasheet1.appendRow(values1);
datasheet2.appendRow(values2);
带有函数的单元格被计为数据单元格,这就是为什么要在工作表底部插入行。若要解决此问题,可以使用方法对不带函数的列范围(例如,列B中的单元格)进行排序,该方法返回最后一个单元格,其中包含给定方向的数据。我测试了下面的代码,并将数据插入最后一行,数据在B列:
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName('Fill-Up'); //Form Sheet
var datasheet1 = ss.getSheetByName('Mileage Stats'); //Data Sheet 1
var datasheet2 = ss.getSheetByName('Costs and Savings'); //Data Sheet 2
//Input Values 1
var values1 = [[formSS.getRange('B3').getValue(),
formSS.getRange('B6').getValue()]];
var lastRowInB = datasheet1.getRange("B6").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow();
datasheet1.getRange(lastRowInB+1, 2, 1, 2).setValues(values1);
//Input Values 2
var values2 = [[formSS.getRange('B4').getValue(),
formSS.getRange('B5').getValue()]];
lastRowInB = datasheet1.getRange("B7").getNextDataCell(SpreadsheetApp.Direction.DOWN).getLastRow();
datasheet2.getRange(lastRowInB+1, 2, 1, 2).setValues(values2);
}
是的,我所在行的其他单元格中都有公式。列A是行中唯一自动填充的列。我编写了一些代码,用行的B列有数据输入的日期自动填充A列。然后C列到F列有计算油箱行驶里程、MPG等的公式。链接到表格:非常感谢!这几乎是完美的。我仍然不知道如何将B6值放入正确的单元格,但它正在写入正确的行。我试着把B3和B6的值分成两个变量,但我显然不知道我在做什么,因为这打破了它。这也破坏了我的日期脚本,但我只是添加了将B2值写入Datasheet1上的a列,并使用=Today()函数自动填充日期值,因此很容易修复。确切的问题是什么?您应该阅读方法文档,了解如何让单元格将值设置为,从而能够根据需要对其进行修复。另外,请阅读有关该方法的文档,或者在您的案例中哪种方法可能更有用。