Скрипт приложения Google для экспорта CSV из формата даты в электронной таблице Google - PullRequest
1 голос
/ 20 марта 2020

Я использую скрипт приложения Google для экспорта из электронной таблицы в CSV. В моей таблице есть столбцы с форматом даты: ДД / ММ / ГГГГ, но в CSV дата становится такой:

Fri Mar 20 2020 00:00:00 GMT+0300 (heure normale d’Afrique de l’Est)

Вместо ДД / ММ / ГГГГ

Любая помощь спасет мой день: -)

В моем коде есть строка, касающаяся даты, но она не работает или не преобразовывает данные даты в строку? : function isValidDate (date)

Код, который я использую:

function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var csvMenuEntries = [{
name: "export as csv file",
functionName: "saveAsCSV"
}];
ss.addMenu("CSV Export", csvMenuEntries);
var a1 = ss.getSheetByName("Name").getRange("A1").getValue();
var name = "MyCompanyName_"+a1;
ss.rename(name);  
};

function saveAsCSV() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssname = ss.getName();
var sheet = ss.getActiveSheet(); 
var sheetname = sheet.getSheetName();
var folder = DriveApp.getFileById(ss.getId()).getParents().next();
var fileName = ssname + ".csv";
var csvFile = so_4225484202(fileName);
folder.createFile(fileName, csvFile);

}


function isValidDate(date) {
return date && Object.prototype.toString.call(date) === "[object 
 Date]" && !isNaN(date);
}
function so_4225484202(filename) {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var paramsheet = ss.getSheetByName("Parameters");

var linearray = [];
var rowdata = [];
var csv = "";
var fieldvalue = "";

var param = paramsheet.getRange(2, 2, 2);
var paramValues = param.getValues();
var fieldDelimiter = paramValues[0][0];
var textDelimiter = paramValues[1][0];
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var rangeValues = rangeData.getValues();

for (i = 0; i < lastRow; i++) {
for (j = 0; j < lastColumn; j++) {

    var value = rangeValues[i][j];
    var theType = typeof value;

    if (theType === "object") {
        var testdate = isValidDate(value);
        //Logger.log("if typeof is object: testdate: 
"+testdate);//DEBUG
        var testtype = typeof testdate;
        if (testtype === "boolean") {
            // variable is a boolean
            //Logger.log("Its a date");//DEBUG
            theType = "date";
        } else {
            //Logger.log("Its not a date");//DEBUG
        }
    }
    if (theType === "string") {
        value = textDelimiter + value + textDelimiter;
    }

    rowdata.push([value]);
};

//Logger.log("DEBUG: rowdata: "+rowdata);//DEBUG
csv += rowdata.join(fieldDelimiter) + "\n";
var rowdata = [];

};

return csv;

 }

1 Ответ

3 голосов
/ 20 марта 2020

Как экспортировать электронную таблицу в файл CSV и избежать проблем с форматированием даты?

Выполнить запрос Urlfetch в Файлы: экспорт метод

Образец:

function saveAsCSV() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssname = ss.getName();
  var sheet = ss.getActiveSheet(); 
  var folder = DriveApp.getFileById(ss.getId()).getParents().next();
  var fileName = ssname + ".csv";
  var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/export?exportFormat=csv&format=csv";  
  var token = ScriptApp.getOAuthToken();  
  var response = UrlFetchApp.fetch(url + sheet.getSheetId(), {
    headers: {
      'Authorization': 'Bearer ' +  token
    }
  });
  folder.createFile(response.getBlob().setName(fileName));
}
...