[英]Import Google Sheet Data all at once to an existing sheet with data
Currently I have been using this script which imports data from a spreadsheet located in my google drive.目前我一直在使用这个脚本,它从位于我的谷歌驱动器中的电子表格中导入数据。 The function works but imports the data one line at a time.
该功能有效,但一次导入一行数据。 Some times these sheets are 400+ rows and that takes a long time.
有时这些工作表有 400 多行,这需要很长时间。 I am looking for it to grab all data and import it into an existing spreadsheet and the end of the last value.
我正在寻找它来获取所有数据并将其导入现有电子表格和最后一个值的末尾。
function getData() {
get_files = ['July1-2022'];
var ssa = SpreadsheetApp.getActiveSpreadsheet();
var copySheet = ssa.getSheetByName('CancelRawData');
for(z = 0; z < get_files.length; z++)
{
var files = DriveApp.getFilesByName(get_files[z]);
while (files.hasNext())
{
var file = files.next();
break;
}
var ss = SpreadsheetApp.open(file);
SpreadsheetApp.setActiveSpreadsheet(ss);
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for(var i = 0; i < sheets.length; i++)
{
var nameSheet = ss.getSheetByName(sheets[i].getName());
var nameRange = nameSheet.getDataRange();
var nameValues = nameRange.getValues();
for(var y = 1; y < nameValues.length; y++)
{
copySheet.appendRow(nameValues[y]);
}
}
}
SpreadsheetApp.getUi().alert("🎉 Congratulations, your data has been all imported", SpreadsheetApp.getUi().ButtonSet.OK);
}
I believe your goal is as follows.我相信你的目标如下。
appendRow
is used in a loop. appendRow
在循环中使用。 The process cost will be high.sheets
can be written by var sheets = SpreadsheetApp.open(file).getSheets();
sheets
可以通过var sheets = SpreadsheetApp.open(file).getSheets();
. When these points are reflected in your script, it becomes as follows.当这些点反映在你的脚本中时,它变成如下。
This script uses the Spreadsheet service (SpreadsheetApp).此脚本使用电子表格服务 (SpreadsheetApp)。
function getData() {
// Retrieve values.
get_files = ['July1-2022'];
var values = [];
for (z = 0; z < get_files.length; z++) {
var files = DriveApp.getFilesByName(get_files[z]);
while (files.hasNext()) {
var file = files.next();
break;
}
var sheets = SpreadsheetApp.open(file).getSheets();
for (var i = 0; i < sheets.length; i++) {
values = [...values, ...sheets[i].getDataRange().getValues()];
}
}
if (values.length == 0) return;
// Put values.
const maxLen = Math.max(...values.map(r => r.length));
values = values.map(r => [...r, ...Array(maxLen - r.length).fill(null)]);
var copySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('CancelRawData');
copySheet.getRange(copySheet.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
SpreadsheetApp.getUi().alert("🎉 Congratulations, your data has been all imported", SpreadsheetApp.getUi().ButtonSet.OK);
}
This script uses Sheets API.此脚本使用 Sheets API。 Before you use this script, please enable Sheets API at Advanced Google services .
在使用此脚本之前, 请在 Advanced Google services 中启用 Sheets API 。
function getData() {
// Retrieve values.
get_files = ['July1-2022'];
var values = [];
for (z = 0; z < get_files.length; z++) {
var files = DriveApp.getFilesByName(get_files[z]);
while (files.hasNext()) {
var file = files.next();
break;
}
var spreadsheetId = file.getId();
var ranges = SpreadsheetApp.open(file).getSheets().map(s => `'${s.getSheetName()}'!${s.getDataRange().getA1Notation()}`);
values = [...values, ...Sheets.Spreadsheets.Values.batchGet(spreadsheetId, { ranges }).valueRanges.flatMap(({ values }) => values)];
}
if (values.length == 0) return;
// Put values.
var dstSS = SpreadsheetApp.getActiveSpreadsheet();
Sheets.Spreadsheets.Values.append({ values }, dstSS.getId(), 'CancelRawData', { valueInputOption: "USER_ENTERED" });
SpreadsheetApp.getUi().alert("🎉 Congratulations, your data has been all imported", SpreadsheetApp.getUi().ButtonSet.OK);
}
get_files
are retrieved and all values are retrieved from all sheets in all Spreadsheets, and the retrieved values are put to the destination sheet of CancelRawData
.get_files
的所有文件,并从所有电子表格中的所有工作表中检索所有值,并将检索到的值放入CancelRawData
的目标工作表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.