Skip to content

Instantly share code, notes, and snippets.

@vinknee
Last active May 11, 2022 18:31
Show Gist options
  • Save vinknee/7975eeef77d8403493f39c7b296a1705 to your computer and use it in GitHub Desktop.
Save vinknee/7975eeef77d8403493f39c7b296a1705 to your computer and use it in GitHub Desktop.
Upload Google Sheet to AWS S3 bucket as CSV
function getCsv(in_sheet) {
var data_range = in_sheet.getDataRange();
var data = data_range.getValues()
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] + "\"";
}
}
if (row < data.length-1) {
csv += data[row].join(",") + "\r\n";
} else {
csv += data[row];
}
}
return csv
}
function publishSheet() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var sheet = ss.getSheetByName('Sheet1');
csv = getCsv(sheet)
s3_bucket = "destination-bucket"
folder = "folder"
fileName = sheet.getName() + ".csv"
dtFileName = sheet.getName() + "." + new Date().getTime() + ".csv"
// using the following package: https://engetc.com/projects/amazon-s3-api-binding-for-google-apps-script/
// Add using Google Library ID/Package Key: MB4837UymyETXyn8cv3fNXZc9ncYTrHL9
var s3 = S3.getInstance('aws access key', 'aws secret key')
// create blob object, setting type to text/csv otherwise defaults to application/json
var csv_object = Utilities.newBlob(csv, "text/csv");
csv_object.setName(folder + '/' + dtFileName);
// publish dated file + override latest file
s3.putObject(s3_bucket, folder + '/' + dtFileName, csv_object, {logRequests:true})
s3.putObject(s3_bucket, folder + '/' + fileName, csv_object, {logRequests:true})
var ui = SpreadsheetApp.getUi()
ui.alert('Published!', 'Published ' + fileName + ' to S3', ui.ButtonSet.OK)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment