将大型 .csv 文件导入 Google 表格时出现问题
Problem importing a large .csv file into Google Sheets
我基于一个 GoogleSheets 文件在 Google DataStudio 中设计了一个仪表板。进入 GoogleSheets 文件的数据来自两个用“;”分隔的 .csv 文件。这些 .csv 文件在夜间自动更新并存储在 Google 驱动器上。为了让我的仪表板也根据 .csv 文件中的更改自动更新,我需要将它们自动读入 GoogleSheets 文件,我通过每天晚上之后触发我的脚本到 运行 来做到这一点.csvs 已更新...
由于除了一些基础知识之外我真的不知道如何编码,所以我从互联网上的各种来源构建了以下脚本。好的是,它基本上可以工作:
function parseCsv(csvString, delimiter) {
var sanitizedString = csvString.replace(/(["'])(?:(?=(\?))[\s\S])*?/g, function(e){return e.replace(/\r?\n|\r/g, ' ') });
return Utilities.parseCsv(sanitizedString, delimiter)
}
//------------------------------------------------------------
function import_Sales() {
var fileName = "exported_Sales.csv";
var searchTerm = "title = '"+fileName+"'";
var files = DriveApp.searchFiles(searchTerm)
var csvFile = "";
while (files.hasNext()) {
var file = files.next();
if (file.getName() == fileName) {
csvFile = file.getBlob().getDataAsString('ISO-8859-15');
break;
}
}
var csvData = parseCsv(csvFile,";");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('ExportSales');
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
如前所述,我正在导入 2 个不同的 .csv 文件(因此不仅有 import_sales 函数,还有 import_stock 函数。
对于股票 csv,一切都很好(除了名称之外,它看起来与上面的 import_Sales() 函数一模一样)。
问题似乎出在我的 sales-.csv 文件的大小上。 (23 列 x 56.000 行)并且文件在更新时每晚都在变长。因此,当我在几分钟后尝试 运行 import_Sales 函数时,我得到错误 "maximum execution time"... 所以我知道这一定与 .csv 的大小或功能(希望如此)效率低下,也许你们中的某个人知道如何 运行 更快? .csv 的大小无法更改,我无法想象将其导入 google 表格是不可能的?!
有谁知道我如何管理它以每晚自动将数据从 csv 获取到 google 工作表中?也许我可以跳过 google 工作表文件中已有的行,并以某种方式从 cvs 导入新行?但那是我的知识肯定会结束,所以如果你们能帮助我,我会很高兴!
谢谢和问候!
如果它已经在您的云端硬盘中,请尝试复制 CSV 并将其转换为表格,而不是“手动”将单元格从 csv 转换为现有 sheet。
function main(){
var files = DriveApp.searchFiles('title contains "your csv file name"').next();
var name = files.getName();
var file_id = files.getId();
var file_Blob = files.getBlob();
var newFile = { title : name+'_Sheet',
key : file_id};
files = Drive.Files.insert(newFile,file_Blob, {convert: true});
}
我还附上了函数执行时间限制的 documentation。
我基于一个 GoogleSheets 文件在 Google DataStudio 中设计了一个仪表板。进入 GoogleSheets 文件的数据来自两个用“;”分隔的 .csv 文件。这些 .csv 文件在夜间自动更新并存储在 Google 驱动器上。为了让我的仪表板也根据 .csv 文件中的更改自动更新,我需要将它们自动读入 GoogleSheets 文件,我通过每天晚上之后触发我的脚本到 运行 来做到这一点.csvs 已更新...
由于除了一些基础知识之外我真的不知道如何编码,所以我从互联网上的各种来源构建了以下脚本。好的是,它基本上可以工作:
function parseCsv(csvString, delimiter) {
var sanitizedString = csvString.replace(/(["'])(?:(?=(\?))[\s\S])*?/g, function(e){return e.replace(/\r?\n|\r/g, ' ') });
return Utilities.parseCsv(sanitizedString, delimiter)
}
//------------------------------------------------------------
function import_Sales() {
var fileName = "exported_Sales.csv";
var searchTerm = "title = '"+fileName+"'";
var files = DriveApp.searchFiles(searchTerm)
var csvFile = "";
while (files.hasNext()) {
var file = files.next();
if (file.getName() == fileName) {
csvFile = file.getBlob().getDataAsString('ISO-8859-15');
break;
}
}
var csvData = parseCsv(csvFile,";");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('ExportSales');
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
如前所述,我正在导入 2 个不同的 .csv 文件(因此不仅有 import_sales 函数,还有 import_stock 函数。
对于股票 csv,一切都很好(除了名称之外,它看起来与上面的 import_Sales() 函数一模一样)。
问题似乎出在我的 sales-.csv 文件的大小上。 (23 列 x 56.000 行)并且文件在更新时每晚都在变长。因此,当我在几分钟后尝试 运行 import_Sales 函数时,我得到错误 "maximum execution time"... 所以我知道这一定与 .csv 的大小或功能(希望如此)效率低下,也许你们中的某个人知道如何 运行 更快? .csv 的大小无法更改,我无法想象将其导入 google 表格是不可能的?!
有谁知道我如何管理它以每晚自动将数据从 csv 获取到 google 工作表中?也许我可以跳过 google 工作表文件中已有的行,并以某种方式从 cvs 导入新行?但那是我的知识肯定会结束,所以如果你们能帮助我,我会很高兴!
谢谢和问候!
如果它已经在您的云端硬盘中,请尝试复制 CSV 并将其转换为表格,而不是“手动”将单元格从 csv 转换为现有 sheet。
function main(){
var files = DriveApp.searchFiles('title contains "your csv file name"').next();
var name = files.getName();
var file_id = files.getId();
var file_Blob = files.getBlob();
var newFile = { title : name+'_Sheet',
key : file_id};
files = Drive.Files.insert(newFile,file_Blob, {convert: true});
}
我还附上了函数执行时间限制的 documentation。