如何导入多个csv文件(格式相同)并在Google Spreadsheet中自动创建图表? [英] How to import multiple csv files (of identical format) and create charts automatically in a Google Spreadsheet?

查看:130
本文介绍了如何导入多个csv文件(格式相同)并在Google Spreadsheet中自动创建图表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有大约25个csv文件,所有格式相同(行数和列数相同)。我想将这些导入到Google文档电子表格的单独表格(选项卡)中,并在每个表格中创建图表(大约10)。

给定一张表的格式和图表模板,是否有方便的脚本或一些自动填充电子表格的方法? (b)在工作表中创建所有图表,(c)制作工作表的多个副本,它也在每个副本中创建图表,并(d)将剩余的csv文件导入其他副本。是否有一个不太痛苦或更具扩展性的解决方案?感谢!

解决方案

举个例子。 ,一个电子表格,并把它们全部放到电子表格中。



Code.gs



  function main(){
var files = DriveApp.getFolderById(FOLDER_ID).getFilesByType('text / csv');
var csver = new CSVer();
csver.setSpreadsheet(SpreadsheetApp.openById(SPREADSHETT_ID));
csver.importFiles(files,newChart);
}

function newChart(sheet){
var chartBuilder = sheet.newChart();
chartBuilder.setChartType(Charts.ChartType.TABLE).addRange(sheet.getDataRange())。setPosition(1,3,1,1);
sheet.insertChart(chartBuilder.build());
}



CSVer.gs



  var CSVer = function(){
var spreadsheet_ = null;

this.setSpreadsheet =函数(电子表格){
spreadsheet_ = spreadsheet;
返回此;


this.importFile = function(file,funct){
try {
var csv = file.getBlob()。getDataAsString()。split(' \\\
');
var len = csv [0] .parseCSVtoArray()。length;
var data = [];
for(var i = 0; i< csv.length; i ++){
var row = csv [i] .parseCSVtoArray();
if(row.length == len)
data.push(row);
}
var newSheet = spreadsheet_.insertSheet();
newSheet.getRange(1,1,data.length,data [0] .length).setValues(data);
if(funct)
funct(newSheet);
返回newSheet;
} catch(err){
Logger.log(JSON.stringify(err));
返回null;
}



CSVer.prototype.importFiles = function(files,funct){
while(files.hasNext()){
var file = files.next();
this.importFile(file,funct);
}
返回此;
};



Proto.gs



强烈建议阅读如何使用Javascript解析CSV字符串?

  String.prototype.parseCSVtoArray = function(){
var text = this;
var re_valid = / ^ \s *(?:'[^'\\] *(?: \\ [\S\s] [^'\\] * )* '| [^ \\] *(?: \\ [\S\s] [^ \\] *)* | [^',\s \\] *(?: \s + [^,'\s\\] +)*)* \s(?:,\s *(:? '[^' \ \] *(?: \\ [\S\s] [^ '\\] *)*' | [^ \\] *(?: \\ [ \S\s] [^ \\] *)* | [^ '\s\\] *(?: \s + [^',\s\ \] +)*)\s *)* $ /;
var re_value = /(?! \s * $)\s *(?:'([^'\\] *(?: \\ [[\S\s] [^ '\\] *)*)' | ([^ \\] *(?: \\ [\S\s] [^\\] *) *) |([^, \s\\] *(?: \s + [^,'\s\\] +)*))\s *(?: ,| $)/克;
if(!re_valid.test(text))
return null;
var a = [];
text.replace(re_value,function(m0,m1,m2,m3){
if(m1!== undefined)
a.push(m1.replace(/ \\ '/ g,''));
else if(m2!== undefined)
a.push(m2.replace(/ \\/ g,'''));
else if(m3!== undefined)
a.push(m3);
return'';
});
if(/,\s*$/.test(text))
a.push('');
返回a;
};

对于批量操作(26 csv文件到26页,每个图表有1个图表),我会变得很好结果随着时间的推移。


[15-06-11 13:53:51:645 EAT]执行成功[总运行时间为31.428秒]



I have about 25 csv files, all of the same format (identical number of rows and columns). I would like to import these into separate sheets (tabs) of a google docs spreadsheet, and create charts (about 10) in each of the sheets.

Is there a convenient script or some automatic way of populating the spreadsheet, given the format and chart templates for one sheet?

One solution is to (a) import one csv file into a sheet, (b) create all the charts in the sheet, (c) make several copies of the sheet, which also creates the charts in each copy, and (d) import the remaining csv files into the other copies. Is there a less painful or more scalable solution? Thanks!

解决方案

For an example.

I take a FileIterator, a Spreadsheet and put them all to the spreadsheet by sheet.

Code.gs

function main() {
  var files = DriveApp.getFolderById(FOLDER_ID).getFilesByType('text/csv');
  var csver = new CSVer();
  csver.setSpreadsheet(SpreadsheetApp.openById(SPREADSHETT_ID));
  csver.importFiles(files, newChart);
}

function newChart(sheet) {
  var chartBuilder = sheet.newChart();
  chartBuilder.setChartType(Charts.ChartType.TABLE).addRange(sheet.getDataRange()).setPosition(1, 3, 1, 1);
  sheet.insertChart(chartBuilder.build());
}

CSVer.gs

var CSVer = function() {
  var spreadsheet_ = null;

  this.setSpreadsheet = function(spreadsheet) {
    spreadsheet_ = spreadsheet;
    return this;
  }

  this.importFile = function(file, funct) {
    try {
      var csv = file.getBlob().getDataAsString().split('\n');
      var len = csv[0].parseCSVtoArray().length;
      var data = [];
      for (var i = 0; i < csv.length; i++) {
        var row = csv[i].parseCSVtoArray();
        if (row.length == len)
          data.push(row);
      }
      var newSheet = spreadsheet_.insertSheet();
      newSheet.getRange(1, 1, data.length, data[0].length).setValues(data);
      if (funct)
        funct(newSheet);
      return newSheet;
    } catch (err) {
      Logger.log(JSON.stringify(err));
      return null;
    }
  }
}

CSVer.prototype.importFiles = function(files, funct) {
  while (files.hasNext()) {
    var file = files.next();
    this.importFile(file, funct);
  }
  return this;
};

Proto.gs

Highly recommend to read How can I parse a CSV string with Javascript?

String.prototype.parseCSVtoArray = function() {
  var text = this;
  var re_valid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*)*$/;
  var re_value = /(?!\s*$)\s*(?:'([^'\\]*(?:\\[\S\s][^'\\]*)*)'|"([^"\\]*(?:\\[\S\s][^"\\]*)*)"|([^,'"\s\\]*(?:\s+[^,'"\s\\]+)*))\s*(?:,|$)/g;
  if (!re_valid.test(text))
    return null;
  var a = [];
  text.replace(re_value, function(m0, m1, m2, m3) {
    if (m1 !== undefined)
      a.push(m1.replace(/\\'/g, "'"));
    else if (m2 !== undefined)
      a.push(m2.replace(/\\"/g, '"'));
    else if (m3 !== undefined)
      a.push(m3);
    return '';
  });
  if (/,\s*$/.test(text))
    a.push('');
  return a;
};

For batch operations (26 csv-files to 26 sheets with 1 chart per each), I get good results over time.

[15-06-11 13:53:51:645 EAT] Execution succeeded [31.428 seconds total runtime]

这篇关于如何导入多个csv文件(格式相同)并在Google Spreadsheet中自动创建图表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