Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 将大的google sheets文件导出为批量大小为500的多个csv_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 将大的google sheets文件导出为批量大小为500的多个csv

Google apps script 将大的google sheets文件导出为批量大小为500的多个csv,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我想从Google Sheets下载一个10000行长的单数表单,将其拆分为20个单独的csv文件,每个文件的批量大小为500行。是否可以使用Google Sheets完成此操作?我找不到对Sheets的本机支持,无法下载并将文件分成多个部分/片段。但是我找到了一个googleapps脚本代码,可以将工作表保存到csv中 所以我所做的就是修改代码,然后让它将一张工作表转换成多个csv 问题是,它会将所有这些文件上传到登录的谷歌硬盘中的一个文件夹中,然后你可以将它们下载到一个zip文件中。(我将在

我想从Google Sheets下载一个10000行长的单数表单,将其拆分为20个单独的csv文件,每个文件的批量大小为500行。是否可以使用Google Sheets完成此操作?

我找不到对Sheets的本机支持,无法下载并将文件分成多个部分/片段。但是我找到了一个
googleapps脚本
代码,可以将工作表保存到csv中

所以我所做的就是修改代码,然后让它将一张工作表转换成多个csv

问题是,它会将所有这些文件上传到登录的谷歌硬盘中的一个文件夹中,然后你可以将它们下载到一个zip文件中。(我将在下文稍后展示)

这是你的电话号码

下面是我修改过的代码:

function saveAsCSV() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var sheet = ss.getActiveSheet();
  // Update numFiles into how many files you want is outputted
  // The script will calculate how many rows it can place in a file equally
  // Excess will be placed into an additional file
  var numFiles = 5;
  var rowsPerFile = Math.floor(sheet.getDataRange().getLastRow() / numFiles);
  // create a folder from the name of the spreadsheet
  var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv_' + new Date().getTime());
  // append ".csv" extension to the sheet name
  fileName = sheet.getName();
  // convert all available sheet data to csv format
  var csvFiles = convertRangeToCsvFile_(sheet, rowsPerFile);
  // create a file in the Docs List with the given name and the csv data
  csvFiles.forEach(function(csvFile, i){
    var csvName = fileName + '_' + (i + 1) + '.csv';
    folder.createFile(csvName, csvFile);
  });
}

function convertRangeToCsvFile_(sheet, rowsPerFile) {
  // get available data range in the spreadsheet
  var activeRange = sheet.getDataRange();
  try {
    var data = activeRange.getValues();
    var csvFiles = [];

    // loop through the data in the range and build a string with the csv data
    if (data.length > 1) {
      var csv = "";
      for (var row = 0; row < data.length; row++) {
        for (var col = 0; col < data[row].length; col++) {
          if (data[row][col].toString().indexOf(",") != -1) {
            data[row][col] = "\"" + data[row][col] + "\"";
          }
        }

        // join each row's columns
        // add a carriage return to end of each row, except for the last one
        if (row < data.length-1) {
          csv += data[row].join(",") + "\r\n";
        }
        else {
          csv += data[row];
        }

        if ((row + 1) % rowsPerFile === 0) {
          csvFiles.push(csv);
          csv = "";
        }
      }
    }
    // If there are remainders that doesnt reach the number of files needed.
    // It will add another file, containing all remainder rows there.
    // 10010 rows / 20 files = 10 rows excess
    // 21st file will contain those 10 rows excess
    // No excess means no 21st file
    if(csv) {
      csvFiles.push(csv);
    }
    return csvFiles;
  }
  catch(err) {
    Logger.log(err);
  }
}
函数saveAsCSV(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=ss.getActiveSheet(); //将numFiles更新为要输出的文件数 //脚本将计算它可以在一个文件中平均放置多少行 //多余的将被放入另一个文件中 var numFiles=5; var rowsPerFile=Math.floor(sheet.getDataRange().getLastRow()/numFiles); //根据电子表格的名称创建文件夹 var folder=DriveApp.createFolder(ss.getName().toLowerCase().replace(//g,“'''+'''u csv'+new Date().getTime()); //将“.csv”扩展名附加到图纸名称 fileName=sheet.getName(); //将所有可用图纸数据转换为csv格式 var csvFiles=convertRangeToCsvFile(工作表,行文件); //使用给定名称和csv数据在文档列表中创建一个文件 forEach(函数(csvFile,i){ var csvName=fileName+'.'+(i+1)+'.csv'; folder.createFile(csvName,csvFile); }); } 函数convertRangeToCsvFile(工作表、行文件){ //获取电子表格中的可用数据范围 var activeRange=sheet.getDataRange(); 试一试{ var data=activeRange.getValues(); var csvFiles=[]; //循环遍历范围中的数据,并使用csv数据构建字符串 如果(data.length>1){ var csv=“”; 对于(变量行=0;行 样本数据:

样本输出:

右键单击在Google Drive中创建的文件夹后,您可以选择将整个文件夹作为包含所有csv文件的zip文件下载

以下是包含所有csv文件的下载zip文件:

由于有22行,示例代码需要5个文件,因此创建了第6个文件,其中包含多余的2行