csv - 谷歌工作表脚本编辑器导入多张工作表
问题描述
客观的
我正在尝试使用谷歌脚本编辑器将谷歌驱动器上的 csv 文件导入我的谷歌表格。有人可以向我澄清我对脚本的误解以及我需要调整什么以允许我将多个工作表请求粘贴到下面吗?抱歉,如果这是直截了当的事情,这是我第一次使用脚本编辑器,而且我对此并不熟悉。
问题
目前,我的代码仅填充 1 张数据。而不是将第二部分视为我想要填充的下一张表,具有不同的 csv 表 ID。
我试过的
- 将变量更改为更独特,以使工作表将我的变量视为不同,因为我认为它每次都在擦拭。
- 查看其他在线帮助论坛,但没有找到我能理解的类似内容。
当前代码
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu('RefreshData')
.addItem('Run getCSV', 'getCSV')
.addToUi()
}
function getCSV() {
//ENTER YOUR CSV FILE ID IN THE getFileByID in the ""
var file = DriveApp.getFileById("<file_id>");
var csvFile = file.getBlob().getDataAsString();
var csvData = Utilities.parseCsv(csvFile);
//CHANGE SHEET NAME TO WHATEVER YOUR SHEET IS CALLED
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
sheet.clear();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
function getCSV() {
//ENTER YOUR CSV FILE ID IN THE getFileByID in the ""
var file = DriveApp.getFileById("<file_id2>");
var csvFile = file.getBlob().getDataAsString();
var csvData = Utilities.parseCsv(csvFile);
//CHANGE SHEET NAME TO WHATEVER YOUR SHEET IS CALLED
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
sheet.clear();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
解决方案
您已经getCSV()
定义了两次,这将导致问题。函数名称,如变量,应该是唯一的。否则,它们将被重写。
以两个test()
函数为例。每次运行testAll()
时,输出始终为 2。
function testAll() {
test(); // 2.0
test(); // 2.0
}
function test() {
Logger.log(1);
}
function test() {
Logger.log(2);
}
您可以做的是修改getCSV()
,使其接受输入,然后创建一个将数据传递给它的新函数。然后在您的菜单中调用该新功能。
/**
* Add a custom menu to the spreadsheet.
*/
function onOpen(e) {
SpreadsheetApp.getUi()
.createMenu("RefreshData")
.addItem("Get CSVs", "importSheets")
.addToUi();
}
/**
* Imports all CSV files.
*/
function getCSVs() {
// Define the CSV files and where you want them to be saved
var csvs = [
{ fileId: "FILE_ID_1", sheetName: "Sheet1" },
{ fileId: "FILE_ID_2", sheetName: "Sheet2" }
];
// Import the CSVs
for (var i = 0; i < csvs.length; i++) {
getCSV_(csvs[i].fileId, csvs[i].sheetName);
}
}
/**
* Get the CSV data from a specified file and import into the desired
* sheet of the active spreadsheet.
* @param {String} fileId - The file ID of the CSV file
* @param {String} sheetName - The name of the destination sheet
*/
function getCSV_(fileId, sheetName) {
//ENTER YOUR CSV FILE ID IN THE getFileByID
var file = DriveApp.getFileById(fileId);
var csvFile = file.getBlob().getDataAsString();
var csvData = Utilities.parseCsv(csvFile);
//CHANGE SHEET NAME TO WHATEVER YOUR SHEET IS CALLED
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
sheet.clear().getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
推荐阅读
- python - os.walk 返回一个空列表,然后返回我的实际列表
- haskell - 我必须对代码进行哪些更改才能正常工作?
- powershell - 通过 Powershell 获取请求标头
- matlab - 有没有一种算法可以在图像中找到已知大小和形状的对象?
- javascript - 如果缺少函数参数如何失败
- css - CSS Grid 3 列第一和第二相同大小中间固定大小
- microservices - 带有事件的微服务架构中的主题设计
- python - Python pickle 抛出 TypeError
- python - 如何让逻辑回归曲线显示在我的情节中
- c# - 按任何常见元素对数组范围进行分组的最佳方法