SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Cloud based lists and validation
Google Apps Script lists Excel Liberation
Sharing lists in the cloud
 Work from shared copies of a list
 Use familiar functions like vLookup, Index, Match to
access shared lists
 Apply lists to validate data entry
 Sort and filter lists
 Manipulate lists as data
carrier
aa
ba
ua
name
American
Airlines
British
Airways
United
Airlines
Here’s a 2 column list of
the type often used in
spreadsheets to validate
data input, or used as a
lookup
Using it in more than one Excel
workbook leads to
•list sprawl/divergence
•failures if a shared list is moved
Using scriptDB as list store
 Google spreadsheets,
in the cloud, should
solve these excel
sharing problems
 But Vlookup, Index,
Match and Validation
techniques are all
copied faithfully from
Excel
 So we’ll just replicate
the Excel fragility and
sprawl
 Unless..
 Sharing blisters from
ScriptDB
Lists..
..
Shared scriptDBs
Local scriptDBs
Lists..
..
Lists..
..
Spreadsheets
Lookups and
validation
Vocabulary
carrier
aa
ba
ua
name
American
Airlines
British
Airways
United
Airlines
listName: ‘airlines’
library: ‘blister’
Headers: 1,2 or
‘carrier’,’name’
 Lists are references as ‘library.listName’ – for example, ‘blister.airlines’
 Columns are referenced by number or name – (‘blister.airlines’,2) is the same as
(‘blister.airlines’,’name’)
 The library is the name of the scriptdb resource in which the list is stored
Simple functions
Finding, listing, sorting,properties
Finding
 Looking things up (vlookup)
=blisterLookup("blister.airlines","AA","carrier","name")
American Airlines
 Finding position of (match)
=blisterMatch("blister.airlines","UA","carrier")
200
 Get value at (index)
=blisterIndex("blister.airlines",120,"name")
Lan Peru
Listing
 The list headers
=blisterHeaders("blister.airlines")
carrier name link
 The list data
=blisterData("blister.airlines")
2F Frontier Flying Service
2J Air Burkina
2N Nextjet
3M Silver Airways
3X Japan Air Commuter
4Z Airlink
... etc
 List just one column
=blisterList("blister.airlines","name")
Frontier Flying Service
Air Burkina
Nextjet
Silver Airways
Japan Air Commuter
Airlink
... etc
Sorting
 list data sorted by name
=blisterData("blister.airlines","name")
JP Adria Airways
RE Aer Arann Express
EI Aer Lingus
SU Aeroflot Russian Airlines
AR Aerolineas Argentinas
AM Aeromexico
...etc..
 List just one column sorted by name
=blisterList("blister.airlines","name","name")
Adria Airways
Aer Arann Express
Aer Lingus
Aeroflot Russian Airlines
Aerolineas Argentinas
Aeromexico
...etc..
Properties
 Directory of blisters in a library
=blisterdirectory("blister")
currencies List of currencies and exchange rates by country and ISO
code
languageCodes list of language codes by country
champagne volume of champagne shipped
Billboardhot100 billboard top 100
airlines list of airlines and their flight codes
 Date that the list was last updated
=blisterUpdateDate("blister.airlines")
24/09/2013 17:33:43
Integration with other functions
Complex lists
Complex lists
 So far we’ve looked at simple lookup lists
 We can also use data as a blister lookup and to
