如何在下一个空白行将数据从一个 Google Sheet 复制到另一个 Sheet
How to Copy Data from One Google Sheet to Another Sheet at the next blank row
我对GoogleSheet不是很熟悉。我正在使用 Internet 上的模板,以便在观看 youtube 视频后可以使用。这是我的 Google Sheet 的 link。 https://docs.google.com/spreadsheets/d/1KD_qFT6J6ife72OhQRzr0pHSiyyRNA3X8KCDTc2A-iE/edit?usp=sharing
我在做什么。
1- 我从财务中复制数据并将其粘贴到“历史记录”选项卡中。
2- 然后我根据选项卡名称过滤数据,如“BNB”、“BTC”等,并将特定的过滤数据粘贴到特定的 sheet 中。
真的是上班时间,累死我了。我想使整个过程自动化,只需单击“填充数据”按钮,数据就会自动填充到所有 sheet 中。是否有可能做到这一点?如果是,请指导我如何操作?谢谢
您可以使用简单的公式,例如:
=FILTER(History1!A:H, History1!B:B="ETHUSDT")
因此,在您将日期粘贴到 History1 sheet 之后,所有内容都会自动排序到您的其他 sheet 中
这个任务看起来很简单。作为最简单的天真解决方案,您可以尝试扩展此示例:
function copy_rows_from_history() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// get data from 'History1'
var s = ss.getSheetByName('History1');
var data = s.getRange(1,1,s.getLastRow(),8).getDisplayValues();
// get all XPR rows from the data
var XRP = data.filter(x => x[1] == 'XRPUSDT');
// add the XPR rows to the 'XPR' sheet
s = ss.getSheetByName('XRP');
var lastRow = s.getRange('A1:A').getValues().filter(String).length;
s.getRange(lastRow+1,1,XRP.length,XRP[0].length).setValues(XRP);
// get all SHIB rows from the data
var SHIB = data.filter(x => x[1] == 'SHIBUSDT');
// add the SHIB rows to the 'SHIB' sheet
s = ss.getSheetByName('SHIB');
var lastRow = s.getRange('A1:A').getValues().filter(String).length;
s.getRange(lastRow+1,1,SHIB.length,SHIB[0].length).setValues(SHIB);
// etc...
}
当然,用一些数组替换这些 'XPR'、'SHIB' 等会更有效(根据 'History1' [= 的第 2 列的值动态创建) 31=]) 并用几个通用函数遍历这个数组。等等,但我不确定你是否准备好深入研究 JS 编码?有时候越简单越好。
完整的脚本变体在这里:
function copy_rows_from_history() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
// make the object with short and full names all the markets
const MARKETS = {};
[
['ADAUSDT' , 'ADA' ], ['BNBUSDT' , 'BNB' ], ['BTCUSDT' , 'BTC' ], ['BTTUSDT' , 'BTT' ],
['CELRUSDT' , 'CELR' ], ['DENTUSDT' , 'DENT' ], ['DOGEUSDT' , 'DOGE' ], ['EOSUSDT' , 'EOS' ],
['ETHUSDT' , 'ETH' ], ['FTMUSDT' , 'FTM' ], ['LUNAUSDT' , 'LUNA' ], ['MATICUSDT', 'MATIC'],
['NEOUSDT' , 'NEO' ], ['ONGUSDT' , 'ONG' ], ['QTUMUSDT' , 'QTUM' ], ['SHIBUSDT' , 'SHIB' ],
['STRAXUSDT', 'STRAX'], ['SUNUSDT' , 'SUN' ], ['SUSHIUSDT', 'SUSHI'], ['SXPUSDT' , 'SXP' ],
['TLMUSDT' , 'TLM' ], ['TRXUSDT' , 'TRX' ], ['XEMUSDT' , 'XEM' ], ['XRPUSDT' , 'XRP' ],
];
.forEach(m => MARKETS[m[0]] = {name: m[0], shortname: m[1]});
const s = ss.getSheetByName('History1');
// get all data from 'History1'
const data = s.getRange(1,1,s.getLastRow(),8).getDisplayValues();
// get list of markets from column 2 (only unique values)
const markets = s.getRange(2,2,s.getLastRow(),1).getValues()
.flat().filter(String).filter((item,i,ar)=>ar.indexOf(item)==i);
// fill all sheets with data
markets.forEach(m => fill_sheet(MARKETS[m], data));
// test:
// console.log(markets[0]); // show first market
// fill_sheet(MARKETS[markets[0]], data); // fill first sheet
}
function fill_sheet(market, data) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
// get from data only the rows of given market
var data = data.filter(x => x[1] == market.name);
// go to sheet and add the rows
const s = ss.getSheetByName(market.shortname);
const lastRow = s.getRange('A1:A').getValues().filter(String).length;
s.getRange(lastRow+1,1,data.length,data[0].length).setValues(data);
}
之前
之后
function split_history(){
var ss=SpreadsheetApp.getActive();
var hissht=ss.getSheetByName("History1");
var hisvals=hissht.getDataRange().getValues();
var sheets=ss.getSheets();
for (i=0;i<sheets.length;i++){
if (sheets[i].getName()=="Summary" || sheets[i].getName()=="History1" || sheets[i].getName()=="Main Menu" ) {} else {
var sn=sheets[i].getName();
var vals=[];
for (j=1;j<hisvals.length;j++){
if (hisvals[j][8]==sn){
vals.push([hisvals[j][0],hisvals[j][1],hisvals[j][2],hisvals[j][3],hisvals[j][4],hisvals[j][5],hisvals[j][6],hisvals[j][7]]) ; //modify it as per your need
}
}
var dsht=ss.getSheetByName(sn);
var dlr=dsht.getLastRow();
dsht.getRange(dlr+1,1,vals.length,8).setValues(vals); //i have used only 4 columns A,B,C,D - you can modify it
}
}
}
//
我对GoogleSheet不是很熟悉。我正在使用 Internet 上的模板,以便在观看 youtube 视频后可以使用。这是我的 Google Sheet 的 link。 https://docs.google.com/spreadsheets/d/1KD_qFT6J6ife72OhQRzr0pHSiyyRNA3X8KCDTc2A-iE/edit?usp=sharing
我在做什么。 1- 我从财务中复制数据并将其粘贴到“历史记录”选项卡中。 2- 然后我根据选项卡名称过滤数据,如“BNB”、“BTC”等,并将特定的过滤数据粘贴到特定的 sheet 中。 真的是上班时间,累死我了。我想使整个过程自动化,只需单击“填充数据”按钮,数据就会自动填充到所有 sheet 中。是否有可能做到这一点?如果是,请指导我如何操作?谢谢
您可以使用简单的公式,例如:
=FILTER(History1!A:H, History1!B:B="ETHUSDT")
因此,在您将日期粘贴到 History1 sheet 之后,所有内容都会自动排序到您的其他 sheet 中
这个任务看起来很简单。作为最简单的天真解决方案,您可以尝试扩展此示例:
function copy_rows_from_history() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// get data from 'History1'
var s = ss.getSheetByName('History1');
var data = s.getRange(1,1,s.getLastRow(),8).getDisplayValues();
// get all XPR rows from the data
var XRP = data.filter(x => x[1] == 'XRPUSDT');
// add the XPR rows to the 'XPR' sheet
s = ss.getSheetByName('XRP');
var lastRow = s.getRange('A1:A').getValues().filter(String).length;
s.getRange(lastRow+1,1,XRP.length,XRP[0].length).setValues(XRP);
// get all SHIB rows from the data
var SHIB = data.filter(x => x[1] == 'SHIBUSDT');
// add the SHIB rows to the 'SHIB' sheet
s = ss.getSheetByName('SHIB');
var lastRow = s.getRange('A1:A').getValues().filter(String).length;
s.getRange(lastRow+1,1,SHIB.length,SHIB[0].length).setValues(SHIB);
// etc...
}
当然,用一些数组替换这些 'XPR'、'SHIB' 等会更有效(根据 'History1' [= 的第 2 列的值动态创建) 31=]) 并用几个通用函数遍历这个数组。等等,但我不确定你是否准备好深入研究 JS 编码?有时候越简单越好。
完整的脚本变体在这里:
function copy_rows_from_history() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
// make the object with short and full names all the markets
const MARKETS = {};
[
['ADAUSDT' , 'ADA' ], ['BNBUSDT' , 'BNB' ], ['BTCUSDT' , 'BTC' ], ['BTTUSDT' , 'BTT' ],
['CELRUSDT' , 'CELR' ], ['DENTUSDT' , 'DENT' ], ['DOGEUSDT' , 'DOGE' ], ['EOSUSDT' , 'EOS' ],
['ETHUSDT' , 'ETH' ], ['FTMUSDT' , 'FTM' ], ['LUNAUSDT' , 'LUNA' ], ['MATICUSDT', 'MATIC'],
['NEOUSDT' , 'NEO' ], ['ONGUSDT' , 'ONG' ], ['QTUMUSDT' , 'QTUM' ], ['SHIBUSDT' , 'SHIB' ],
['STRAXUSDT', 'STRAX'], ['SUNUSDT' , 'SUN' ], ['SUSHIUSDT', 'SUSHI'], ['SXPUSDT' , 'SXP' ],
['TLMUSDT' , 'TLM' ], ['TRXUSDT' , 'TRX' ], ['XEMUSDT' , 'XEM' ], ['XRPUSDT' , 'XRP' ],
];
.forEach(m => MARKETS[m[0]] = {name: m[0], shortname: m[1]});
const s = ss.getSheetByName('History1');
// get all data from 'History1'
const data = s.getRange(1,1,s.getLastRow(),8).getDisplayValues();
// get list of markets from column 2 (only unique values)
const markets = s.getRange(2,2,s.getLastRow(),1).getValues()
.flat().filter(String).filter((item,i,ar)=>ar.indexOf(item)==i);
// fill all sheets with data
markets.forEach(m => fill_sheet(MARKETS[m], data));
// test:
// console.log(markets[0]); // show first market
// fill_sheet(MARKETS[markets[0]], data); // fill first sheet
}
function fill_sheet(market, data) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
// get from data only the rows of given market
var data = data.filter(x => x[1] == market.name);
// go to sheet and add the rows
const s = ss.getSheetByName(market.shortname);
const lastRow = s.getRange('A1:A').getValues().filter(String).length;
s.getRange(lastRow+1,1,data.length,data[0].length).setValues(data);
}
之前
之后
function split_history(){
var ss=SpreadsheetApp.getActive();
var hissht=ss.getSheetByName("History1");
var hisvals=hissht.getDataRange().getValues();
var sheets=ss.getSheets();
for (i=0;i<sheets.length;i++){
if (sheets[i].getName()=="Summary" || sheets[i].getName()=="History1" || sheets[i].getName()=="Main Menu" ) {} else {
var sn=sheets[i].getName();
var vals=[];
for (j=1;j<hisvals.length;j++){
if (hisvals[j][8]==sn){
vals.push([hisvals[j][0],hisvals[j][1],hisvals[j][2],hisvals[j][3],hisvals[j][4],hisvals[j][5],hisvals[j][6],hisvals[j][7]]) ; //modify it as per your need
}
}
var dsht=ss.getSheetByName(sn);
var dlr=dsht.getLastRow();
dsht.getRange(dlr+1,1,vals.length,8).setValues(vals); //i have used only 4 columns A,B,C,D - you can modify it
}
}
}
//