2013-05-29 4 views
1

Google Apps Script에서 아래 기능을 사용하여 Google 스프레드 시트를 CSV로 내보내려고합니다. CSV에서 날짜 형식을 유지할 수 있습니까?Google Apps Script에서 CSV로 내보내기에서 날짜 형식을 유지하는 방법

대신 메뉴 옵션을 사용하여 CSV로 다운로드하면 날짜 형식이 유지됩니다.

나는 CSV로 내보내려면 다음 함수를 사용하고이에

for (var col = 0; col < data[row].length; col++) { 
     if (data[row][col].toString().indexOf(",") != -1) { 
     data[row][col] = "\"" + data[row][col] + "\""; 
     } 
    } 

(한 줄 추가) :이

function exportToCSV(file) { 

    // Get the selected range in the spreadsheet 
    var ws = SpreadsheetApp.openById(file.getId()).getSheets()[0]; 
    var range = ws.getRange(1,1,ws.getLastRow(),ws.getLastColumn()) 

    try { 
    var data = range.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; 

    } 
    } 
    catch(err) { 
    Logger.log(err); 
    Browser.msgBox(err); 
    } 

    return csvFile; 

} 

답변

1

변경 당신이 필요로하는

for (var col = 0; col < data[row].length; col++) { 
     data[row][col] = isDate(data[row][col]);  // Format, if date 
     if (data[row][col].toString().indexOf(",") != -1) { 
     data[row][col] = "\"" + data[row][col] + "\""; 
     } 
    } 

this answer에서 복사 한 유틸리티를 추가하십시오. 코멘트에서 언급 된대로 Google Apps event managerisValidDate() 함수에서 비롯된 isDate() 함수가 다른 SO 응답에서 발견되었습니다.

isDate()의 날짜 형식은 필요에 맞게 변경할 수 있습니다. 자세한 내용은 Utilities.formatDate()을 참조하십시오.

// From https://stackoverflow.com/questions/1353684 
// Returns 'true' if variable d is a date object. 
function isValidDate(d) { 
    if (Object.prototype.toString.call(d) !== "[object Date]") 
    return false; 
    return !isNaN(d.getTime()); 
} 

// Test if value is a date and if so format 
// otherwise, reflect input variable back as-is. 
function isDate(sDate) { 
    if (isValidDate(sDate)) { 
    sDate = Utilities.formatDate(new Date(sDate), TZ, "dd MMM yy HH:mm"); 
    } 
    return sDate; 
} 
+0

완벽합니다. 감사!! – rishim3

관련 문제