validate other data against
Consider an inventory list for a car dealership, loaded as a blister, this
time to a scriptdb local to this spreadsheet
Simple functions on complex list
=blisterData("car_list") sorted by price in descending order
=blisterData("car_list","price",true)
complex list summarizations
The unique list of colors sorted by color
=blisterUnique("car_list","color","color")
The make and price of the 5 most expensive cars
=blisterList("car_list","make","price",true,5) and
=blisterList("car_list","price","price",true,5)
complex list summarizations
The position of the most expensive yellow car in the list
=blisterMatch("car_list","yellow","color","price",true)
The make of the 3rd cheapest car
=blisterIndex("car_list",3,"make","price")
The total price of all the cars on the lot
=sum(blisterList("car_list","price"))
The color of the cheapest bmw on the lot
=blisterLookup("car_list","bmw","make","color","price")
filtering
The total value of all red mercedes
=sum(blisterList("car_list","price",,,,"make","mercedes","color","red"))
The number of Audi A1
=count(blisterList("car_list","price",,,,"make","audi","model","a1"))
All data about all black Audis
=blisterData("car_list","make",,,"color","black","make","audi")
All red cars sorted by descending price and their prices
and makes
=blisterList("car_list","make","price",true,,"color","red")
=blisterList("car_list","price","price",true,,"color","red")
Makes we have in white
=blisterUnique("car_list","make",,,,"color","white")
validation
Applying lists as data entry validation
dataValidation
 You can apply data validation programmatically in
Google Apps Script
 Any blister can be applied to a range. Data entered
in that range will be validated against the data in the
list
 Validation can be dependent (dynamically applied
according to values already entered in other
columns), or non dependent – list values are applied
independently to each column
Non dependent validation
{ listName : 'blister.currencies' ,
blister: [ {listId: 'ISO', sortId: 'ISO' } ] ,
applies: [ {sheet:'enterCurrencies', range:'a2:a'} ] } ;
This definition applied on opening workbook
dependent validation
{ listName : 'car_list' , applies: [ {sheet:'enterCars', range:'a2:c'} ] };
This definition applied on opening workbook
On every cell change, the validation is re-evaluated
function onEdit(e) {
if(e.range.getDataValidations()) {
reApplyIfNeeded (e,generateValidations());
}
}
Summary
 Centralizing lists in shared scriptDB leverages the
availability of cloud based spreadsheets
 Blisters can be easily created from many sources –
on Excel Liberation website, you can see examples
of loads from XML feeds, spreadsheets, REST
queries, Fusion tables and other places
 API available for customized capabilities
 Using triggers, you can schedule blister updates in
the cloud – for example currency exchange rates
 All source is free and open under creative commons
license
More Information
 For more information, see Excel Liberation website
and Blog

Mais conteúdo relacionado

Mais de Bruce McPherson

Do something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databasesDo something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databasesBruce McPherson
 
Do something in 5 with gas 9-copy between databases with oauth2
Do something in 5 with gas 9-copy between databases with oauth2Do something in 5 with gas 9-copy between databases with oauth2
Do something in 5 with gas 9-copy between databases with oauth2Bruce McPherson
 
Do something in 5 with apps scripts number 6 - fusion crossfilter
Do something in 5 with apps scripts number 6 - fusion crossfilterDo something in 5 with apps scripts number 6 - fusion crossfilter
Do something in 5 with apps scripts number 6 - fusion crossfilterBruce McPherson
 
Do something in 5 with gas 7-email log
Do something in 5 with gas 7-email logDo something in 5 with gas 7-email log
Do something in 5 with gas 7-email logBruce McPherson
 
Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...
Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...
Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...Bruce McPherson
 
Do something in 5 with gas 4- Get your analytics profiles to a spreadsheet
Do something in 5 with gas 4- Get your analytics profiles to a spreadsheetDo something in 5 with gas 4- Get your analytics profiles to a spreadsheet
Do something in 5 with gas 4- Get your analytics profiles to a spreadsheetBruce McPherson
 
Do something in 5 with gas 3-simple invoicing app
Do something in 5 with gas 3-simple invoicing appDo something in 5 with gas 3-simple invoicing app
Do something in 5 with gas 3-simple invoicing appBruce McPherson
 
Do something in 5 with gas 2-graduate to a database
Do something in 5 with gas 2-graduate to a databaseDo something in 5 with gas 2-graduate to a database
Do something in 5 with gas 2-graduate to a databaseBruce McPherson
 
