This is a list of code fragments for the copy / paste tool on yours keyboard. I still don't know what to do about this. It would be great if you had an idea.
example /issues/3
function ll_(){
var args = [];
for (var i = 0; i < arguments.length; i++) {
args.push(typeof arguments[i] === 'object' ? ('' + JSON.stringify(arguments[i], null, ' ')) : ('' + arguments[i]));
}
if(!/%s/.test(args[0])){
args.unshift(new Array(args.length).join('\n%s'));
}
Logger.log.apply(Logger, args);
}
function example(){
createSpreadsheet('asdasd', '0Bztea6vSatozM2NiWGVGRzNvbTQ');
// Defaults
// createSpreadsheet('asdasdfasdf');
}
function createSpreadsheetRC(name, rows, columns, folder, add){
var args = [name];
if(rows || columns){
args.push(rows || 1);
args.push(columns || 1);
}
var spreadsheet = SpreadsheetApp.create.apply(SpreadsheetApp, args);
if(folder){
folder = typeof folder === 'object' ? folder : DriveApp.getFolderById(folder);
add = !!add;
var child = DriveApp.getFileById(spreadsheet.getId());
folder.addFile(child);
if(!add){
DriveApp.getRootFolder().removeFile(child);
}
}
return spreadsheet;
}
function createSpreadsheet(name, folder, add){
return createSpreadsheetRC(name, undefined, undefined, folder, add);
}
// Rounds the date to days. Usefull for timestamps
function roundToDay_(date, offsetOfDays){
offsetOfDays = offsetOfDays * 24 * 60 * 60 * 1000 || 0;
var res_ = new Date(date.valueOf() + offsetOfDays);
res_.setHours(0, 0, 0, 0);
return res_;
}
/**
Returns the sheet by index
@param {number} index A positive integer
*/
var sheet = spreadsheet.getSheets()[index];
//Always returns a sheet
function getSheetByName(spreadsheet, sheetName){
var sheet = spreadsheet.getSheetByName(sheetName);
return sheet || spreadsheet.insertSheet(sheetName);
}
function getSheetByGid(spreadsheet, gid){
gid = +gid || 0;
var res_ = undefined;
var sheets_ = spreadsheet.getSheets();
for(var i = sheets_.length; i--; ){
if(sheets_[i].getSheetId() === gid){
res_ = sheets_[i];
break;
}
}
return res_;
}
/*
@denial Gets not associated
*/
function getAssociatedWithForm_(sheets, denial){
denial = !denial;
return sheets.filter(function(sheet){
return !!sheet.getFormUrl() === this.denial;
}, {denial: denial});
}
// Appends values to sheet
function appendValues(sheet, values, colOffset){
colOffset = colOffset || 1;
return sheet.getRange(
sheet.getLastRow() + 1,
colOffset,
values.length,
values[0].length
).setValues(values);
}
// Can be expanded by other methods
function setValues(sheet, values, row, col){
row = row || 1;
col = col || 1;
sheet.getRange(row, col, values.length, values[0].length).setValues(values);
}
function fn(){
var source = SpreadsheetApp.openById("...").getRange("A1");
var destination = SpreadsheetApp.openById("...").getRange("A1");
copyTo(source, destination);
}
/*
To avoid 'Target range and source range must be on the same spreadsheet'
*/
function copyTo(source, destination){
destination.setValues(source.getValues());
}
function isInGroup_(userEmail, groupEmail, level) {
level = level || 2;
try {
var group = GroupsApp.getGroupByEmail(groupEmail);
return [GroupsApp.Role.OWNER, GroupsApp.Role.MANAGER, GroupsApp.Role.MEMBER].indexOf(group.getRole(currentUser)) === level;
} catch (err) {
return false;
}
}
Example /issue/9
function newBlobWithCharset(data, contentType, name, charset){
return Utilities.newBlob('')
.setDataFromString(data, charset)
.setName(name)
.setContentType(contentType);
}
Example /issue/8
/**
* Compute a hash string using the specified digest algorithm on the specified value.
* @param {String} value The specified value.
* @param {String} digestAlgorithm The name of Enum DigestAlgorithm: MD2, MD5, SHA_1, SHA_256, SHA_384, SHA_512
* @param {String} charset The name of Enum Charset: US_ASCII, UTF_8.
* @returns {String} The hash of value.
*/
function hash_(str, digestAlgorithm, charset) {
charset = charset || Utilities.Charset.UTF_8;
digestAlgorithm = digestAlgorithm || 'MD5';
var digest = Utilities.computeDigest(Utilities.DigestAlgorithm[digestAlgorithm], str, charset);
var __ = '';
for (i = 0; i < digest.length; i++) {
//var byte = digest[i];
//if (byte < 0) byte += 256;
//var bStr = byte.toString(16);
var bStr = (digest[i] < 0 ? digest[i] += 256 : digest[i]).toString(16);
if (bStr.length == 1) bStr = '0' + bStr;
__ += bStr;
}
return __;
}
https://plus.google.com/u/0/+MarcoColomboMow/posts/GXgRCh98HTu
HtmlService.createHtmlOutput('Hello world')
//Responsive
.addMetaTag('viewport', 'width=device-width, initial-scale=1')
HtmlService.createHtmlOutput('Hello world')
//WEBMASTER TOOLS
.addMetaTag('google-site-verification', '<METATAG_FROM_WEBMASTER_TOOLS>')
On an external host
<!DOCTYPE html>
<html lang="en">
<head>
<title></title>
</head>
<body>
<iframe src="https://script.google.com/macros/s/ABCD1234/exec"></iframe>
</body>
</html>
The webapp
//This is the magic header that allows this to be done with no particular Google security warnings
function doGet(e) {
var hs = HtmlService
.createTemplateFromFile('html-template')
.evaluate()
.setTitle('My App')
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return hs;
}
function doPost(e) {
if (!e || !e.postData) {
e = {};
e.postData = {
getDataAsString: function() {
return {}
}
};
}
try {
console.log(JSON.parse(e.postData.getDataAsString()));
} catch (err) {
console.err(err);
}
}