Pat*_*ick 5 csv delimiter google-sheets export-to-csv
我使用Google表格(电子表格)来合并Gambio商店的不同来源的文章数据。要导入数据,我需要在.csv文件中使用管道符号作为定界符/分隔符和“作为文本定界符”。在用于导出到.csv的Google表格菜单中,没有选项。
有没有一种方法可以使用Google表格中的管道分隔符导出到.csv?
有多种方法可以从 Google 表格导出电子表格和/或工作表。将工作表导出为 csv 文件内置于 Google 表格(文件、下载、CSV)中。
\n\n在这种情况下,OP 引入了“标准”方法无法解决的两个复杂情况。
\n1) 要由“管道”字符 ( ) 分隔的字段|,以及
\n2) 要用双引号括起来的所有字符串字段。
GitHub 上有多个脚本可以自动将工作表另存为 csv。Michael Derazon 的export-named-sheet-as-csv.gs ( https://gist.github.com/mderazon/9655893 ) 是一个示例,我用它作为此代码的基础。但是,这些脚本遵循使用逗号作为字段分隔符的“正常”规则,并且没有对字符串进行特殊处理。
\n\n以下代码将活动工作表保存为 csv 文件,并提供管道字段分隔符和字符串周围的双引号。用户可以通过编辑“参数”表上的字段来指定这些参数,如此屏幕截图所示。
\n\n
该脚本用于识别字符串,以及Dmytro Shevchenko 在Detecting an \xe2\x80\x9cinvalid date\xe2\x80\x9d Date instance in JavaScript 中typeof提到的函数。isValidDate
/*\n * script to export data in all sheets in the current spreadsheet as individual csv files\n * files will be named according to the name of the sheet\n * author: Michael Derazon\n * source: https://gist.github.com/mderazon/9655893\n * adapted by Ted Bell for /sf/ask/3447394891/\n */\nfunction onOpen() {\n var ss = SpreadsheetApp.getActiveSpreadsheet();\n var csvMenuEntries = [{\n name: "export as csv file",\n functionName: "saveAsCSV"\n }];\n ss.addMenu("CSV Export", csvMenuEntries);\n};\n\nfunction saveAsCSV() {\n var ss = SpreadsheetApp.getActiveSpreadsheet();\n var ssname = ss.getName();\n var sheet = ss.getActiveSheet();\n var sheetname = sheet.getSheetName();\n //Logger.log("DEBUG: the name of the spreadsheet is "+ssname);//DEBUG\n //Logger.log("DEBUG: the sheet name is "+sheetname);// DEBUG\n\n //// create a folder from the name of the spreadsheet\n var folder = DriveApp.createFolder(ssname.toLowerCase() + \'_\' + sheetname.toLowerCase().replace(/ /g, \'_\') + \'_csv_\' + new Date().getTime());\n //Logger.log("DEBUG: the folder name is "+folder);//DEBUG\n\n // append ".csv" extension to the sheet name\n var fileName = ssname + \'_\' + sheetname + ".csv";\n\n // convert all available sheet data to csv format\n var csvFile = so_4225484202(fileName);\n\n // create a file in the Docs List with the given name and the csv data\n folder.createFile(fileName, csvFile);\n\n Browser.msgBox(\'Files are waiting in a folder named \' + folder.getName());\n}\n\n\nfunction isValidDate(date) {\n return date && Object.prototype.toString.call(date) === "[object Date]" && !isNaN(date);\n}\n\n\nfunction so_4225484202(filename) {\n\n var ss = SpreadsheetApp.getActiveSpreadsheet();\n var sheet = ss.getActiveSheet();\n var paramsheet = ss.getSheetByName("Parameters");\n\n var linearray = [];\n var rowdata = [];\n var csv = "";\n var fieldvalue = "";\n\n var param = paramsheet.getRange(2, 2, 2);\n var paramValues = param.getValues();\n //Logger.log("DEBUG: parameters = "+param.getA1Notation());//DEBUG\n var fieldDelimiter = paramValues[0][0];\n var textDelimiter = paramValues[1][0];\n //Logger.log("DEBUG: field delimiter: "+fieldDelimiter+", text delim: "+textDelimiter);//DEBUG\n\n\n var rangeData = sheet.getDataRange();\n var lastColumn = rangeData.getLastColumn();\n var lastRow = rangeData.getLastRow();\n //Logger.log("DEBUG: lastColumn: "+lastColumn+", lastRow: "+lastRow);//DEBUG\n\n // Get array of values in the Data Range\n var rangeValues = rangeData.getValues();\n\n // Loop through array and build values for csv\n for (i = 0; i < lastRow; i++) {\n for (j = 0; j < lastColumn; j++) {\n\n var value = rangeValues[i][j];\n var theType = typeof value;\n\n if (theType === "object") {\n var testdate = isValidDate(value);\n //Logger.log("if typeof is object: testdate: "+testdate);//DEBUG\n var testtype = typeof testdate;\n if (testtype === "boolean") {\n // variable is a boolean\n //Logger.log("Its a date");//DEBUG\n theType = "date";\n } else {\n //Logger.log("Its not a date");//DEBUG\n }\n }\n if (theType === "string") {\n value = textDelimiter + value + textDelimiter;\n }\n\n rowdata.push([value]);\n };\n\n //Logger.log("DEBUG: rowdata: "+rowdata);//DEBUG\n csv += rowdata.join(fieldDelimiter) + "\\n";\n var rowdata = [];\n\n };\n\n //Logger.log("DEBUG: csv: "+csv);//DEBUG\n return csv;\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n此电子表格包含示例数据。\n大约 5 秒内即可处理并保存包含近 1,000 条记录的工作表。
\n| 归档时间: |
|
| 查看次数: |
1526 次 |
| 最近记录: |