【问题标题】:How to save the content of 50 rows in Google Sheets as txt. file with Google Apps Script如何将 Google Sheets 中 50 行的内容保存为 txt。带有 Google Apps 脚本的文件
【发布时间】:2019-06-20 10:32:22
【问题描述】:

我正在查看一个有 2,000-10,000 行的表格,需要将 50 行的内容保存在一个 txt 文件中,每一行都在 txt 中。文件应该是 1 行。此外,分隔符必须是“|”。


给定的表:

A1  T   B1  C1  ...

A2  T   B2  C2  ...

保存在txt. 文件中,例如:

A1|T|B1|C1|...

A2|T|B2|C2|...

我如何需要循环遍历表格以创建一个包含内容的 50 行新文件?

function getTxtFiles(){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var sheet = ss.getSheetByName("Test");

    var folderName = 'Test Folder';
    var folderID = 'Test Folder ID';
    var documentName = 'Test_1.txt'
    var folder = DriveApp.getFolderById(folderID);

  var data = sheet.getDataRange();
  var values = data.getValues();
  var rows = "";   

for (var a = 0; a < data[a].length; a++) {
  for (var i = 0; i < values[i].length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      if (values[i][j]) {
        rows = rows + values[i][j];
          }
    rows = rows + "|";
        }
      }
    }

    var sss = DriveApp.createFile(documentName,rows,MimeType.PLAIN_TEXT);
    var file = DriveApp.getFileById(sss.getId());
    var parents = file.getParents();
    parents.next().removeFile(file);
    folder.addFile(file); 

}

我想实现脚本是从带有2,000 rows and with 40 columns, 40 x txt 的表中创建的。文件,每个文件包含 50 行内容,每行作为 txt 中的 1 行。文件。

【问题讨论】:

    标签: loops google-apps-script google-sheets google-drive-api


    【解决方案1】:

    试试下面的代码:

    function txtFileCreator(){
      var sheet = SpreadsheetApp.getActiveSheet();
      var data = sheet.getDataRange().getValues(); // will give you all data cells in a 2D array
      var text = "";
      var count = 0;
      var flag = false;
    
      for (var i = 0; i < data.length; i++){
        flag = true;    
        for (var j = 0; j < data[0].length; j++)
          text += data[i][j] + " | ";
    
        text += "\n";
    
        if ((i+1) % 50 == 0){
          count++;
          createF(text, count);
          text = "";
          flag = false;
        }
      }
    
      if (flag)
        createF(text, ++count);
    }
    
    function createF(content, count){
      DriveApp.createFile("File " + count, content, MimeType.PLAIN_TEXT);
    }
    

    它对我来说非常有效,我尝试使用具有您类型范围的测试表,它创建了正确的文件,每个文件只有 50 行。

    【讨论】:

    • 对我来说它不能完美地工作,每一秒的文件都保存为空白,没有内容。你能帮忙吗?
    • 我已经更新了修复代码的答案,它在最后调用 createF 函数,不管任何事情,所以如果还有条目(比如说如果你有 50 行)填充,它会创建一个空文件,现在它检查是否有带有标志布尔变量的行
    【解决方案2】:

    流程:

    • values 是一个二维数组。使用| 连接内部数组,使用\n 连接外部数组
    • 使用str.match(regex) 得到一个数组,每行包含 50 行
    • 为数组中的每个字符串创建文件。

    片段:

    var folder = DriveApp.getFolderById('[OUTPUT_FOLDER_ID]')
    values.map(function(row){return row.join('|')})
      .join('\n')
      .match(/((?:.*\n){50}|(?:[\s\S]+$))/g)
      .forEach(function(str,i){ folder.createFile('textFile'+ i, str})
    

    参考资料:

    【讨论】:

    • 每个最后一个文件将仅返回 1 行。我不明白为什么 - 你能澄清一下吗?
    • @Tim 我想我修好了
    • 它仍然返回仅包含 1 行的最后一个文件。
    • @Tim 立即查看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    相关资源
    最近更新 更多