Do something in 5 minutes with gas 1-use spreadsheet as database
Do something in 5 minutes with gas 1-use spreadsheet as databaseDo something in 5 minutes with gas 1-use spreadsheet as database
Do something in 5 minutes with gas 1-use spreadsheet as databaseBruce McPherson
 
Google apps script database abstraction exposed version
Google apps script database abstraction   exposed versionGoogle apps script database abstraction   exposed version
Google apps script database abstraction exposed versionBruce McPherson
 
Google cloud datastore driver for Google Apps Script DB abstraction
Google cloud datastore driver for Google Apps Script DB abstractionGoogle cloud datastore driver for Google Apps Script DB abstraction
Google cloud datastore driver for Google Apps Script DB abstractionBruce McPherson
 
Using script db as a deaddrop to pass data between GAS, JS and Excel
Using script db as a deaddrop to pass data between GAS, JS and ExcelUsing script db as a deaddrop to pass data between GAS, JS and Excel
Using script db as a deaddrop to pass data between GAS, JS and ExcelBruce McPherson
 
JavaScript client API for Google Apps Script API primer
JavaScript client API for Google Apps Script API primerJavaScript client API for Google Apps Script API primer
JavaScript client API for Google Apps Script API primerBruce McPherson
 
VBA API for scriptDB primer
VBA API for scriptDB primerVBA API for scriptDB primer
VBA API for scriptDB primerBruce McPherson
 
Javascript like objects and JSON processing in VBA
Javascript like objects and JSON processing in VBAJavascript like objects and JSON processing in VBA
Javascript like objects and JSON processing in VBABruce McPherson
 

Mais de Bruce McPherson (17)

Do something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databasesDo something in 5 with gas 8-copy between databases
Do something in 5 with gas 8-copy between databases
 
Do something in 5 with gas 9-copy between databases with oauth2
Do something in 5 with gas 9-copy between databases with oauth2Do something in 5 with gas 9-copy between databases with oauth2
Do something in 5 with gas 9-copy between databases with oauth2
 
Goa tutorial
Goa tutorialGoa tutorial
Goa tutorial
 
Do something in 5 with apps scripts number 6 - fusion crossfilter
Do something in 5 with apps scripts number 6 - fusion crossfilterDo something in 5 with apps scripts number 6 - fusion crossfilter
Do something in 5 with apps scripts number 6 - fusion crossfilter
 
Do something in 5 with gas 7-email log
Do something in 5 with gas 7-email logDo something in 5 with gas 7-email log
Do something in 5 with gas 7-email log
 
Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...
Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...
Do something useful in Apps Script 5. Get your analytics pageviews to a sprea...
 
Do something in 5 with gas 4- Get your analytics profiles to a spreadsheet
Do something in 5 with gas 4- Get your analytics profiles to a spreadsheetDo something in 5 with gas 4- Get your analytics profiles to a spreadsheet
Do something in 5 with gas 4- Get your analytics profiles to a spreadsheet
 
Do something in 5 with gas 3-simple invoicing app
Do something in 5 with gas 3-simple invoicing appDo something in 5 with gas 3-simple invoicing app
Do something in 5 with gas 3-simple invoicing app
 
Do something in 5 with gas 2-graduate to a database
Do something in 5 with gas 2-graduate to a databaseDo something in 5 with gas 2-graduate to a database
Do something in 5 with gas 2-graduate to a database
 
Do something in 5 minutes with gas 1-use spreadsheet as database
Do something in 5 minutes with gas 1-use spreadsheet as databaseDo something in 5 minutes with gas 1-use spreadsheet as database
Do something in 5 minutes with gas 1-use spreadsheet as database
 
Google apps script database abstraction exposed version
Google apps script database abstraction   exposed versionGoogle apps script database abstraction   exposed version
Google apps script database abstraction exposed version
 
Google cloud datastore driver for Google Apps Script DB abstraction
Google cloud datastore driver for Google Apps Script DB abstractionGoogle cloud datastore driver for Google Apps Script DB abstraction
Google cloud datastore driver for Google Apps Script DB abstraction
 
Dbabstraction
DbabstractionDbabstraction
Dbabstraction
 
Using script db as a deaddrop to pass data between GAS, JS and Excel
Using script db as a deaddrop to pass data between GAS, JS and ExcelUsing script db as a deaddrop to pass data between GAS, JS and Excel
Using script db as a deaddrop to pass data between GAS, JS and Excel
 
JavaScript client API for Google Apps Script API primer
JavaScript client API for Google Apps Script API primerJavaScript client API for Google Apps Script API primer
JavaScript client API for Google Apps Script API primer
 
VBA API for scriptDB primer
VBA API for scriptDB primerVBA API for scriptDB primer
VBA API for scriptDB primer
 
Javascript like objects and JSON processing in VBA
Javascript like objects and JSON processing in VBAJavascript like objects and JSON processing in VBA
Javascript like objects and JSON processing in VBA
 

Último

React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFMichael Gough
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...BookNet Canada
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneUiPathCommunity
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...amber724300
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessWSO2
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 

Último (20)

React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
All These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDFAll These Sophisticated Attacks, Can We Really Detect Them - PDF
All These Sophisticated Attacks, Can We Really Detect Them - PDF
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
Transcript: New from BookNet Canada for 2024: BNC SalesData and LibraryData -...
 
WomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyoneWomenInAutomation2024: AI and Automation for eveyone
WomenInAutomation2024: AI and Automation for eveyone
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
JET Technology Labs White Paper for Virtualized Security and Encryption Techn...
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Accelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with PlatformlessAccelerating Enterprise Software Engineering with Platformless
Accelerating Enterprise Software Engineering with Platformless
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 

Cloud based lists and validation with Google Apps Script

  • 1. Cloud based lists and validation Google Apps Script lists Excel Liberation
  • 2. Sharing lists in the cloud  Work from shared copies of a list  Use familiar functions like vLookup, Index, Match to access shared lists  Apply lists to validate data entry  Sort and filter lists  Manipulate lists as data
  • 3. carrier aa ba ua name American Airlines British Airways United Airlines Here’s a 2 column list of the type often used in spreadsheets to validate data input, or used as a lookup Using it in more than one Excel workbook leads to •list sprawl/divergence •failures if a shared list is moved
  • 4. Using scriptDB as list store  Google spreadsheets, in the cloud, should solve these excel sharing problems  But Vlookup, Index, Match and Validation techniques are all copied faithfully from Excel  So we’ll just replicate the Excel fragility and sprawl  Unless..  Sharing blisters from ScriptDB Lists.. .. Shared scriptDBs Local scriptDBs Lists.. .. Lists.. .. Spreadsheets Lookups and validation
  • 5. Vocabulary carrier aa ba ua name American Airlines British Airways United Airlines listName: ‘airlines’ library: ‘blister’ Headers: 1,2 or ‘carrier’,’name’  Lists are references as ‘library.listName’ – for example, ‘blister.airlines’  Columns are referenced by number or name – (‘blister.airlines’,2) is the same as (‘blister.airlines’,’name’)  The library is the name of the scriptdb resource in which the list is stored
  • 7. Finding  Looking things up (vlookup) =blisterLookup("blister.airlines","AA","carrier","name") American Airlines  Finding position of (match) =blisterMatch("blister.airlines","UA","carrier") 200  Get value at (index) =blisterIndex("blister.airlines",120,"name") Lan Peru
  • 8. Listing  The list headers =blisterHeaders("blister.airlines") carrier name link  The list data =blisterData("blister.airlines") 2F Frontier Flying Service 2J Air Burkina 2N Nextjet 3M Silver Airways 3X Japan Air Commuter 4Z Airlink ... etc  List just one column =blisterList("blister.airlines","name") Frontier Flying Service Air Burkina Nextjet Silver Airways Japan Air Commuter Airlink ... etc
  • 9. Sorting  list data sorted by name =blisterData("blister.airlines","name") JP Adria Airways RE Aer Arann Express EI Aer Lingus SU Aeroflot Russian Airlines AR Aerolineas Argentinas AM Aeromexico ...etc..  List just one column sorted by name =blisterList("blister.airlines","name","name") Adria Airways Aer Arann Express Aer Lingus Aeroflot Russian Airlines Aerolineas Argentinas Aeromexico ...etc..
  • 10. Properties  Directory of blisters in a library =blisterdirectory("blister") currencies List of currencies and exchange rates by country and ISO code languageCodes list of language codes by country champagne volume of champagne shipped Billboardhot100 billboard top 100 airlines list of airlines and their flight codes  Date that the list was last updated =blisterUpdateDate("blister.airlines") 24/09/2013 17:33:43
  • 11. Integration with other functions Complex lists
  • 12. Complex lists  So far we’ve looked at simple lookup lists  We can also use data as a blister lookup and to validate other data against Consider an inventory list for a car dealership, loaded as a blister, this time to a scriptdb local to this spreadsheet
  • 13. Simple functions on complex list =blisterData("car_list") sorted by price in descending order =blisterData("car_list","price",true)
  • 14. complex list summarizations The unique list of colors sorted by color =blisterUnique("car_list","color","color") The make and price of the 5 most expensive cars =blisterList("car_list","make","price",true,5) and =blisterList("car_list","price","price",true,5)
  • 15. complex list summarizations The position of the most expensive yellow car in the list =blisterMatch("car_list","yellow","color","price",true) The make of the 3rd cheapest car =blisterIndex("car_list",3,"make","price") The total price of all the cars on the lot =sum(blisterList("car_list","price")) The color of the cheapest bmw on the lot =blisterLookup("car_list","bmw","make","color","price")
  • 16. filtering The total value of all red mercedes =sum(blisterList("car_list","price",,,,"make","mercedes","color","red")) The number of Audi A1 =count(blisterList("car_list","price",,,,"make","audi","model","a1")) All data about all black Audis =blisterData("car_list","make",,,"color","black","make","audi") All red cars sorted by descending price and their prices and makes =blisterList("car_list","make","price",true,,"color","red") =blisterList("car_list","price","price",true,,"color","red") Makes we have in white =blisterUnique("car_list","make",,,,"color","white")
  • 17. validation Applying lists as data entry validation
  • 18. dataValidation  You can apply data validation programmatically in Google Apps Script  Any blister can be applied to a range. Data entered in that range will be validated against the data in the list  Validation can be dependent (dynamically applied according to values already entered in other columns), or non dependent – list values are applied independently to each column
  • 19. Non dependent validation { listName : 'blister.currencies' , blister: [ {listId: 'ISO', sortId: 'ISO' } ] , applies: [ {sheet:'enterCurrencies', range:'a2:a'} ] } ; This definition applied on opening workbook
  • 20. dependent validation { listName : 'car_list' , applies: [ {sheet:'enterCars', range:'a2:c'} ] }; This definition applied on opening workbook On every cell change, the validation is re-evaluated function onEdit(e) { if(e.range.getDataValidations()) { reApplyIfNeeded (e,generateValidations()); } }
  • 21. Summary  Centralizing lists in shared scriptDB leverages the availability of cloud based spreadsheets  Blisters can be easily created from many sources – on Excel Liberation website, you can see examples of loads from XML feeds, spreadsheets, REST queries, Fusion tables and other places  API available for customized capabilities  Using triggers, you can schedule blister updates in the cloud – for example currency exchange rates  All source is free and open under creative commons license
  • 22. More Information  For more information, see Excel Liberation website and Blog