使用从 google 个工作表中的其他选项卡收集的特定值填充一个选项卡中的单元格
Fill cells in one tab with specific values collected from other tabs in google sheets
我正在尝试使用从 google 工作表中其他选项卡收集的特定值填充一个选项卡中的单元格范围。但是,我无法为其编写正确的脚本。
这里有更详细的解释:
我的 google 工作表文档中有几个选项卡代表一年中的一个月,即它们被命名为 July 2017
、December 2016
等等。我还有另外两个名为 Graphs
和 Blank
.
的选项卡
其 N6
单元格中的每个月选项卡都具有如下值:Balance 33050,32 UAH
(数字可能因选项卡而异)。
我想做什么:
我需要从我所有的月份选项卡中收集 N6
值,并将这些值填充到 Graphs
选项卡的 A
列中。然后我需要根据我收集的所有值构建一个图表。但现在的主要问题是正确收集值。
我试过为此写一个脚本,但似乎我做错了什么。我对 google 脚本的东西很陌生,所以我可能在这里遗漏了一些简单的东西。
这是我的脚本:
var months = [
"january","february","march","april","may","june","july","august","september","october", "november","december"
];
var graphSheetName = 'Graphs';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var graphSheet = ss.getSheetByName(graphSheetName);
// this function tells if the name of the tab refers to one of the month tabs.
function isMonthSheet(name) {
return matchInArray(name, months);
}
function matchInArray(string, expressions) {
var len = expressions.length,
i = 0;
for (; i < len; i++) {
if (string.toLowerCase().match(expressions[i])) {
return true;
}
}
return false;
}
// This function runs on every edit of the google sheets document.
// It should fill the cells in the `Graphs` tab.
function getMonthsTotals() {
var sheets = ss.getSheets(); // get all tabs
var values = [];
for (var i = 0; i < sheets.length; ++i) {
var sheet = sheets[i];
// if it is a month tab, collect the N6 value into the `values` array.
// "Balance 33050,32 UAH".slice(8,-4) --> "33050,32".
if (isMonthSheet(sheet.getName())) {
var value = sheet.getRange('N6').getValue().slice(8, -4);
values.push(value);
}
}
// fill the `Graphs` tab with the collected values into the `A` column.
var rangeStr = 'A1:A' + values.length;
graphSheet.getRange(rangeStr).setValues(values);
}
正如我上面已经说过的,我对 google 工作表脚本很陌生,所以我也不太熟悉其中的调试,所以我的方法是使用 toast
功能。因此,我无法真正提供很多关于脚本实际如何运行的信息 运行ning.
我寻求有关如何更正我的脚本以使其 运行 正确的建议和帮助。
好的,所以问题出在 getMonthTotals
.
中的 getRange().setValues()
函数
它期望获得 Object[][]
类型,但却得到了一个简单的字符串数组。我已经设法通过循环和使用 setValue(string)
函数而不是 setValues(Object[][])
.
来克服这个问题
这是我想出的:
function getMonthsTotals() {
var sheets = ss.getSheets();
var values = [];
for (var i = 0; i < sheets.length; ++i) {
var sheet = sheets[i];
if (isMonthSheet(sheet.getName())) {
var value = sheet.getRange('N6').getValue().slice(8, -4);
values.push(value);
}
}
for (var i = 1; i <= values.length; ++i) {
graphSheet.getRange('A' + i).setValue(values[i - 1]);
}
}
function gatheringValues()
{
var months=['January','February','March','April','May','June','July','August','September','October','December'];
var ss=SpreadsheetApp.getActive();
var allsheets=ss.getSheets();
var n6s=[];
for(var i=0;i<allsheets.length;i++)
{
var month=allsheets[i].getName().split(' ')[0];
if(months.indexOf(month)>-1)
{
n6s.push([allsheets[i].getRange('N6').getValue().slice(8,-4)]);
}
}
var graphsht=ss.getSheetByName('Graphs');
graphsht.getRange(2,1,n6s.length,1).setValues(n6s);
}
我正在尝试使用从 google 工作表中其他选项卡收集的特定值填充一个选项卡中的单元格范围。但是,我无法为其编写正确的脚本。
这里有更详细的解释:
我的 google 工作表文档中有几个选项卡代表一年中的一个月,即它们被命名为 July 2017
、December 2016
等等。我还有另外两个名为 Graphs
和 Blank
.
其 N6
单元格中的每个月选项卡都具有如下值:Balance 33050,32 UAH
(数字可能因选项卡而异)。
我想做什么:
我需要从我所有的月份选项卡中收集 N6
值,并将这些值填充到 Graphs
选项卡的 A
列中。然后我需要根据我收集的所有值构建一个图表。但现在的主要问题是正确收集值。
我试过为此写一个脚本,但似乎我做错了什么。我对 google 脚本的东西很陌生,所以我可能在这里遗漏了一些简单的东西。
这是我的脚本:
var months = [
"january","february","march","april","may","june","july","august","september","october", "november","december"
];
var graphSheetName = 'Graphs';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var graphSheet = ss.getSheetByName(graphSheetName);
// this function tells if the name of the tab refers to one of the month tabs.
function isMonthSheet(name) {
return matchInArray(name, months);
}
function matchInArray(string, expressions) {
var len = expressions.length,
i = 0;
for (; i < len; i++) {
if (string.toLowerCase().match(expressions[i])) {
return true;
}
}
return false;
}
// This function runs on every edit of the google sheets document.
// It should fill the cells in the `Graphs` tab.
function getMonthsTotals() {
var sheets = ss.getSheets(); // get all tabs
var values = [];
for (var i = 0; i < sheets.length; ++i) {
var sheet = sheets[i];
// if it is a month tab, collect the N6 value into the `values` array.
// "Balance 33050,32 UAH".slice(8,-4) --> "33050,32".
if (isMonthSheet(sheet.getName())) {
var value = sheet.getRange('N6').getValue().slice(8, -4);
values.push(value);
}
}
// fill the `Graphs` tab with the collected values into the `A` column.
var rangeStr = 'A1:A' + values.length;
graphSheet.getRange(rangeStr).setValues(values);
}
正如我上面已经说过的,我对 google 工作表脚本很陌生,所以我也不太熟悉其中的调试,所以我的方法是使用 toast
功能。因此,我无法真正提供很多关于脚本实际如何运行的信息 运行ning.
我寻求有关如何更正我的脚本以使其 运行 正确的建议和帮助。
好的,所以问题出在 getMonthTotals
.
getRange().setValues()
函数
它期望获得 Object[][]
类型,但却得到了一个简单的字符串数组。我已经设法通过循环和使用 setValue(string)
函数而不是 setValues(Object[][])
.
这是我想出的:
function getMonthsTotals() {
var sheets = ss.getSheets();
var values = [];
for (var i = 0; i < sheets.length; ++i) {
var sheet = sheets[i];
if (isMonthSheet(sheet.getName())) {
var value = sheet.getRange('N6').getValue().slice(8, -4);
values.push(value);
}
}
for (var i = 1; i <= values.length; ++i) {
graphSheet.getRange('A' + i).setValue(values[i - 1]);
}
}
function gatheringValues()
{
var months=['January','February','March','April','May','June','July','August','September','October','December'];
var ss=SpreadsheetApp.getActive();
var allsheets=ss.getSheets();
var n6s=[];
for(var i=0;i<allsheets.length;i++)
{
var month=allsheets[i].getName().split(' ')[0];
if(months.indexOf(month)>-1)
{
n6s.push([allsheets[i].getRange('N6').getValue().slice(8,-4)]);
}
}
var graphsht=ss.getSheetByName('Graphs');
graphsht.getRange(2,1,n6s.length,1).setValues(n6s);
}