【问题标题】:Using google script to import .csv files into an existing google sheet. Formatting issues.使用 google 脚本将 .csv 文件导入现有的 google 工作表。格式问题。
【发布时间】:2017-06-23 14:59:20
【问题描述】:

当新的 .csv 文件从我的一个驱动器文件夹导入现有的谷歌表时,有没有办法不复制标题?我希望将 .csv 文件按顺序添加到现有工作表中,而不添加标题...示例 - 如第 2 行和第 19 行所示。此外,为了使日期在 A 列中按顺序排列。我的另一个问题是,你知道第 10 行发生了什么吗?每次发生这种情况时,我都会删除并重新输入新数据。这是我现在拥有的脚本。这是指向工作表及其外观的可共享链接。 https://docs.google.com/spreadsheets/d/1f9HEwikMxm5sJzzRh_-etBxXzL0NpK47i9LtoZVCv_0/edit?usp=sharing 这是我现在的脚本。

function appendingCSV() {
 var ss=SpreadsheetApp.getActiveSpreadsheet()
 var sht=ss.getActiveSheet();
 var drng = sht.getDataRange();
 var lastRow = drng.getLastRow();
 var data = loadFiles();
 var dataA =Utilities.parseCsv(data);
if(dataA.length>0)
{
 var rng = sht.getRange(lastRow + 1, 1, dataA.length, dataA[0].length);
 rng.setValues(dataA);
}
else
{
  SpreadsheetApp.getUi().alert('No Data Returned from LoadFiles');
}
}

function loadFiles(folderID)
{
 var folderID = (typeof(folderID) !== 'undefined')? folderID : 
 '0B8m9xkDP_TJxUUlueHhXOWJMbjg';
var fldr = DriveApp.getFolderById(folderID);
var files = fldr.getFiles();
 var s='';
 var re = /^.*\.csv$/i;
 while (files.hasNext())
 {
  var file = files.next();
  var filename = file.getName();
  if(filename.match(re))
  {
    s += file.getBlob().getDataAsString() + '\n';
    file.setName(filename.slice(0,-3) + 'old');
  }
 }
 return s;
}

function createTimeDrivenTriggers() {
// Trigger every Friday at 09:00.
 ScriptApp.newTrigger('myFunction')
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.FRIDAY)
    .atHour(9)
    .create();
 }

【问题讨论】:

  • 只拼接第一行?
  • 如何在脚本中做到这一点?我没想到。
  • 好的,如何将拼接合并到我当前的代码中,以便在将来导入 .csv 文件时仅将信息放入工作表中?没有重复的标题。

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


【解决方案1】:

在您的 loadFiles() 脚本中。尝试将其更改为类似的内容。

function loadFiles(folderID)
{
  //var folderID = (typeof(folderID) !== 'undefined')? folderID : 'Your_folder_id';
  var folderID = (typeof(folderID) !== 'undefined')? folderID : 'Your_folder_id';
  var fldr = DriveApp.getFolderById(folderID);
  var files = fldr.getFiles();
  var s='';
  var re = /^.*\.csv$/i;
  while (files.hasNext())
  {
    var file = files.next();
    var filename = file.getName();
    if(filename.match(re))
    {
      s+=file.getBlob().getDataAsString().split('\n').splice(0,1).join('\n') + '\n';
      //s += file.getBlob().getDataAsString() + '\n';
      file.setName(filename.slice(0,-3) + 'old');
    }
  }
  return s;
}

您可能需要稍微尝试一下。我不确定是否需要最后一个 '\n',而且我不擅长链接这么多操作。但是您需要从每个文件中删除标题。您可以编写一个本地脚本,将其提供给您的技术人员,从源头剥离标题,在这种情况下,然后返回到现在的方式。

【讨论】:

  • 我会玩弄它,看看能不能让它工作!我会尽快回复您。本地脚本不是一个坏主意,但他们用来提交表单的应用程序需要标题,以便技术人员输入正确的数据类型,而不是什么。该脚本将能够在进入我的 gmail 之前操纵标题。 . .然后到一个驱动器文件夹然后到工作表?脚本何时会与他们的表格互动?
  • 我在拼接上犯了一个错误,我只是把它改成了 splice(0,1) 所以我认为这意味着它会删除第一个项目。
  • Cooper - 第一个接头效果更好。我在 google 表中手动设置了标题,当我运行脚本时,它将 .csv 文件放在那里,没有标题,就在我手动输入的标题下面。 0,1 拼接只输入了标题。我也确实删除了最后一个(+'\n')。我的最后一个问题是你知道第 9 行有什么问题吗?我不知道为什么它一直把这些信息放在那里。也许这是我让我的技术人员发送的表单应用程序的格式问题。还有......你看到第 15-18 行之间的差距将两个表格分开......可以消除差距吗?
  • docs.google.com/spreadsheets/d/…>
  • 不要介意差距。我知道差距是什么。只是第 9 行。也许它是格式,我只是删除它,看看它是否继续对 .csv 文件接收的其他数据执行此操作。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多