2017-02-15 40 views
1

我試過用下面的腳本無法正常工作。當我下載到CSV格式時,它全部在一列而不是標準格式。使用Google Apps腳本,如何下載到CSV格式並保存在我的驅動器或下載文件中?如何從電子表格導出爲CSV格式的驅動器或下載文件夾

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

您忘了添加您嘗試過的代碼。http://stackoverflow.com/help/how-to-ask – Aaron

+0

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

+0

我已經試過,但不能在我的問題選項卡中添加代碼,請幫我在這 –

回答

0

你有沒有嘗試過數據/分割文本到列?

+0

我曾嘗試它不工作 –

+0

它的正常工作 –

2

這個腳本怎麼樣?該腳本從電子表格導出CSV文件,並讓用戶下載它。

請將HTML和腳本放在GAS項目中。

HTML:

這個文件名是 「download.html」。

<!DOCTYPE html> 
<html> 
    <body> 
    Download CSV? 
    <form> 
     <input type="button" value="ok" onclick="google.script.run 
               .withSuccessHandler(executeDownload) 
               .saveAsCSV();" /> 
    </form> 
    </body> 
    <script> 
    function executeDownload(url) { 
     window.location.href = url; 
    } 
    </script> 
</html> 

腳本:

function onOpen() { 
    SpreadsheetApp.getUi() 
       .createMenu('csv') 
       .addItem('export as csv files', 'dialog') 
       .addToUi(); 
} 

function dialog() { 
    var html = HtmlService.createHtmlOutputFromFile('download'); 
    SpreadsheetApp.getUi().showModalDialog(html, 'CSV download dialog'); 
} 

function saveAsCSV() { 
    var filename = "#####"; // CSV file name 
    var folder = "#####"; // Folder ID 

    var csv = ""; 
    var v = SpreadsheetApp 
      .getActiveSpreadsheet() 
      .getActiveSheet() 
      .getDataRange() 
      .getValues(); 
    v.forEach(function(e) { 
     csv += e.join(",") + "\n"; 
    }); 
    var url = DriveApp.getFolderById(folder) 
       .createFile(filename, csv, MimeType.CSV) 
       .getDownloadUrl() 
       .replace("?e=download&gd=true",""); 
    return url; 
} 

過程:

  1. 使用 「的OnOpen()」 時,就將此菜單用於啓動對話。

  2. 啓動對話框後,通過按下按鈕啓動「saveAsCSV()」。 「saveAsCSV()」導出CSV文件並輸出下載URL。在當前腳本中,活動工作表上的所有數據都將被檢索並導出CSV。如果你想檢索你需要的範圍,請使用「getRange()」。

  3. CSV文件由「executeDownload()」下載。

您可以分別通過「文件名」和「文件夾」設置csv文件名和輸出文件夾。在此示例中,源表單是當前打開的表單。如果您想要其他工作表,請更改此腳本。

如果這對你有幫助,我很高興。

+0

我曾嘗試它不工作和錯誤被扔在「VAR URL = DriveApp.getFolderById(文件夾)」 –

+0

它不工作你能幫助我 –

+0

也許你的文件夾ID是不正確。您可以轉到Google雲端硬盤文件夾,然後右鍵點擊驅動器並選擇獲取可分享鏈接,「id =」將位於查詢字符串中。 – Cooper

0

我無法得到這個工作。

var csv = ""; 
var v = SpreadsheetApp 
      .getActiveSpreadsheet() 
      .getActiveSheet() 
      .getDataRange() 
      .getValues(); 
    v.forEach(function(e) { 
     csv += e.join(",") + "\n"; 
    }); 

我從來沒有使用的連接方法,但我敢肯定,這不過一個聰明的辦法,我決定把它改寫一個更爲簡單的頭腦的方法。它不處理字段中存在逗號的情況,也不會在任何字段周圍放置雙引號。說實話,我幾乎總是用~~~作爲我的分隔符。創建包含文本的列以及對我來說生活運行更順暢。換句話說,如果可以的話,我會一直採取簡單的方法。

這是我的版本,只是該代碼段。也許現在一切都會好起來。

var csv = ''; 
    var v = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange().getValues(); 
    for(var i = 0;i < v.length;i++) 
    { 

    for(var j = 0; j < v[i].length;j++) 
    { 
     if(j>0) 
     { 
     csv += ', '; 
     } 
     csv += v[i][j].toString(); 
    } 
    csv += '\n'; 
    } 

Tanaike的代碼的其餘部分看起來應該工作。如果你有任何進一步的麻煩回來,我很樂意再看看它。

+0

我有疑問,如果我下載文件它不是以相同的格式在trix中。我選擇了在控制面板中分隔的管道。請讓我知道我們是否有機會在下載文件時獲得與每個trix相同的格式 –

+0

直到現在我還不熟悉trix。 – Cooper

相關問題