用于以CSV格式导出电子表格的问题脚本

时间:2020-01-31 15:43:43

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

我在将工作表导出到CSV的脚本中遇到问题:

我希望在Google驱动器上表格的父文件夹中创建我的文件夹,而不要在Google驱动器的根目录中创建该文件夹。

我似乎也无法修改脚本以覆盖文件夹的旧版本,而不是创建新版本。

你能帮我吗

最诚挚的问候

function onOpen() { 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var csvMenuEntries = [{name: "export as csv files", functionName: "saveAsCSV"}]; 
ss.addMenu("csv", csvMenuEntries); 
}


function saveAsCSV() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheets = ss.getSheets(); 
// create a folder from the name of the spreadsheet 
var folder = DriveApp.createFolder(ss.getName().toLowerCase().replace(/ /g,'_') + '_csv'); 
for (var i = 0 ; i < sheets.length ; i++) { 
var sheet = sheets[i]; 
// append ".csv" extension to the sheet name 
fileName = sheet.getName() + ".csv"; 
// convert all available sheet data to csv format 
var csvFile = convertRangeToCsvFile_(fileName, sheet); 
// create a file in the Docs List with the given name and the csv data 
folder.createFile(fileName, csvFile); 
} 
Browser.msgBox('Le fichier a été nommé ' + folder.getName()); 
} 


function convertRangeToCsvFile_(csvFileName, sheet) { 
 // get available data range in the spreadsheet 
var activeRange = sheet.getDataRange(); 
try { 
var data = activeRange.getValues(); 
var csvFile = undefined; 


// 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]; 
        } 
      } 
       csvFile = csv; 
    } 
    return csvFile; 
  } 
  catch(err) { 
    Logger.log(err); 
    Browser.msgBox(err); 
  } 
};

1 个答案:

答案 0 :(得分:0)

非常感谢,就是这样!它完美地工作!谢谢。

我将有最后的投诉 在我的数据导入脚本中,我想将CSV文件导入“备​​份”表中,但是我希望保留先前类型为“添加到活动表”的数据

我的脚本

function Backup() {
   var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A4').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Backup'), true);
  var sheet = spreadsheet.getActiveSheet();
  sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).activate();
  spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
  spreadsheet.getRange('A1').activate();
  var file = DriveApp.getFilesByName("Report.csv").next();
  var csvData = Utilities.parseCsv(file.getBlob().getDataAsString(), ",");
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
};