2013-10-22 77 views
1

我寫了一個腳本,它獲取一個帶有幾個參數(組,數據轉儲類型)的用戶列表並作爲服務工作。使用contentService將數據作爲CSV返回。如何使用contentService強制使用fileName?

一切正常,只是在Chrome(Mac OS)或Firefox(蘋果操作系統),它總是保存文件,而不是顯示在屏幕上它...(文件名:echo.csv)

使用Safari我在屏幕上獲取數據。

我的問題是:我可以在不使用forced downloadAsFile()方法的情況下更改默認名稱嗎?

該腳本用於將內容提供給我們在另一臺服務器上開發的PHP應用程序。 (我沒有真正參與開發的那部分,我只是做了谷歌Apps腳本部分:-)

下面是腳本:

function doGet(e) { 
    if(e.parameter.log!='adminUser'){return ContentService.createTextOutput("erreur de logging, vous n'êtes pas autorisé à voir ce résultat, contactez Serge @ insas").setMimeType(ContentService.MimeType.TEXT)}; 
    var cat = e.parameter.cat; 
    var type = e.parameter.type 
    Logger.log(cat) 
    var ssGroup = SpreadsheetApp.openById('0AnZ5_ShBzIxxxxxxxxx2MkZPNVViNXc'); 
    var ssUser = SpreadsheetApp.openById('0AnZ5_ShBzI6pdGxxxxxxxxxxxxxyNGoxRmc'); 
    var shU = ssUser.getSheetByName('Feuille de travail principale') 
    var shG = ssGroup.getSheetByName('Horizontal') 
    var datagroup = shG.getDataRange().getValues(); 
    var dataUser = shU.getDataRange().getValues(); 
    if(type==1){ 
    var outString = ''; 
    for(var n=0 ; n<dataUser.length ; ++n){ 
     if(dataUser[n][11].toString().indexOf(cat)==-1){ continue }; 
     var dataRow = dataUser[n][3]+','+dataUser[n][2]+','+dataUser[n][4]+','+dataUser[n][11]+';\n'; 
     outString+=dataRow 
    } 
    Logger.log('part1'+outString); 
    var result = ContentService.createTextOutput(outString).setMimeType(ContentService.MimeType.CSV); 
    return result; 
    }else{ 
    var outString = ''; 
    for(var n=0 ; n<datagroup.length ; ++n){ 
     if(datagroup[n][0].toString().indexOf(cat)==-1){ continue }; 
     var dataRow = datagroup[n][0]; 
     for(var c=2;c<datagroup[n].length;++c){ 
     if(datagroup[n][c]!=''){ 
      dataRow+=(','+datagroup[n][c]) 
     }else{ 
      dataRow+=';\n'; 
      break; 
     } 
     } 
     outString+=dataRow 
    } 
    Logger.log('part2'+outString); 
    var result = ContentService.createTextOutput(outString).setMimeType(ContentService.MimeType.CSV); 
    return result; 
    } 
} 

回答

1

如果你想查看一個CSV瀏覽器,你不需要老實說...只是說它是文本。

function doGet(e) { 
    // &type=TEXT to view as text 
    var type = (e.parameter['type'] && e.parameter['type'] == "TEXT") ? "TEXT" : "CSV"; 

    var sheet = SpreadsheetApp.openById(sheetId).getSheets()[0]; 
    var data = sheet.getDataRange().getValues(); 
    var outString = ''; 
    for(var row=0 ; row<data.length ; ++row){ 
    outString += data[row].join(',') + ';\n'; 
    } 
    Logger.log(outString); 

    var result = ContentService 
        .createTextOutput(outString) 
        .setMimeType(ContentService.MimeType[type]); 
    return result; 
} 
+0

謝謝!很高興知道你鼓勵我說謊...... ;-)只是一個小問題:'setvalime(eval('ContentService.MimeType。'+ type)''eval'''' –

+0

'eval()是一段美妙的Javascript魔術。給定一個字符串,它將其評估爲代碼。這是因爲在之前的迭代中,我傳遞了整個'ContentService.MimeType.TEXT','eval'會選擇正確的類型。真的,我不應該留下'eval',而應該使用一個命名的屬性,比如'ContentService.MimeType [type]'。 (這就是它在[文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval)中所說的,無論如何! – Mogsdad