Google apps script 谷歌电子表格导出同一文件夹中的CSV

Google apps script 谷歌电子表格导出同一文件夹中的CSV,google-apps-script,google-sheets,export-to-csv,Google Apps Script,Google Sheets,Export To Csv,我正在使用下面的脚本,工作得很好(感谢Ted Bell)。 但我需要调整它,因为我需要CSV文件保存在与电子表格相同的文件夹中。 你能帮我处理这件事吗? 下面的代码每次在我的驱动器上创建一个新文件夹。 CSV的名称和格式可以:使用分号分隔符 function onOpen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var csvMenuEntries = [{ name: "export as csv file", f

我正在使用下面的脚本,工作得很好(感谢Ted Bell)。 但我需要调整它,因为我需要CSV文件保存在与电子表格相同的文件夹中。 你能帮我处理这件事吗? 下面的代码每次在我的驱动器上创建一个新文件夹。 CSV的名称和格式可以:使用分号分隔符

function onOpen() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var csvMenuEntries = [{
    name: "export as csv file",
    functionName: "saveAsCSV"
}];
ss.addMenu("CSV Export", csvMenuEntries);
var a1 = ss.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();
//Logger.log("DEBUG: the name of the spreadsheet is "+ssname);//DEBUG
//Logger.log("DEBUG: the sheet name is "+sheetname);// DEBUG

//// create a folder from the name of the spreadsheet
var folder = DriveApp.createFolder(ssname.toLowerCase() + '_' + 
sheetname.toLowerCase().replace(/ /g, '_') + '_csv_' + new Date().getTime());
//Logger.log("DEBUG: the folder name is "+folder);//DEBUG

// append ".csv" extension to the sheet name
var fileName = ssname + '_' + sheetname + ".csv";

// convert all available sheet data to csv format
var csvFile = so_4225484202(fileName);

// create a file in the Docs List with the given name and the csv data
folder.createFile(fileName, csvFile);

Browser.msgBox('Files are waiting in a folder named ' + folder.getName());
}


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();
//Logger.log("DEBUG: parameters = "+param.getA1Notation());//DEBUG
var fieldDelimiter = paramValues[0][0];
var textDelimiter = paramValues[1][0];
//Logger.log("DEBUG: field delimiter: "+fieldDelimiter+", text delim: 
"+textDelimiter);//DEBUG
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
//Logger.log("DEBUG: lastColumn: "+lastColumn+", lastRow: "+lastRow);//DEBUG

// Get array of values in the Data Range
var rangeValues = rangeData.getValues();

// Loop through array and build values for csv
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 = [];

};

//Logger.log("DEBUG: csv: "+csv);//DEBUG
return csv;

}
函数onOpen(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var csvMenuEntries=[{ 名称:“导出为csv文件”, 函数名:“saveAsCSV” }]; ss.addMenu(“CSV导出”,csvMenuEntries); var a1=ss.getRange(“a1”).getValue(); var name=“MyCompanyName”+a1; ss.重命名(名称); }; 函数saveAsCSV(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var ssname=ss.getName(); var sheet=ss.getActiveSheet(); var sheetname=sheet.getSheetName(); //Logger.log(“调试:电子表格的名称为”+ssname);//调试 //Logger.log(“调试:工作表名称为”+sheetname);//调试 ////根据电子表格的名称创建文件夹 var folder=DriveApp.createFolder(ssname.toLowerCase()+''.'+ sheetname.toLowerCase().replace(//g,'.''+'.\u csv'.+new Date().getTime()); //Logger.log(“调试:文件夹名称为“+文件夹);//调试 //将“.csv”扩展名附加到图纸名称 var fileName=ssname+'.'+sheetname+.csv”; //将所有可用图纸数据转换为csv格式 var csvFile=so_4225484202(文件名); //使用给定名称和csv数据在文档列表中创建一个文件 folder.createFile(文件名,csvFile); Browser.msgBox('文件正在名为'+folder.getName())的文件夹中等待); } 函数isValidDate(日期){ 返回日期&Object.prototype.toString.call(日期)=“[对象日期]”&&&!isNaN(日期); } 函数so_4225484202(文件名){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=ss.getActiveSheet(); var paramsheet=ss.getSheetByName(“参数”); var线性阵列=[]; var rowdata=[]; var csv=“”; var fieldvalue=“”; var param=paramsheet.getRange(2,2,2); var paramValues=param.getValues(); //Logger.log(“调试:参数=“+param.getA1Notation());//调试 var fieldDelimiter=参数值[0][0]; var textdimiter=paramValues[1][0]; //Logger.log(“调试:字段分隔符:“+fieldDelimiter+”,文本delim: “+textdimiter);//调试 var rangeData=sheet.getDataRange(); var lastColumn=rangeData.getLastColumn(); var lastRow=rangeData.getLastRow(); //Logger.log(“调试:lastColumn:+lastColumn+”,lastRow:+lastRow);//调试 //获取数据范围中的值数组 var rangeValues=rangeData.getValues(); //循环遍历数组并为csv生成值 对于(i=0;i
  • 您希望在活动电子表格的同一文件夹中创建CSV文件
  • 您希望通过修改脚本来实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

修改点:
  • 为了检索活动电子表格的文件夹,
    DriveApp.getFileById(ss.getId()).getParents().next()
    用于检索文件夹
修改脚本: 请修改脚本中的函数
saveAsCSV()
,如下所示

发件人: 致: 参考资料:

如果我误解了你的问题,而这不是你想要的方向,我道歉。

亲爱的塔奈克,非常感谢。它现在工作得很好!!!!您知道是否可以修改脚本,以便直接将CSV文件上载到FTP服务器,而不是保存在驱动器文件夹中?或者两者兼有:将CSV文件保存在文件夹中(就像它现在的工作方式一样),同时将其上载到FTP。@Jean感谢您的回复。我很高兴你的问题解决了。我愿意支持你。但你评论的问题是新问题,这与你的问题不同。那么,你能通过包含详细信息将其作为新问题发布吗?因为当你的初始问题被评论改变时,看到你的问题的其他用户会感到困惑。通过将其作为新问题发布,包括我在内的用户可以想到您的新问题。当时,。如果你能合作解决你的新问题,我很高兴。啊,好的,对不起,我现在就做。再次非常感谢你。你能帮我找到按钮吗?那太好了:-)
var folder = DriveApp.createFolder(ssname.toLowerCase() + '_' + sheetname.toLowerCase().replace(/ /g, '_') + '_csv_' + new Date().getTime());
var folder = DriveApp.getFileById(ss.getId()).getParents().next();