├── .github ├── FUNDING.yml └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature-request.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── PRIVACYPOLICY.md ├── README.md ├── ReleaseNotes.pdf ├── SPONSORS.md ├── docs ├── _config.yml ├── faq.md ├── format │ ├── exportfolder.md │ ├── exportformat.md │ └── exportsheets.md ├── general │ ├── collapseprefix.md │ ├── collapsesinglerowsheets.md │ ├── exportboolsasints.md │ ├── ignoreemptycells.md │ ├── ignoreprefix.md │ ├── includefirstcolumninexport.md │ ├── minifydata.md │ ├── nestedelements.md │ ├── replacefile.md │ ├── unwrapprefix.md │ └── unwrapsinglerowsheets.md ├── images │ └── settings │ │ ├── settings01.png │ │ └── settings02.png ├── index.md ├── json │ ├── arrayprefix.md │ ├── arrayseparatorcharacter.md │ ├── emptyvalueformat.md │ ├── exportcellarrays.md │ ├── exportcellobjects.md │ ├── exportcontentsasarray.md │ ├── exportsheetarrays.md │ ├── exportvaluearrays.md │ ├── forcestringvalues.md │ ├── nestedarrayprefix.md │ └── nullvalueformat.md ├── settings.md ├── tips │ └── tipsntricksxml.md ├── troubleshooting.md └── xml │ ├── attributesprefix.md │ ├── childelementsprefix.md │ ├── dontformatillegalcharacters.md │ ├── exportcolumnsaschildelements.md │ ├── includexmldeclaration.md │ ├── innertextprefix.md │ ├── namereplacementcharacter.md │ ├── rootelement.md │ ├── rootnamespaceuri.md │ ├── standalone.md │ ├── xmlencoding.md │ ├── xmlnamespaces.md │ └── xmlversion.md ├── images ├── esd_banner.png ├── esd_icon.svg ├── esd_icon_json.svg ├── esd_icon_sheets.svg └── esd_icon_xml.svg └── src ├── ExportSheetData.gs ├── FilePicker.html ├── Modal_About.html ├── Modal_Error.html ├── Modal_Export.html ├── Modal_NewVersion.html ├── Modal_Settings.html ├── Modal_Support.html ├── Modal_Visualize.html ├── Sidebar.html ├── SidebarJavaScript.html ├── SidebarStyle.html ├── Spinner.html ├── appsscript.json └── secrets.html /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [Synthoid] 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create an issue to help improve ESD 4 | title: "(Bug) Title" 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Enable '....' 17 | 3. Export or Visualize data 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Info (please complete the following information):** 27 | - Browser [e.g. chrome, safari] 28 | - Do you have multiple accounts signed in? 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest a new feature or improvement for ESD 4 | title: "(General | JSON | XML) Title" 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of unwelcome sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at chris@sleepyowlsoft.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Chris Ingerson 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PRIVACYPOLICY.md: -------------------------------------------------------------------------------- 1 | Privacy Policy 2 | -------------- 3 | 4 | Starting January 8, 2018, Google will require all apps and add-ons to be verified if they access "sensitive Google APIs." Since [Export Sheet Data](https://workspace.google.com/marketplace/app/export_sheet_data/903838927001) (ESD) must access users' Google Dive files to function, it needs to be verified so users are not shown a terrifying "Unverified App" screen. Part of that verification requires having a visible privacy policy which can be read below. 5 | 6 | ### When does ESD collect my personal information? 7 | 8 | Never. Any personal information collected (which should be none) is purely done by internal Google processes. No personal data collection has been coded into ESD. Your data is YOUR data. 9 | 10 | ### Where does ESD send my personal information? 11 | 12 | Nowhere. Any personal information sent anywhere (which should be nowhere) is purely done by internal Google processes. I have not coded any personal data sharing into ESD. Your data is no one else's business. 13 | 14 | ### Will ESD ever do anything with my personal information? 15 | 16 | Probably not. The only information gathering likely to ever be done by ESD would be analytics to see how many users ESD has and how often it is used. This is not something it currently does, and if it ever is done it would purely be so I could look at pretty graphs when I get bored. 17 | 18 | ### Why make a privacy policy if you aren't collecting personal information? 19 | 20 | Google requires it for verification. I would prefer new users not have to take extra steps to install ESD nor do I want users to feel uneasy because they are installing an "unverified add-on." 21 | 22 | ### What scopes are used by ESD and why? 23 | 24 | The sensitive scopes used by ESD are listed and briefly explained below. A more detailed account of why these scopes are required can be found in the [FAQ](https://github.com/Synthoid/ExportSheetData/blob/master/docs/faq.md) page. You can view official definitions of each scope here. 25 | 26 | - `https://www.googleapis.com/auth/userinfo.email` 27 | - Scope included in add-ons by default. Allows add-ons to view your email. Not used directly by ESD. 28 | - `https://www.googleapis.com/auth/script.container.ui` 29 | - Scope included in add-ons by default. Allows access to the app's UI. 30 | - `https://www.googleapis.com/auth/drive` 31 | - Allows reading and writing Google Drive files. This is used to create files for the data exported by ESD. Unfortunately there is no way to limit this to only creating or modifying files similar to .read-only scopes so ESD must have authority to read files as well, though it does not actually do so. 32 | - `https://www.googleapis.com/auth/spreadsheets.currentonly` 33 | - Allows access to data contained in the spreadsheets that have installed ESD. This is used to pull data into ESD for export. 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Export Sheet Data](images/esd_banner.png) 2 | 3 | Export Sheet Data is an add-on for Google Sheets that allows sheets to be exported as JSON or XML. 4 | 5 | Goals 6 | ----- 7 | **Convenient:** Export Sheet Data is meant to be simple to use but very powerful. No more exporting multiple CSVs then compiling data. 8 | 9 | **Customizable:** Options and formats can be tweaked to reflect personal taste. Default or stringified values for JSON. Attributes or child elements for XML. Format your data the way you want. 10 | 11 | Install 12 | ------- 13 | [Install link](https://workspace.google.com/marketplace/app/export_sheet_data/903838927001) 14 | 15 | Export Sheet Data is available on the Google Workspace Marketplace. 16 | 17 | > [!WARNING] 18 | > There is a known bug that can affect add-ons while multiple accounts are signed in. If you run into a situation where the ESD sidebar doesn't seem to load, visit the [troubleshooting](docs/troubleshooting.md) page for help. 19 | 20 | Documentation 21 | ------------- 22 | [Documentation index page](https://github.com/Synthoid/ExportSheetData/blob/master/docs/index.md) 23 | 24 | The best way to learn how to use Export Sheet Data is by using it! Open the sidebar, read the tooltips of various seettings, and experiment by using the Visualize option. 25 | 26 | For detailed documentation on each option, take a look at ESD's documentation. 27 | 28 | If you want to create more advanced data structures, make sure to read the Wiki page about [Nested Elements](https://github.com/Synthoid/ExportSheetData/wiki/Nested-Elements). 29 | 30 | Troubleshooting 31 | --------------- 32 | If you ever experience an issue or have difficulty using ESD, you can look at the [toubleshooting](docs/troubleshooting.md) page for help. This page contains solutions for common issues you may encounter, especially for the more complex features of ESD. 33 | 34 | If you notice anything the troubleshooting page does not cover, feel free to make a new issue to help improve ESD! 35 | 36 | Frequently Asked Questions 37 | -------------------------- 38 | You can see answers to frequently asked questions about ESD [here](docs/faq.md). 39 | 40 | Development Status 41 | ------------------ 42 | Export Sheet Data supports a wide variety of features. Currently, this includes: 43 | 44 | **JSON** 45 | * Force all data to string values 46 | * Export individual cells as JSON objects or arrays 47 | * Export a sheet's contents as an array of JSON objects 48 | * Create complex data structures via Nested Elements 49 | 50 | **XML** 51 | * Export columns as attributes, child elements, or inner text of a row's element 52 | * Automatic formatting of XML illegal characters like `&`, `<`, and `>` 53 | * XML comments and declaration support 54 | * XML namespaces 55 | 56 | **General** 57 | * Visualize data 58 | * Export files to Drive 59 | * Replace target Drive file contents 60 | * Download files directly 61 | * Export specific sheets 62 | * Unwrap or collapse a sheet's data for easier access after exporting 63 | * Minify exported data to produce smaller files 64 | * Export booleans as integers 65 | 66 | Contributing 67 | ------------ 68 | If you would like to add a feature to Export Sheet Data, be sure to read the [wiki page on contributing](https://github.com/Synthoid/ExportSheetData/wiki/Contributing). Also, take a look at the [notes on project structure](https://github.com/Synthoid/ExportSheetData/wiki/Project-Structure) and check out the [currently open issues](https://github.com/Synthoid/ExportSheetData/issues). 69 | 70 | Supporting ESD 71 | -------------- 72 | If you use ESD and want to help ensure its continued development, consider supporting ESD via GitHub Sponsors! While ESD will remain free for everyone to use, supporting development with a few dollars a month will go a long way to helping me create examples, develop new features, and fix existing bugs. 73 | 74 | Credits 75 | ------- 76 | Developed by Chris Ingerson with help from the community. 77 | 78 | - Ignore rows support added by [jaeki-kim](https://github.com/jaeki-kim) 79 | - Visualization window HTML escaping added by [tomyam1](https://github.com/tomyam1) 80 | - Settings bug fixes by [pvirdone-s8](https://github.com/pvirdone-s8) 81 | 82 | License 83 | ------- 84 | Export Sheet Data is licensed under the MIT License, see [LICENSE](https://github.com/Synthoid/ExportSheetData/blob/master/LICENSE) for more information. 85 | -------------------------------------------------------------------------------- /ReleaseNotes.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Synthoid/ExportSheetData/adb3907f34372493f37441096db75ef90ae53023/ReleaseNotes.pdf -------------------------------------------------------------------------------- /SPONSORS.md: -------------------------------------------------------------------------------- 1 | Sponsors 2 | -------- 3 | This page will be updated to display the names of people supporting Export Sheet Data's development. 4 | 5 | **Note: Sponsors with their sponsorship visibility set to private will not be listed here, out of respect for their privacy.** 6 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-slate -------------------------------------------------------------------------------- /docs/faq.md: -------------------------------------------------------------------------------- 1 | Frequently Asked Questions 2 | -------------------------- 3 | This page contains answers to some frequently asked questions about ESD. 4 | 5 | 6 | Authorization Scopes 7 | -------------------- 8 | ESD is an add-on for Google Sheets, and as such requires specific [authorization scopes](https://developers.google.com/workspace/add-ons/concepts/workspace-scopes) to function. ***These scopes are the minimum required scopes needed for ESD to function.*** While it is understandable for users to be scrupulous about authorizing certain functionality, every scope used is needed and ESD tries to ue the most restricted scopes possible. Your data is *your* data! 9 | 10 | Scopes used by ESD are: 11 | 12 | Scope | URL 13 | ----- | --- 14 | Per-file access | `https://www.googleapis.com/auth/drive.file` 15 | Current Sheets file access | `https://www.googleapis.com/auth/spreadsheets.currentonly` 16 | Apps Script UI access | `https://www.googleapis.com/auth/script.container.ui` 17 | Read user's email address | `https://www.googleapis.com/auth/userinfo.email` 18 | 19 | A more detailed breakdown of these scopes, what they authorize, and how ESD uses them follows. 20 | 21 | Scope | Authorizes | Functionality 22 | ----- | ---------- | ------------- 23 | `drive.file` | Grants access to Google Drive files and folders that were created by ESD or specifically targeted by you via the Google Picker. | - File creation when exporting data.
- Updating contents of files selected via file picker.
- Accessing folders via file picker when setting custom export locations. 24 | `spreadsheets.currentonly` | Grants access to data in the current spreadsheet. | Needed to access spreadsheet data when exporting JSON or XML. 25 | `script.container.ui` | Grants access to Google's UI. | Needed to add ESD UI and menu items. 26 | `userinfo.email` | Grants access to email information about the user using ESD. | - Storing and loading settings for ESD.
- Executing ESD's various processes (when an add-on executes code, it is done under the email of the user) 27 | -------------------------------------------------------------------------------- /docs/format/exportfolder.md: -------------------------------------------------------------------------------- 1 | Export Folder 2 | ------------- 3 | Determines where files are exported to. There are two options: 4 | 5 | - *My Drive* 6 | - Export files to your root My Drive folder. 7 | - *Custom* 8 | - Export files to a custom folder that you select. 9 | 10 | > [!NOTE] 11 | > This setting is ignored when replacing a file's contents. 12 | -------------------------------------------------------------------------------- /docs/format/exportformat.md: -------------------------------------------------------------------------------- 1 | Export Format 2 | ------------- 3 | Determines the target exported data format. This can be either JSON or XML. 4 | -------------------------------------------------------------------------------- /docs/format/exportsheets.md: -------------------------------------------------------------------------------- 1 | Export Sheet(s) 2 | --------------- 3 | 4 | Export Sheet(s) is used to select the sheet tabs to export. This can be all sheets, the currently active sheet only, or a custom set of sheets. 5 | 6 | ### Example: ### 7 | 8 | **Sheet name: `Planets`** 9 | 10 | Name | Radius 11 | ---- | ------ 12 | Earth | 6371 13 | Mars | 3389.5 14 | Jupiter | 69911 15 | 16 | **Sheet name: `Moons`** 17 | 18 | Name | Planet | Radius 19 | ---- | ------ | ------ 20 | Moon | Earth | 1737.4 21 | Phobos | Mars | 11 22 | Io | Jupiter | 1821.6 23 | 24 | *`All sheets` Output:* 25 | 26 | JSON: 27 | ```json 28 | { 29 | "Planets": { 30 | "Earth": { 31 | "Name": "Earth", 32 | "Radius": 6371 33 | }, 34 | "Mars": { 35 | "Name": "Mars", 36 | "Radius": 3389.5 37 | }, 38 | "Jupiter": { 39 | "Name": "Jupiter", 40 | "Radius": 69911 41 | } 42 | }, 43 | "Moons": { 44 | "Moon": { 45 | "Name": "Moon", 46 | "Planet": "Earth", 47 | "Radius": 1737.4 48 | }, 49 | "Phobos": { 50 | "Name": "Phobos", 51 | "Planet": "Mars", 52 | "Radius": 11 53 | }, 54 | "Io": { 55 | "Name": "Io", 56 | "Planet": "Jupiter", 57 | "Radius": 1821.6 58 | } 59 | } 60 | } 61 | ``` 62 | 63 | *`Current sheet only` Output (while viewing **Planets**):* 64 | 65 | JSON: 66 | ```json 67 | { 68 | "Earth": { 69 | "Name": "Earth", 70 | "Radius": 6371 71 | }, 72 | "Mars": { 73 | "Name": "Mars", 74 | "Radius": 3389.5 75 | }, 76 | "Jupiter": { 77 | "Name": "Jupiter", 78 | "Radius": 69911 79 | } 80 | } 81 | ``` 82 | 83 | *`Custom` Output (with only **Planets** selected):* 84 | 85 | JSON: 86 | ```json 87 | { 88 | "Planets": { 89 | "Earth": { 90 | "Name": "Earth", 91 | "Radius": 6371 92 | }, 93 | "Mars": { 94 | "Name": "Mars", 95 | "Radius": 3389.5 96 | }, 97 | "Jupiter": { 98 | "Name": "Jupiter", 99 | "Radius": 69911 100 | } 101 | } 102 | } 103 | ``` 104 | -------------------------------------------------------------------------------- /docs/general/collapseprefix.md: -------------------------------------------------------------------------------- 1 | Collapse sheet prefix 2 | --------------------- 3 | Sheets with names prefaced with the collapse prefix value will be collapsed if they have only one row of data (not counting keys). 4 | 5 | By default, the collapse prefix is `CS_` (short for "**C**ollapse **S**heet"). If the collapse prefix has been enabled but no prefix string has been set, the default prefix value (`CS_`) will be used. 6 | 7 | See also 8 | -------- 9 | - [Collapse single row sheets](collapsesinglerowsheets.md) 10 | - [Unwrap sheet prefix](unwrapprefix.md) 11 | -------------------------------------------------------------------------------- /docs/general/collapsesinglerowsheets.md: -------------------------------------------------------------------------------- 1 | Collapse single row sheets 2 | ------------- 3 | Remove the wrapping element of a sheet that has only one row (not including the keys row). 4 | 5 | This is similar to [unwrapping single row sheets](unwrapsinglerowsheets.md) but does not place sheet fields in the root JSON or XML element directly. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Character`** 10 | 11 | Name | Age | Role 12 | ---- | --- | ---- 13 | Cid | 25 | Fighter 14 | 15 | *Default Output:* 16 | 17 | JSON: 18 | ```json 19 | { 20 | "Character" : { 21 | "Cid" : { 22 | "Name":"Cid", 23 | "Age":25, 24 | "Role":"Fighter" 25 | } 26 | } 27 | } 28 | ``` 29 | XML: 30 | ```xml 31 | 32 | 33 | 34 | 25 35 | Fighter 36 | 37 | 38 | 39 | ``` 40 | 41 | *Collapsed Output:* 42 | 43 | JSON: 44 | ```json 45 | { 46 | "Character" : { 47 | "Name":"Cid", 48 | "Age":25, 49 | "Role":"Fighter" 50 | } 51 | } 52 | ``` 53 | XML: 54 | ```xml 55 | 56 | 57 | 25 58 | Fighter 59 | 60 | 61 | ``` 62 | 63 | *Unwrapped Output:* 64 | 65 | JSON: 66 | ```json 67 | { 68 | "Name":"Cid", 69 | "Age":25, 70 | "Role":"Fighter" 71 | } 72 | ``` 73 | XML: 74 | ```xml 75 | 76 | 77 | 25 78 | Fighter 79 | 80 | 81 | ``` 82 | -------------------------------------------------------------------------------- /docs/general/exportboolsasints.md: -------------------------------------------------------------------------------- 1 | Export bools as ints 2 | -------------------- 3 | Export boolean values as integers. This is commonly done to reduce file size as number values like `1` and `0` are much smaller than boolean values like `true` or `false`. 4 | 5 | This will have the following conversions: 6 | 7 | Boolean | Integer 8 | ------- | ------- 9 | true | 1 10 | false | 0 11 | 12 | ### Example: ### 13 | 14 | **Sheet: `Planets`** 15 | 16 | Name | Habitable 17 | ---- | --------- 18 | Earth | true 19 | Venus | false 20 | 21 | *Default Outputs:* 22 | 23 | JSON: 24 | ```json 25 | { 26 | "Planets": { 27 | "Earth": { 28 | "Habitable": true 29 | }, 30 | "Venus": { 31 | "Habitable": false 32 | } 33 | } 34 | } 35 | ``` 36 | XML: 37 | ```xml 38 | 39 | 40 | 41 | 42 | 43 | 44 | ``` 45 | 46 | *Export bools as ints Outputs:* 47 | 48 | JSON: 49 | ```json 50 | { 51 | "Planets": { 52 | "Earth": { 53 | "Habitable": 1 54 | }, 55 | "Venus": { 56 | "Habitable": 0 57 | } 58 | } 59 | } 60 | ``` 61 | XML: 62 | ```xml 63 | 64 | 65 | 66 | 67 | 68 | 69 | ``` 70 | -------------------------------------------------------------------------------- /docs/general/ignoreemptycells.md: -------------------------------------------------------------------------------- 1 | Ignore empty cells 2 | ------------------ 3 | Prevent cells with empty values from being exported. 4 | 5 | This is useful for reducing file size and clutter by removing elements with no value. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Flame Pokemon`** 10 | 11 | Name | Type1 | Type2 12 | ---- | ----- | ----- 13 | Charmander | Fire | 14 | Charmeleon | Fire | 15 | Charizard | Fire | Flying 16 | 17 | *Default Outputs:* 18 | 19 | JSON: 20 | ```json 21 | { 22 | "Flame Pokemon" : { 23 | "Charmander" : { 24 | "Name":"Charmander", 25 | "Type1":"Fire", 26 | "Type2":null 27 | }, 28 | "Charmeleon" : { 29 | "Name":"Charmeleon", 30 | "Type1":"Fire", 31 | "Type2":null 32 | }, 33 | "Charizard" : { 34 | "Name":"Charizard", 35 | "Type1":"Fire", 36 | "Type2":"Flying" 37 | } 38 | } 39 | } 40 | ``` 41 | XML: 42 | ```xml 43 | 44 | 45 | 46 | Fire 47 | 48 | 49 | 50 | Fire 51 | 52 | 53 | 54 | Fire 55 | Flying 56 | 57 | 58 | 59 | ``` 60 | 61 | *Ignore Outputs:* 62 | 63 | JSON: 64 | ```json 65 | { 66 | "Flame Pokemon" : { 67 | "Charmander" : { 68 | "Name":"Charmander", 69 | "Type1":"Fire" 70 | }, 71 | "Charmeleon" : { 72 | "Name":"Charmeleon", 73 | "Type1":"Fire" 74 | }, 75 | "Charizard" : { 76 | "Name":"Charizard", 77 | "Type1":"Fire", 78 | "Type2":"Flying" 79 | } 80 | } 81 | } 82 | ``` 83 | XML: 84 | ```xml 85 | 86 | 87 | 88 | Fire 89 | 90 | 91 | Fire 92 | 93 | 94 | Fire 95 | Flying 96 | 97 | 98 | 99 | ``` 100 | -------------------------------------------------------------------------------- /docs/general/ignoreprefix.md: -------------------------------------------------------------------------------- 1 | Ignore prefix 2 | ------------- 3 | Ignore prefix allows you to manually specify columns to ignore when exporting data. Keys starting with the specified string will be ignored. 4 | 5 | By default, the ignore prefix is `NOEX_` (short for "NO EXport"). If the ignore prefix has been enabled but no prefix string has been set, the default ignore prefix (`NOEX_`) will be used. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Monsters`** 10 | 11 | Name | HP | MP | STR | CHR | INT | Special | NOEX_Notes 12 | ---- | -- | -- | --- | --- | --- | ------- | ---------- 13 | Gorgon | 64 | 50 | 13 | 15 | 14 | 10% chance to petrify. | https://en.wikipedia.org/wiki/Gorgon 14 | Centaur | 15 | 25 | 15 | 7 | 13 | 5% chance to crit. 15 | Dragon | 100 | 200 | 20 | 15 | 20 | 40% resist magic. | Gary says this is too powerful. Reduce by 20%? 16 | Wraith | 2 | 10 | 5 | 3 | 4 | Immune to phyiscal attacks. 17 | 18 | *Default Outputs:* 19 | 20 | JSON: 21 | ```json 22 | { 23 | "Monsters": { 24 | "Gorgon": { 25 | "Name": "Gorgon", 26 | "HP": 64, 27 | "MP": 50, 28 | "STR": 13, 29 | "CHR": 15, 30 | "INT": 14, 31 | "Special": "10% chance to petrify.", 32 | "NOEX_Notes": "https://en.wikipedia.org/wiki/Gorgon" 33 | }, 34 | "Centaur": { 35 | "Name": "Centaur", 36 | "HP": 15, 37 | "MP": 25, 38 | "STR": 15, 39 | "CHR": 7, 40 | "INT": 13, 41 | "Special": "5% chance to crit.", 42 | "NOEX_Notes": null 43 | }, 44 | "Dragon": { 45 | "Name": "Dragon", 46 | "HP": 100, 47 | "MP": 200, 48 | "STR": 20, 49 | "CHR": 15, 50 | "INT": 20, 51 | "Special": "40% resist magic.", 52 | "NOEX_Notes": "Gary says this is too powerful. Reduce by 20%?" 53 | }, 54 | "Wraith": { 55 | "Name": "Wraith", 56 | "HP": 2, 57 | "MP": 10, 58 | "STR": 5, 59 | "CHR": 3, 60 | "INT": 4, 61 | "Special": "Immune to phyiscal attacks.", 62 | "NOEX_Notes": null 63 | } 64 | } 65 | } 66 | ``` 67 | 68 | XML: 69 | ```xml 70 | 71 | 72 | 73 | 64 74 | 50 75 | 13 76 | 15 77 | 14 78 | 10% chance to petrify. 79 | https://en.wikipedia.org/wiki/Gorgon 80 | 81 | 82 | 15 83 | 25 84 | 15 85 | 7 86 | 13 87 | 5% chance to crit. 88 | 89 | 90 | 91 | 100 92 | 200 93 | 20 94 | 15 95 | 20 96 | 40% resist magic. 97 | Gary says this is too powerful. Reduce by 20%? 98 | 99 | 100 | 2 101 | 10 102 | 5 103 | 3 104 | 4 105 | Immune to phyiscal attacks. 106 | 107 | 108 | 109 | 110 | 111 | ``` 112 | 113 | *Ignore Prefix Outputs:* 114 | 115 | JSON: 116 | ```json 117 | { 118 | "Monsters": { 119 | "Gorgon": { 120 | "Name": "Gorgon", 121 | "HP": 64, 122 | "MP": 50, 123 | "STR": 13, 124 | "CHR": 15, 125 | "INT": 14, 126 | "Special": "10% chance to petrify." 127 | }, 128 | "Centaur": { 129 | "Name": "Centaur", 130 | "HP": 15, 131 | "MP": 25, 132 | "STR": 15, 133 | "CHR": 7, 134 | "INT": 13, 135 | "Special": "5% chance to crit." 136 | }, 137 | "Dragon": { 138 | "Name": "Dragon", 139 | "HP": 100, 140 | "MP": 200, 141 | "STR": 20, 142 | "CHR": 15, 143 | "INT": 20, 144 | "Special": "40% resist magic." 145 | }, 146 | "Wraith": { 147 | "Name": "Wraith", 148 | "HP": 2, 149 | "MP": 10, 150 | "STR": 5, 151 | "CHR": 3, 152 | "INT": 4, 153 | "Special": "Immune to phyiscal attacks." 154 | } 155 | } 156 | } 157 | ``` 158 | 159 | XML: 160 | ```xml 161 | 162 | 163 | 164 | 64 165 | 50 166 | 13 167 | 15 168 | 14 169 | 10% chance to petrify. 170 | 171 | 172 | 15 173 | 25 174 | 15 175 | 7 176 | 13 177 | 5% chance to crit. 178 | 179 | 180 | 100 181 | 200 182 | 20 183 | 15 184 | 20 185 | 40% resist magic. 186 | 187 | 188 | 2 189 | 10 190 | 5 191 | 3 192 | 4 193 | Immune to phyiscal attacks. 194 | 195 | 196 | 197 | ``` 198 | -------------------------------------------------------------------------------- /docs/general/includefirstcolumninexport.md: -------------------------------------------------------------------------------- 1 | Include first column in export 2 | ------------------------------ 3 | Include the first column of each row as a distinct element in addition to it being used for the name of the row element. 4 | 5 | By default, the first column of a row is not exported as a distinct XML element or JSON value as it is used to name the row element. Enabling this will cause the first column to be exported as both the name (or key) of the row's element as well as its own distinct element like the other columns in a row. 6 | 7 | **JSON Notes:** 8 | 9 | Some JSON settings will override this setting and always include the first column, specifically [Nested Elements](nestedelements.md) and [Export sheet arrays](../json/exportsheetarrays.md). 10 | 11 | ### Example: ### 12 | 13 | **Sheet name: `Seasons`** 14 | 15 | Name | Temperature 16 | ---- | ----------- 17 | Spring | Warm 18 | Summer | Hot 19 | Autumn | Cool 20 | Winter | Cold 21 | 22 | *Default Output:* 23 | 24 | JSON: 25 | ```json 26 | { 27 | "Seasons": { 28 | "Spring": { 29 | "Temperature": "Warm" 30 | }, 31 | "Summer": { 32 | "Temperature": "Hot" 33 | }, 34 | "Autumn": { 35 | "Temperature": "Cool" 36 | }, 37 | "Winter": { 38 | "Temperature": "Cold" 39 | } 40 | } 41 | } 42 | ``` 43 | 44 | XML: 45 | ```xml 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | ``` 55 | 56 | *Include First Column Output:* 57 | 58 | JSON: 59 | ```json 60 | { 61 | "Seasons": { 62 | "Spring": { 63 | "Name": "Spring", 64 | "Temperature": "Warm" 65 | }, 66 | "Summer": { 67 | "Name": "Summer", 68 | "Temperature": "Hot" 69 | }, 70 | "Autumn": { 71 | "Name": "Autumn", 72 | "Temperature": "Cool" 73 | }, 74 | "Winter": { 75 | "Name": "Winter", 76 | "Temperature": "Cold" 77 | } 78 | } 79 | } 80 | ``` 81 | 82 | XML: 83 | ```xml 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | ``` 93 | -------------------------------------------------------------------------------- /docs/general/minifydata.md: -------------------------------------------------------------------------------- 1 | Minify Data 2 | ----------- 3 | Removes human readability formatting from exported data to produce a smaller file. The data is exactly the same, just without indentation and formatting used to make it more easily readable by humans. 4 | 5 | This is usually a good option to enable when exporting data that will only be read by parsers, not people. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Pokemon`** 10 | 11 | Name | Type1 | Type2 | Move1 | Move2 | Move3 | Move4 12 | ---- | ----- | ----- | ----- | ----- | ----- | ----- 13 | Bulbasaur | Grass | | Tackle | Growl | Leech Seed | Vine Whip 14 | Ivysaur | Grass | Poison | Leech Seed | Vine Whip | Sleep Powder | Take Down 15 | Venusaur | Grass | Poison | Leech Seed | Razor Leaf | Synthesis | Solar Beam 16 | 17 | *Default Outputs:* 18 | 19 | JSON: 20 | ```json 21 | { 22 | "Pokemon": [ 23 | { 24 | "Name": "Bulbasaur", 25 | "Type1": "Grass", 26 | "Move1": "Tackle", 27 | "Move2": "Growl", 28 | "Move3": "Leech Seed", 29 | "Move4": "Vine Whip" 30 | }, 31 | { 32 | "Name": "Ivysaur", 33 | "Type1": "Grass", 34 | "Type2": "Poison", 35 | "Move1": "Leech Seed", 36 | "Move2": "Vine Whip", 37 | "Move3": "Sleep Powder", 38 | "Move4": "Take Down" 39 | }, 40 | { 41 | "Name": "Venusaur", 42 | "Type1": "Grass", 43 | "Type2": "Poison", 44 | "Move1": "Leech Seed", 45 | "Move2": "Razor Leaf", 46 | "Move3": "Synthesis", 47 | "Move4": "Solar Beam" 48 | } 49 | ] 50 | } 51 | ``` 52 | 53 | XML: 54 | ```xml 55 | 56 | 57 | 58 | Bulbasaur 59 | Grass 60 | Tackle 61 | Growl 62 | Leech Seed 63 | Vine Whip 64 | 65 | 66 | Ivysaur 67 | Grass 68 | Poison 69 | Leech Seed 70 | Vine Whip 71 | Sleep Powder 72 | Take Down 73 | 74 | 75 | Venusaur 76 | Grass 77 | Poison 78 | Leech Seed 79 | Razor Leaf 80 | Synthesis 81 | Solar Beam 82 | 83 | 84 | 85 | ``` 86 | 87 | *Minify Outputs:* 88 | 89 | JSON: 90 | ```json 91 | {"Pokemon":[{"Name":"Bulbasaur","Type1":"Grass","Move1":"Tackle","Move2":"Growl","Move3":"Leech Seed","Move4":"Vine Whip"},{"Name":"Ivysaur","Type1":"Grass","Type2":"Poison","Move1":"Leech Seed","Move2":"Vine Whip","Move3":"Sleep Powder","Move4":"Take Down"},{"Name":"Venusaur","Type1":"Grass","Type2":"Poison","Move1":"Leech Seed","Move2":"Razor Leaf","Move3":"Synthesis","Move4":"Solar Beam"}]} 92 | ``` 93 | 94 | XML: 95 | ```xml 96 | BulbasaurGrassTackleGrowlLeech SeedVine WhipIvysaurGrassPoisonLeech SeedVine WhipSleep PowderTake DownVenusaurGrassPoisonLeech SeedRazor LeafSynthesisSolar Beam 97 | ``` 98 | 99 | ### File Sizes ### 100 | 101 | Minifying can reduce your exported data's file size exponentially as your sheet gets larger. If we compare the exported files for the following data: 102 | 103 | Name | Type1 | Type2 | Move1 | Move2 | Move3 | Move4 104 | ---- | ----- | ----- | ----- | ----- | ----- | ----- 105 | Bulbasaur | Grass | | Tackle | Growl | Leech Seed | Vine Whip 106 | Ivysaur | Grass | Poison | Leech Seed | Vine Whip | Sleep Powder | Take Down 107 | Venusaur | Grass | Poison | Leech Seed | Razor Leaf | Synthesis | Solar Beam 108 | Charmander | Fire | | Growl | Scratch | Ember | Smokescreen 109 | Charmeleon | Fire | | Scratch | Ember | Dragon Rage | Fire Fang 110 | Charizard | Fire | Flying | Flamethrower | Fly | Dragon Claw | Slash 111 | Squirtle | Water | | Tackle | Tail Whip | Water Gun | Withdraw 112 | Wartortle | Water | | Bubble | Bite | Water Pulse | Rapid Spin 113 | Blastoise | Water | | Surf | Bite | Hydro Pump | Ice Beam 114 | Caterpie | Bug | | String Shot | Tackle | Bug Bite | 115 | Metapod | Bug | | Harden | | | 116 | Butterfree | Bug | Flying | Psybeam | Sleep Powder | Bug Buzz | Air Slash 117 | Weedle | Bug | Poison | Poison Sting | String Shot | Bug Bite 118 | Kakuna | Bug | Poison | Harden | | | 119 | Beedrill | Bug | Poison | Pin Missile | Venoshock | Poison Jab | Fell Stinger 120 | Pidgey | Normal | Flying | Tackle | Sand Attack | Gust | Quick Attack 121 | Pideotto | Normal | Flying | Gust | Quick Attack | Whirlwind | Twister 122 | Pidgeot | Normal | Flying | Wing Attack | Roost | Fly | Air Slash 123 | Rattata | Normal | | Tackle | Tail Whip | Bite | Quick Attack 124 | Raticate | Normal | | Crunch | Hyper fang | Super Fang | Double-Edge 125 | Spearow | Normal | Flying | Growl | Peck | Leer | Pursuit 126 | Fearow | Normal | Flying | Fury Attack | Aerial Ace | Mirror Move | Drill Peck 127 | Ekans | Poison | | Leer | Wrap | Poison Sting | Bite 128 | Arbok | Poison | | Glare | Coil | Bite | Acid 129 | Pikachu | Electric | | Thunderbolt | Electo Ball | Surf | Quick Attack 130 | Raichu | Electric | | Thunderbolt | Thunder Wave | Mega Punch | Light Screen 131 | Sandshrew | Ground | | Defense Curl | Scratch | Sand Attack | Poison Sting 132 | Sandslash | Ground | | Rollout | Magnitude | Swift | Slash 133 | Nidoran♀ | Poison | | Growl | Scratch | Tail Whip | Double Kick 134 | Nidorina | Poison | | Bite | Toxic Spikes | Double Kick | Poison Sting 135 | Nidoqueen | Poison | Ground | Crunch | Toxic Spikes | Poison Fang | Earthquake 136 | Nidoran♂ | Poison | | Leer | Peck | Focus Energy | Double Kick 137 | Nidorino | Poison | | Horn Attack | Poison Sting | Double Kick | Peck 138 | Nidoking | Poison | Ground | Horn Drill | Earthquake | Poison Jab | Horn Attack 139 | 140 | We get the following file sizes: 141 | 142 | Format | Default | Minified 143 | ------ | ------- | -------- 144 | JSON | 6 KB | 4 KB 145 | XML | 7 KB | 5 KB 146 | 147 | A file with just 34 rows is about 2 KB smaller after minifiying. Imagine 151 rows, or 251, or 1025! 148 | -------------------------------------------------------------------------------- /docs/general/nestedelements.md: -------------------------------------------------------------------------------- 1 | Nested Elements 2 | --------------- 3 | Nested Elements allows you to create complex data sets by using specific syntax in your keys. 4 | 5 | For more information, see the [Nested Elements wiki page](https://github.com/Synthoid/ExportSheetData/wiki/Nested-Elements). 6 | -------------------------------------------------------------------------------- /docs/general/replacefile.md: -------------------------------------------------------------------------------- 1 | Replace file 2 | ------------ 3 | 4 | If set, will update the contents of the target file when exporting data instead of creating a new file. 5 | 6 | > [!NOTE] 7 | > While both JSON and XML can replace files, each format has its own settings that must be set individually. -------------------------------------------------------------------------------- /docs/general/unwrapprefix.md: -------------------------------------------------------------------------------- 1 | Unwrap sheet prefix 2 | ------------------- 3 | Sheets with names prefaced with the unwrap prefix value will be unwrapped. 4 | 5 | By default, the unwrap prefix is `US_` (short for "**U**nwrap **S**heet"). If the unwrap prefix has been enabled but no prefix string has been set, the default prefix value (`US_`) will be used. 6 | 7 | Unlike the [Unwrap single row sheets](unwrapsinglerowsheets.md) option, it is possible to unwrap a sheet with more than one row of data using the unwrap prefix. 8 | 9 | **General Note:** 10 | - When exporting only the [current sheet](../format/exportsheets.md), the exported data is automatically unwrapped. 11 | 12 | ### Example: ### 13 | 14 | **Sheet name: `US_Planets`** 15 | 16 | Name | Orbit Index 17 | ---- | ----------- 18 | Mercury | 1 19 | Venus | 2 20 | Earth | 3 21 | Mars | 4 22 | Jupiter | 5 23 | Saturn | 6 24 | Uranus | 7 25 | Neptune | 8 26 | 27 | *Default Output:* 28 | 29 | JSON: 30 | ```json 31 | { 32 | "US_Planets": { 33 | "Mercury": { 34 | "Orbit Index": 1 35 | }, 36 | "Venus": { 37 | "Orbit Index": 2 38 | }, 39 | "Earth": { 40 | "Orbit Index": 3 41 | }, 42 | "Mars": { 43 | "Orbit Index": 4 44 | }, 45 | "Jupiter": { 46 | "Orbit Index": 5 47 | }, 48 | "Saturn": { 49 | "Orbit Index": 6 50 | }, 51 | "Uranus": { 52 | "Orbit Index": 7 53 | }, 54 | "Neptune": { 55 | "Orbit Index": 8 56 | } 57 | } 58 | } 59 | ``` 60 | 61 | XML: 62 | ```xml 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | ``` 76 | 77 | *Unwrapped Output:* 78 | 79 | JSON: 80 | ```json 81 | { 82 | "Mercury": { 83 | "Orbit Index": 1 84 | }, 85 | "Venus": { 86 | "Orbit Index": 2 87 | }, 88 | "Earth": { 89 | "Orbit Index": 3 90 | }, 91 | "Mars": { 92 | "Orbit Index": 4 93 | }, 94 | "Jupiter": { 95 | "Orbit Index": 5 96 | }, 97 | "Saturn": { 98 | "Orbit Index": 6 99 | }, 100 | "Uranus": { 101 | "Orbit Index": 7 102 | }, 103 | "Neptune": { 104 | "Orbit Index": 8 105 | } 106 | } 107 | ``` 108 | 109 | XML: 110 | ```xml 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | ``` 122 | 123 | See also 124 | --------- 125 | - [Unwrap single row sheets](unwrapsinglerowsheets.md) 126 | - [Collapse sheet prefix](collapseprefix.md) 127 | -------------------------------------------------------------------------------- /docs/general/unwrapsinglerowsheets.md: -------------------------------------------------------------------------------- 1 | Unwrap single row sheets 2 | ------------- 3 | Unwrap single row sheets will remove the wrapping element of a sheet that has only one row (not including the keys row). 4 | 5 | This can be useful when you want certain data to be in the root element of your exported data. 6 | 7 | 8 | This is similar to [collapsing single row sheets](collapsesinglerowsheets.md) but places sheet fields in the root JSON or XML element directly. 9 | 10 | ### Example: ### 11 | 12 | **Sheet name: `Character`** 13 | 14 | Name | Age | Role 15 | ---- | --- | ---- 16 | Cid | 25 | Fighter 17 | 18 | *Default Outputs:* 19 | 20 | JSON: 21 | ```json 22 | { 23 | "Character" : { 24 | "Cid" : { 25 | "Name":"Cid", 26 | "Age":25, 27 | "Role":"Fighter" 28 | } 29 | } 30 | } 31 | ``` 32 | XML: 33 | ```xml 34 | 35 | 36 | 37 | Cid 38 | 25 39 | Fighter 40 | 41 | 42 | 43 | ``` 44 | 45 | *Unwrapped Output:* 46 | 47 | JSON: 48 | ```json 49 | { 50 | "Name":"Cid", 51 | "Age":25, 52 | "Role":"Fighter" 53 | } 54 | ``` 55 | XML: 56 | ```xml 57 | 58 | 59 | Cid 60 | 25 61 | Fighter 62 | 63 | 64 | ``` 65 | 66 | *Collapsed Output:* 67 | 68 | JSON: 69 | ```json 70 | { 71 | "Character" : { 72 | "Name":"Cid", 73 | "Age":25, 74 | "Role":"Fighter" 75 | } 76 | } 77 | ``` 78 | XML: 79 | ```xml 80 | 81 | 82 | Cid 83 | 25 84 | Fighter 85 | 86 | 87 | ``` 88 | -------------------------------------------------------------------------------- /docs/images/settings/settings01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Synthoid/ExportSheetData/adb3907f34372493f37441096db75ef90ae53023/docs/images/settings/settings01.png -------------------------------------------------------------------------------- /docs/images/settings/settings02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Synthoid/ExportSheetData/adb3907f34372493f37441096db75ef90ae53023/docs/images/settings/settings02.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | Welcome to the Export Sheet Data documentation compendium! 2 | ---------------------------------------------------------- 3 | 4 | Here you can find detailed descriptions for each of ESD's various options and settings, as well as a few guidelines for how to properly use ESD. 5 | 6 | **This documentation is still being written, so please bear with us and forgive any missing content while it is being completed.** 7 | 8 | [1. Format Settings](#format-settings)
9 | [2. General Settings](#general-settings)
10 | [3. JSON Settings](#json-settings)
11 | [4. XML Settings](#xml-settings)
12 | [5. Tips & Tricks](#tips-n-tricks) 13 | 14 | Format Settings 15 | --------------- 16 | These settings determine which format (JSON or XML) to export your data to, as well as the target sheets to export. 17 | 18 | Setting | Description 19 | ------- | ----------- 20 | [Export Format](format/exportformat.md) | Format for exported data (JSON or XML) 21 | [Export Folder](format/exportfolder.md) | Where files are exported to on Drive 22 | [Export Sheet(s)](format/exportsheets.md) | Sheet tabs to include in the exported data 23 | 24 | General Settings 25 | ---------------- 26 | These settings affect both JSON and XML data. 27 | 28 | ### Basic 29 | 30 | Setting | Description 31 | ------- | ----------- 32 | [Minify data](general/minifydata.md) | Output smaller files at the cost of human readability 33 | [Export bools as ints](general/exportboolsasints.md) | Export boolean values as integers 34 | [Ignore empty cells](general/ignoreemptycells.md) | Don't export cells with no value 35 | [Include first column in export](general/includefirstcolumninexport.md) | Export the first column of a row as a distinct element 36 | 37 | ### Advanced 38 | 39 | Setting | Description 40 | ------- | ----------- 41 | [Nested Elements](general/nestedelements.md) | Create complex data sets by using specific key syntax 42 | [Unwrap single row sheets](general/unwrapsinglerowsheets.md) | Place elements from a sheet containing one row in the root element 43 | [Collapse single row sheets](general/collapsesinglerowsheets.md) | Place a sheet's only row element fields in the sheet element 44 | [Ignore prefix](general/ignoreprefix.md) | Don't export columns whose keys start with a specific prefix 45 | [Unwrap prefix](general/unwrapprefix.md) | Unwrap sheets with names using the specified prefix 46 | [Collapse prefix](general/collapseprefix.md) | Collapse sheets with names using the specified prefix 47 | 48 | JSON Settings 49 | ------------- 50 | These settings only affect exported JSON data. 51 | 52 | ### Basic 53 | 54 | Setting | Description 55 | ------- | ----------- 56 | [Replace File](general/replacefile.md) | Replace the contents of a target file instead of exporting a newfile 57 | [Force string values](json/forcestringvalues.md) | Export all values as their string version 58 | [Export cell arrays](json/exportcellarrays.md) | Export JSON arrays when a cell contains a specific character 59 | [Export sheet arrays](json/exportsheetarrays.md) | Export sheets as JSON arrays with each row creating a single element 60 | [Export value arrays](json/exportvaluearrays.md) | Export a sheet as a JSON array if it has only one column 61 | 62 | ### Advanced 63 | 64 | Setting | Description 65 | ------- | ----------- 66 | [Export contents as array](json/exportcontentsasarray.md) | Convert exported standalone JSON to a raw JSON array 67 | [Export cell objects](json/exportcellobjects.md) | Export a cell's value as a JSON object or array if it is properly formatted 68 | [Empty value format](json/emptyvalueformat.md) | Determines if empty cells are exported with null or empty string values 69 | [Null value format](json/nullvalueformat.md) | Determines if cells with the string "null" are exported with null or string values 70 | [Array separator character](json/arrayseparatorcharacter.md) | Adjust the character used to separate values in a cell array 71 | [Array prefix](json/arrayprefix.md) | Force sheets or elements in a column to export as JSON arrays 72 | [Nested array prefix](json/nestedarrayprefix.md) | With Nested Elements checked, force sheets to export as nested arrays 73 | 74 | XML Settings 75 | ------------ 76 | These settings only affect exported XML data. 77 | 78 | ### Basic 79 | 80 | Setting | Description 81 | ------- | ----------- 82 | [Replace File](general/replacefile.md) | Replace the contents of a target file instead of exporting a newfile 83 | [Export columns as child elements](xml/exportcolumnsaschildelements.md) | Export columns as child elements of their row's XML element 84 | [Root element](xml/rootelement.md) | Name for the exported XML document's root element 85 | 86 | ### Advanced 87 | 88 | Setting | Description 89 | ------- | ----------- 90 | [Name replacement character](xml/namereplacementcharacter.md) | Character used when replacing illegal chars in element names 91 | [Include XML declaration](xml/includexmldeclaration.md) | Include a customized XML declaration in the exported document 92 | [XML version](xml/xmlversion.md) | Version of the XML standard used by the exported document 93 | [XML encoding](xml/xmlencoding.md) | Encoding used by the exported document 94 | [Standalone](xml/standalone.md) | Specifies if the exported document depends on external resources 95 | [Attributes prefix](xml/attributesprefix.md) | Force elements in a column to export as attributes for their row element 96 | [Child elements prefix](xml/childelementsprefix.md) | Force elements in a column to export as child elements of their row element 97 | [Inner text prefix](xml/innertextprefix.md) | Force elements in a column to export as inner text for their row element 98 | 99 | ### XML Namespaces 100 | 101 | Setting | Description 102 | ------- | ----------- 103 | [Root namespace URI](xml/rootnamespaceuri.md) | Root namespace for the XML document. 104 | [Namespaces](xml/xmlnamespaces.md) | Namespaces used in the XML document's elements. 105 | 106 | Tips N Tricks 107 | ------------- 108 | These pages detail various tips for more obscure or esoteric functionality in ESD. 109 | 110 | - [Importing/Exporting Settings](settings.md) 111 | - Exporting or importing ESD settings from another document 112 | - [XML](tips/tipsntricksxml.md) 113 | - Tips for the XML export format 114 | -------------------------------------------------------------------------------- /docs/json/arrayprefix.md: -------------------------------------------------------------------------------- 1 | Array prefix 2 | ------------ 3 | Converts columns or sheets using the given prefix into JSON arrays. When enabled, the prefix is stripped from the output keys. (So the field `JA_Effects` will export as `Effects`) 4 | 5 | Keys starting with this string will force all cells in the column to be exported as JSON arrays. 6 | 7 | This is useful when you may have certain cells with only one value, but you are expecting the element to be a JSON array. 8 | 9 | ### Example: ### 10 | 11 | **Sheet name: `Spells`** 12 | 13 | Spell | Description | JA_Effects 14 | ----- | ----------- | ---------- 15 | Cold Touch | Deal frost damage to enemies in melee range. | Freeze 16 | Fireball | Casts a fireball that can reach ranged enemies. | Burn 17 | Frostfire | Creates an explosion of cold fire affecting everyone around you. | Burn, Freeze 18 | 19 | *Default Output:* 20 | 21 | ```json 22 | { 23 | "Spells": { 24 | "Cold Touch": { 25 | "Spell": "Cold Touch", 26 | "Description": "Deal frost damage to enemies in melee range.", 27 | "JA_Effects": "Freeze" 28 | }, 29 | "Fireball": { 30 | "Spell": "Fireball", 31 | "Description": "Casts a fireball that can reach ranged enemies.", 32 | "JA_Effects": "Burn" 33 | }, 34 | "Frostfire": { 35 | "Spell": "Frostfire", 36 | "Description": "Creates an explosion of cold fire affecting everyone around you.", 37 | "JA_Effects": "Burn, Freeze" 38 | } 39 | } 40 | } 41 | ``` 42 | 43 | *Array Prefix Output:* 44 | 45 | ```json 46 | { 47 | "Spells": { 48 | "Cold Touch": { 49 | "Spell": "Cold Touch", 50 | "Description": "Deal frost damage to enemies in melee range.", 51 | "Effects": [ 52 | "Freeze" 53 | ] 54 | }, 55 | "Fireball": { 56 | "Spell": "Fireball", 57 | "Description": "Casts a fireball that can reach ranged enemies.", 58 | "Effects": [ 59 | "Burn" 60 | ] 61 | }, 62 | "Frostfire": { 63 | "Spell": "Frostfire", 64 | "Description": "Creates an explosion of cold fire affecting everyone around you.", 65 | "Effects": [ 66 | "Burn", 67 | "Freeze" 68 | ] 69 | } 70 | } 71 | } 72 | ``` 73 | 74 | Sheet tabs starting with this string will be exported as a JSON array. 75 | 76 | This is useful when you want some sheets to export as JSON arrays while others export as regular JSON blobs. 77 | 78 | ### Example: ### 79 | 80 | **Sheetname: `JA_Spells`** 81 | 82 | Spell | Description | JA_Effects 83 | ----- | ----------- | ---------- 84 | Cold Touch | Deal frost damage to enemies in melee range. | Freeze 85 | Fireball | Casts a fireball that can reach ranged enemies. | Burn 86 | Frostfire | Creates an explosion of cold fire affecting everyone around you. | Burn, Freeze 87 | 88 | *Default Output:* 89 | 90 | ```json 91 | { 92 | "JA_Spells": { 93 | "Cold Touch": { 94 | "Spell": "Cold Touch", 95 | "Description": "Deal frost damage to enemies in melee range.", 96 | "JA_Effects": "Freeze" 97 | }, 98 | "Fireball": { 99 | "Spell": "Fireball", 100 | "Description": "Casts a fireball that can reach ranged enemies.", 101 | "JA_Effects": "Burn" 102 | }, 103 | "Frostfire": { 104 | "Spell": "Frostfire", 105 | "Description": "Creates an explosion of cold fire affecting everyone around you.", 106 | "JA_Effects": "Burn, Freeze" 107 | } 108 | } 109 | } 110 | ``` 111 | 112 | *Array Prefix Output:* 113 | 114 | ```json 115 | { 116 | "Spells": [ 117 | { 118 | "Spell": "Cold Touch", 119 | "Description": "Deal frost damage to enemies in melee range.", 120 | "Effects": [ 121 | "Freeze" 122 | ] 123 | }, 124 | { 125 | "Spell": "Fireball", 126 | "Description": "Casts a fireball that can reach ranged enemies.", 127 | "Effects": [ 128 | "Burn" 129 | ] 130 | }, 131 | { 132 | "Spell": "Frostfire", 133 | "Description": "Creates an explosion of cold fire affecting everyone around you.", 134 | "Effects": [ 135 | "Burn", 136 | "Freeze" 137 | ] 138 | } 139 | ] 140 | } 141 | ``` 142 | -------------------------------------------------------------------------------- /docs/json/arrayseparatorcharacter.md: -------------------------------------------------------------------------------- 1 | Array separator character 2 | ------------------------- 3 | This is the character used to separate values when determining if a cell should be exported as a [JSON array](exportcellarrays.md). 4 | 5 | The default value for this character is a comma (`,`). If no value is set, the default character (`,`) will be used to determine array separation. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Tunics`** 10 | 11 | Tunic | Properties 12 | ----- | ---------- 13 | Green | , 14 | Red | Heat Resistance, Double Damage Dealt 15 | Blue | Water Breathing : Half Damage Received 16 | 17 | *Comma (`,`) Output:* 18 | ```json 19 | { 20 | "Green": { 21 | "Tunic": "Green", 22 | "Properties": [] 23 | }, 24 | "Red": { 25 | "Tunic": "Red", 26 | "Properties": [ 27 | "Heat Resistance", 28 | "Double Damage Dealt" 29 | ] 30 | }, 31 | "Blue": { 32 | "Tunic": "Blue", 33 | "Properties": "Water Breathing : Half Damage Received" 34 | } 35 | } 36 | ``` 37 | 38 | *Colon (`:`) Output:* 39 | ```json 40 | { 41 | "Green": { 42 | "Tunic": "Green", 43 | "Properties": "," 44 | }, 45 | "Red": { 46 | "Tunic": "Red", 47 | "Properties": "Heat Resistance, Double Damage Dealt" 48 | }, 49 | "Blue": { 50 | "Tunic": "Blue", 51 | "Properties": [ 52 | "Water Breathing", 53 | "Half Damage Received" 54 | ] 55 | } 56 | } 57 | ``` 58 | -------------------------------------------------------------------------------- /docs/json/emptyvalueformat.md: -------------------------------------------------------------------------------- 1 | Empty value format 2 | ------------------ 3 | Value exported for empty cells. 4 | 5 | Null will export empty cells with a standard JSON `null` value while Empty String will export an empty string `""`. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Directors`** 10 | 11 | Name | Skill 12 | ---- | ------ 13 | George | Creation 14 | JJ | 15 | 16 | *Null Output:* 17 | ```json 18 | { 19 | "Directors" : { 20 | "George" : { 21 | "Name" : "George", 22 | "Skill" : "Creation" 23 | }, 24 | "JJ" : { 25 | "Name" : "JJ", 26 | "Skill" : null 27 | } 28 | } 29 | } 30 | ``` 31 | 32 | *Empty String Output:* 33 | ```json 34 | { 35 | "Directors" : { 36 | "George" : { 37 | "Name" : "George", 38 | "Skill" : "Creation" 39 | }, 40 | "JJ" : { 41 | "Name" : "JJ", 42 | "Skill" : "" 43 | } 44 | } 45 | } 46 | ``` 47 | -------------------------------------------------------------------------------- /docs/json/exportcellarrays.md: -------------------------------------------------------------------------------- 1 | Export cell arrays 2 | ------------------ 3 | Export a cell's value as a JSON array if the cell contains commas (`,`), or whatever separator char is specified by [Array separator character](arrayseparatorcharacter.md). 4 | 5 | Each value in the generated array will be converted into it's parsed type. For example: `Test,1,false` will export as `[ "Test", 1, false ]` 6 | 7 | > [!TIP] 8 | > To prevent data containing a comma from being exported as separate array elements, wrap your value with quotation marks (`""`). 9 | 10 | ### Example: ### 11 | 12 | **Sheet name: `Spies`** 13 | 14 | Name | Age | Aliases 15 | ---- | --- | ------- 16 | Sterling | 42 | Duchess, Randy, "Sterling Archer, world's greatest spy" 17 | Kane | 32 | , 18 | Figgis | 45 | 19 | Dylan | 36 | "Other" Barry, 20 | 21 | *Default Output:* 22 | ```json 23 | { 24 | "Spies": { 25 | "Sterling": { 26 | "Age": 42, 27 | "Aliases": "Duchess, Randy, \"Sterling Archer, world's greatest spy\"" 28 | }, 29 | "Kane": { 30 | "Age": 32, 31 | "Aliases": "," 32 | }, 33 | "Figgis": { 34 | "Age": 45, 35 | "Aliases": null 36 | }, 37 | "Dylan": { 38 | "Age": 36, 39 | "Aliases": "\"Other\" Barry," 40 | } 41 | } 42 | } 43 | ``` 44 | 45 | *Cell Array Output:* 46 | ```json 47 | { 48 | "Spies": { 49 | "Sterling": { 50 | "Age": 42, 51 | "Aliases": [ 52 | "Duchess", 53 | "Randy", 54 | "Sterling Archer, world's greatest spy" 55 | ] 56 | }, 57 | "Kane" : { 58 | "Age": 32, 59 | "Aliases": [] 60 | }, 61 | "Figgis": { 62 | "Age": 45, 63 | "Aliases": null 64 | }, 65 | "Dylan": { 66 | "Age": 36, 67 | "Aliases": [ 68 | "\"Other\" Barry" 69 | ] 70 | } 71 | } 72 | } 73 | ``` 74 | -------------------------------------------------------------------------------- /docs/json/exportcellobjects.md: -------------------------------------------------------------------------------- 1 | Export cell objects 2 | ------------------- 3 | Export cells that begin with an open brace (`{`) and end with a close brace (`}`) as a JSON object. You can also export cells that begin with an open bracket (`[`) and end with a close bracket (`]`) as a JSON array. This allows you to pack JSON data into a single cell and export it as a JSON object or array. 4 | 5 | > [!WARNING] 6 | > If your cell value is not properly formatted JSON, an empty JSON object (`{}`) or array (`[]`) will be exported instead. 7 | 8 | ### Example: ### 9 | 10 | **Sheet name: `Items`** 11 | 12 | ID | Object | Array 13 | -- | ----- | ----- 14 | Sword | {"Price":10} | [{"Price":10},{"Price":15},[{"Price":10},{"Price":15}]] 15 | Sword (Fail 01) | {"Price":te} | [{"Price":t10},[{"Price":10},{"Price":15}]] 16 | Sword (Fail 02) | {"Price":nul"} | [{"Price":10},{"Price":15},[{"Price":nul}]] 17 | 18 | *Default Output:* 19 | ```json 20 | { 21 | "Items": { 22 | "Sword": { 23 | "Object": "{\"Price\":10}", 24 | "Array": "[{\"Price\":10},{\"Price\":15},[{\"Price\":10},{\"Price\":15}]]" 25 | }, 26 | "Sword (Fail 01)": { 27 | "Object": "{\"Price\":te}", 28 | "Array": "[{\"Price\":t10},[{\"Price\":10},{\"Price\":15}]]" 29 | }, 30 | "Sword (Fail 02)": { 31 | "Object": "{\"Price\":nul\"}", 32 | "Array": "[{\"Price\":10},{\"Price\":15},[{\"Price\":nul}]]" 33 | } 34 | } 35 | } 36 | ``` 37 | 38 | *Export cell objects Output:* 39 | ```json 40 | { 41 | "Items": { 42 | "Sword": { 43 | "Object": { 44 | "Price": 10 45 | }, 46 | "Array": [ 47 | { 48 | "Price": 10 49 | }, 50 | { 51 | "Price": 15 52 | }, 53 | [ 54 | { 55 | "Price": 10 56 | }, 57 | { 58 | "Price": 15 59 | } 60 | ] 61 | ] 62 | }, 63 | "Sword (Fail 01)": { 64 | "Object": {}, 65 | "Array": [] 66 | }, 67 | "Sword (Fail 02)": { 68 | "Object": {}, 69 | "Array": [] 70 | } 71 | } 72 | } 73 | ``` 74 | 75 | Note that the two fail elements have empty object and array values. This is because their object and array values were not correctly formatted JSON, so empty values were used as a safe fallback. 76 | -------------------------------------------------------------------------------- /docs/json/exportcontentsasarray.md: -------------------------------------------------------------------------------- 1 | Export content as array 2 | ----------------------- 3 | Converts exported JSON data from a standalone JSON object to a raw JSON array. 4 | 5 | This produces JSON that does not function alone, but can be used in specific situations and workflows. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Items`** 10 | 11 | Item | Cost | Description 12 | ---- | ---- | ----------- 13 | Wooden Sword | 2 | A simple wooden sword. Guess you could hit people with it. 14 | Iron Sword | 5 | A dull iron sword. More bat than blade honestly. 15 | Diamond Shield | 1000 | Ha! You can only carry 999 monies! 16 | Health Potion | 3 | Restores some health. 17 | 18 | *Default Output:* 19 | ```json 20 | { 21 | "Items": { 22 | "Wooden Sword": { 23 | "Item": "Wooden Sword", 24 | "Cost": 2, 25 | "Description": "A simple wooden sword. Guess you could hit people with it." 26 | }, 27 | "Iron Sword": { 28 | "Item": "Iron Sword", 29 | "Cost": 5, 30 | "Description": "A dull iron sword. More bat than blade honestly." 31 | }, 32 | "Diamond Shield": { 33 | "Item": "Diamond Shield", 34 | "Cost": 1000, 35 | "Description": "Ha! You can only carry 999 monies!" 36 | }, 37 | "Health Potion": { 38 | "Item": "Health Potion", 39 | "Cost": 3, 40 | "Description": "Restores some health." 41 | } 42 | } 43 | } 44 | ``` 45 | 46 | *Export Contents As Array Output:* 47 | ```json 48 | [ 49 | { 50 | "Wooden Sword": { 51 | "Item": "Wooden Sword", 52 | "Cost": 2, 53 | "Description": "A simple wooden sword. Guess you could hit people with it." 54 | }, 55 | "Iron Sword": { 56 | "Item": "Iron Sword", 57 | "Cost": 5, 58 | "Description": "A dull iron sword. More bat than blade honestly." 59 | }, 60 | "Diamond Shield": { 61 | "Item": "Diamond Shield", 62 | "Cost": 1000, 63 | "Description": "Ha! You can only carry 999 monies!" 64 | }, 65 | "Health Potion": { 66 | "Item": "Health Potion", 67 | "Cost": 3, 68 | "Description": "Restores some health." 69 | } 70 | } 71 | ] 72 | ``` 73 | 74 | *Export Contents As Array Output (with [Select Sheets(s)](../format/selectsheets.md) set to `Current sheet only`):* 75 | ```json 76 | [ 77 | { 78 | "Item": "Wooden Sword", 79 | "Cost": 2, 80 | "Description": "A simple wooden sword. Guess you could hit people with it." 81 | }, 82 | { 83 | "Item": "Iron Sword", 84 | "Cost": 5, 85 | "Description": "A dull iron sword. More bat than blade honestly." 86 | }, 87 | { 88 | "Item": "Diamond Shield", 89 | "Cost": 1000, 90 | "Description": "Ha! You can only carry 999 monies!" 91 | }, 92 | { 93 | "Item": "Health Potion", 94 | "Cost": 3, 95 | "Description": "Restores some health." 96 | } 97 | ] 98 | ``` 99 | -------------------------------------------------------------------------------- /docs/json/exportsheetarrays.md: -------------------------------------------------------------------------------- 1 | Export sheet arrays 2 | ------------------- 3 | Export sheet arrays will export sheets as JSON arrays with each row creating an element in the array. 4 | 5 | > [!NOTE] 6 | > This setting will force the first column to be included in each row's object. 7 | 8 | ### Example: ### 9 | 10 | **Sheet name: `Companies`** 11 | 12 | Name | Console 13 | ---- | ------- 14 | Microsoft | Xbox Series X 15 | Nintendo | Switch 16 | Sony | Playstation 5 17 | 18 | *Default Output:* 19 | ```json 20 | { 21 | "Companies": { 22 | "Microsoft": { 23 | "Console": "Xbox Series X" 24 | }, 25 | "Nintendo": { 26 | "Console": "Switch" 27 | }, 28 | "Sony": { 29 | "Console": "Playstation 5" 30 | } 31 | } 32 | } 33 | ``` 34 | 35 | *Sheet Array Output:* 36 | ```json 37 | { 38 | "Companies": [ 39 | { 40 | "Name": "Microsoft", 41 | "Console": "Xbox Series X" 42 | }, 43 | { 44 | "Name": "Nintendo", 45 | "Console": "Switch" 46 | }, 47 | { 48 | "Name": "Sony", 49 | "Console": "Playstation 5" 50 | } 51 | ] 52 | } 53 | ``` 54 | -------------------------------------------------------------------------------- /docs/json/exportvaluearrays.md: -------------------------------------------------------------------------------- 1 | Export value arrays 2 | ------------------- 3 | Export value arrays will export a sheet as a JSON array, with each row being used as a single element of the array, if it only contains one column. 4 | 5 | The difference between this and [Export sheet arrays](exportsheetarrays.md) is value arrays can contain basic values like numbers, bools, or strings, while sheet arrays will always contain JSON objects as their elements. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Random`** 10 | 11 | Values| 12 | ------- | 13 | 1| 14 | TRUE| 15 | Three| 16 | 17 | *Default Output:* 18 | ```json 19 | { 20 | "Random": { 21 | "1": { 22 | "Values": 1 23 | }, 24 | "true": { 25 | "Values": true 26 | }, 27 | "Three": { 28 | "Values": "Three" 29 | } 30 | } 31 | } 32 | ``` 33 | 34 | *Value Array Output:* 35 | ```json 36 | { 37 | "Values": [ 38 | 1, 39 | true, 40 | "Three" 41 | ] 42 | } 43 | ``` 44 | -------------------------------------------------------------------------------- /docs/json/forcestringvalues.md: -------------------------------------------------------------------------------- 1 | Force string values 2 | ------------------- 3 | Force all data values to export as a string. 4 | 5 | > [!NOTE] 6 | > `null` values will remain standard `null` values. They will not be converted to `"null"`. See [Null value format](nullvalueformat.md) and [Empty value format](emptyvalueformat.md) for more information on null and empty values. 7 | 8 | ### Example: ### 9 | 10 | **Sheet name: `Heroes`** 11 | 12 | Name | Human | Age | Superpower 13 | ---- | ----- | --- | ---------- 14 | Batman | true | 30 | 15 | 16 | *Default Output:* 17 | ```json 18 | { 19 | "Heroes": { 20 | "Batman": { 21 | "Name": "Batman", 22 | "Human": true, 23 | "Age": 30, 24 | "Superpower": null 25 | } 26 | } 27 | } 28 | ``` 29 | 30 | *Force String Output:* 31 | ```json 32 | { 33 | "Heroes": { 34 | "Batman": { 35 | "Name": "Batman", 36 | "Human": "true", 37 | "Age": "30", 38 | "Superpower": null 39 | } 40 | } 41 | } 42 | ``` 43 | -------------------------------------------------------------------------------- /docs/json/nestedarrayprefix.md: -------------------------------------------------------------------------------- 1 | Nested array prefix 2 | ------------------- 3 | When the [Nested Elements](../general/nestedelements.md) option is enabled, sheet tabs starting with this string will force the sheet to be exported as a nested element array. 4 | 5 | This is basically shorthand for prefacing all keys in a sheet with `{#SHEET}{#ROW}`. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `NA_Sample`** 10 | 11 | ID | Element | [Effects]{#1}Name | [Effects]{#1}Type | [Effects]{#2}Name | [Effects]{#2}Type 12 | --- | --- | --- | --- | --- | --- 13 | 1 | Water | Quench | Heal | Extinguish | Heal 14 | 2 | Fire | Burn | Damage | | 15 | 16 | *Output:* 17 | ```json 18 | { 19 | "Sample": [ 20 | { 21 | "ID": 1, 22 | "Element": "Water", 23 | "Effects": [ 24 | { 25 | "Name": "Quench", 26 | "Type": "Heal" 27 | }, 28 | { 29 | "Name": "Extinguish", 30 | "Type": "Heal" 31 | } 32 | ] 33 | }, 34 | { 35 | "ID": 2, 36 | "Element": "Fire", 37 | "Effects": [ 38 | { 39 | "Name": "Burn", 40 | "Type": "Damage" 41 | } 42 | ] 43 | } 44 | ] 45 | } 46 | ``` 47 | 48 | The nested array prefix is shorthand for exporting a sheet as an array with `{#SHEET}{#ROW}` key paths. This lets you avoid prefacing every key with `{#SHEET}{#ROW}` and will automatically export a sheet as an array. The above sheet with the nested array prefix enabled produces the same result as the sheet below with [Export sheet arrays](exportsheetarrays.md) enabled. 49 | 50 | **Sheet name: `Sample`** 51 | 52 | {#SHEET}{#ROW}ID | {#SHEET}{#ROW}Element | {#SHEET}{#ROW}[Effects]{#1}Name | {#SHEET}{#ROW}[Effects]{#1}Type | {#SHEET}{#ROW}[Effects]{#2}Name | {#SHEET}{#ROW}[Effects]{#2}Type 53 | --- | --- | --- | --- | --- | --- 54 | 1 | Water | Quench | Heal | Extinguish | Heal 55 | 2 | Fire | Burn | Damage | | 56 | -------------------------------------------------------------------------------- /docs/json/nullvalueformat.md: -------------------------------------------------------------------------------- 1 | Null value format 2 | ----------------- 3 | Value exported for cells containing the string "null". 4 | 5 | Null will export cells with a standard JSON `null` value while String will export a string `"null"`. 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Test`** 10 | 11 | ID | Value 12 | -- | ----- 13 | Null Value | null 14 | 15 | *Null Output:* 16 | ```json 17 | { 18 | "Test": { 19 | "Null Value": null 20 | } 21 | } 22 | ``` 23 | 24 | *String Output:* 25 | ```json 26 | 27 | { 28 | "Test": { 29 | "Null Value": "null" 30 | } 31 | } 32 | ``` 33 | -------------------------------------------------------------------------------- /docs/settings.md: -------------------------------------------------------------------------------- 1 | Importing and Exporting ESD Settings 2 | ------------------------------------ 3 | As of v65, ESD supports exporting and importing settings via JSON strings. This is handled by the settings menu, which can be opened by selecting the "Settings" menu item: 4 | 5 | ![settings01](images/settings/settings01.png) 6 | 7 | This will open the settings menu. Here, you can see the current documents settings (if ESD has exported or visualized data) which can be copied and pasted into the bottom text area in another document to import the settings used by ESD in the current document. 8 | 9 | ![settings01](images/settings/settings02.png) 10 | 11 | Once you have pasted a settings JSON blob into the bottom field, you can click the `Load Settings` button to import those settings into the current document. Doing so will refresh the current settings and reopen the sidebar. 12 | 13 | > [!NOTE] 14 | > Specific sheets targeted when [Export sheets](format/exportsheets.md) is set to custom are not imported with the rest of the settings. This is because different spreadsheets may have different IDs for targeted sheets so their saved export values may be incorrect.

Custom export folder and file replacement targets are also not imported due to `auth/drive.file` scope limitations. 15 | 16 | You can also clear the current settings for the document. 17 | 18 | > [!CAUTION] 19 | > This cannot be undone, so you will have to adjust or load settings again once `Clear` has been clicked. Use this with caution.*** 20 | -------------------------------------------------------------------------------- /docs/tips/tipsntricksxml.md: -------------------------------------------------------------------------------- 1 | XML Tips & Tricks 2 | ----------------- 3 | This section covers how to use some more obscure XML functionality in ESD. These tips only apply when targeting the XML export format. 4 | 5 | XML Comments 6 | --------------------- 7 | If the first cell in a row is the string `!--`, the row will be exported as an XML comment block. 8 | 9 | ### Example: ### 10 | 11 | **Sheet: `Planets`** 12 | 13 | Name | Orbit | Description 14 | ---- | --------- | ----------- 15 | Venus | 0.72 AU | An ethereal puff burning through the sky. 16 | !-- | This is an XML comment! | 17 | Earth | 1 AU | A pale blue dot suspended in a sunbeam. 18 | !-- | Each cell gets... | ...a newline in the block! 19 | Mars | 1.52 AU | A red mote glittering in the dark. 20 | !-- | Hyphens ( - ) are replaced with Underscores ( _ ) | 21 | 22 | *Output:* 23 | ```xml 24 | 25 | 26 | 27 | 28 | 29 | 31 | 32 | 33 | 34 | 35 | ``` 36 | -------------------------------------------------------------------------------- /docs/troubleshooting.md: -------------------------------------------------------------------------------- 1 | Troubleshooting 2 | --------------- 3 | 4 | This page contains suggestions for common issues you may encounter when using ESD. 5 | 6 | Multiple Accounts 7 | ----------------- 8 | There is a known bug when using add-ons while multiple accounts are signed in which seems to be caused by apps script using the incorrect account to execute the add-on. Unfortunately this is on ***Google's side*** so ESD cannot fix the issue directly. This is even more frustrating because the issue will not *always* show up when multiple accounts are signed in so it is possible for you to use ESD for a while before it suddenly occurs. 9 | 10 | ***Most issues encountered when using ESD can be fixed by just logging out of all but one account***. 11 | 12 | After a brief period of experiencing the bug repeatedly, I believe the the problem comes when the currently active account is not the first (or possibly just the default) account in the currently signed in accounts. It is difficult to reproduce, but ESD will continue to try and work around this bug as not being able to have multiple accounts signed in is very frustrating. 13 | 14 | My sidebar is not functioning or I have a popup saying settings couldn't be loaded 15 | ---------------------------------------------------------------------------------- 16 | See [multiple accounts](#multiple-accounts) for more details. 17 | 18 | If you run into a situation where the ESD sidebar doesn't seem to load or export data, try signing out of any extra accounts and opening the sidebar. More information about this bug can be found [here](https://sites.google.com/site/scriptsexamples/home/announcements/multiple-accounts-issue-with-google-apps-script). 19 | 20 | As of v61, ESD will attempt to catch this bug and show a popup window to let you know that there was a problem. If you see this, you should log out of all but one account and try opening the sidebar again. 21 | 22 | My file is taking a long time to export 23 | --------------------------------------- 24 | Google allocates resources for Apps Script operations as they are available. This means that exports can vary in their duration depending on time of day and traffic, and of course the amount of data being exported. 25 | 26 | Currently, XML exports of large data sets (ie 1,000's of lines) can take a few minutes to export due to using [XmlService](https://developers.google.com/apps-script/reference/xml-service/xml-service) to create XML. A custom version of XmlService is being written currently that exports dramatically faster (less than 1 second vs 80 seconds). This is targeted to be released with v67. 27 | 28 | ***NOTE: Google does not allow processes to run longer than 360 seconds (6 minutes). If an export process takes longer than this, it will fail.*** 29 | 30 | My JSON export is missing rows 31 | ------------------------------ 32 | JSON does not support multiple fields with the same key. A sheet with the following values: 33 | 34 | id | name | age 35 | -- | ---- | --- 36 | LoZ | Link | 18 37 | SMB | Mario | 25 38 | SF | Fox | 21 39 | LoZ | Zelda | 17 40 | 41 | Would produce the following JSON: 42 | 43 | ```json 44 | { 45 | "LoZ": { 46 | "name": "Zelda", 47 | "age": 17 48 | }, 49 | "SMB": { 50 | "name": "Mario", 51 | "age": 25 52 | }, 53 | "SF": { 54 | "name": "Fox", 55 | "age": 21 56 | } 57 | } 58 | ``` 59 | 60 | Note that the first field contains data from the 4th row. This is because the fourth row has the same ID as the first row. Since it is the last row with that ID, its values are used for the `LoZ` field. 61 | 62 | My JSON export only contains one row 63 | ------------------------------------ 64 | This issue can arrise when arise when [Nested Elements](general/nestedelements.md) is enabled and keys have not been properly formatted. See the [Nested Elements Wiki](https://github.com/Synthoid/ExportSheetData/wiki/Nested-Elements#advanced-key-formatting) for more details. 65 | 66 | Boolean and number values are exporting as strings 67 | -------------------------------------------------- 68 | There are two possibilities here. The first thing to check is if the [Force string values](json/forcestringvalues.md) option in enabled. If that is not enabled, make sure the cell is properly declared as a boolean or number. JSON value types are pulled from the sheet itself, so if the sheet sees the value `true` as a string instead of a boolean, or the value `101` as a string instead of an integer, they will be exported as strings. This can occur if the cell value in question was formatted to be plain text. 69 | -------------------------------------------------------------------------------- /docs/xml/attributesprefix.md: -------------------------------------------------------------------------------- 1 | Attributes prefix 2 | ----------------- 3 | Force columns with keys using the specified prefix to export as attributes of their row's XML element. 4 | 5 | By default, cells export as attributes of their row XML element. This option is only useful if options like [Export columns as child elements](exportcolumnsaschildelements.md) are enabled. 6 | 7 | Default value: `ATT_` (short for "**ATT**ribute") 8 | 9 | ### Example: ### 10 | 11 | **Sheet: `Planets`** 12 | 13 | Name | ATT_Orbit | Description 14 | ---- | --------- | ----------- 15 | Earth | 1 AU | A pale blue dot suspended in a sunbeam. 16 | 17 | *Default Output:* 18 | ```xml 19 | 20 | 21 | 22 | 1 AU 23 | A pale blue dot suspended in a sunbeam. 24 | 25 | 26 | 27 | ``` 28 | 29 | *With "Attributes prefix" and "Export columns as child elements" enabled:* 30 | ```xml 31 | 32 | 33 | 34 | A pale blue dot suspended in a sunbeam. 35 | 36 | 37 | 38 | ``` 39 | -------------------------------------------------------------------------------- /docs/xml/childelementsprefix.md: -------------------------------------------------------------------------------- 1 | Child elements prefix 2 | --------------------- 3 | Force columns with keys using the specified prefix to export as child elements of their row's XML element. 4 | 5 | Default value: `CE_` (short for "**C**hild **E**lement") 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Planets`** 10 | 11 | Name | Orbit | CE_Description 12 | ---- | ----- | -------------- 13 | Earth | 1 AU | A pale blue dot suspended in a sunbeam. 14 | 15 | *Default Output:* 16 | ```xml 17 | 18 | 19 | 20 | 21 | 22 | ``` 23 | 24 | *With "Child elements prefix" enabled:* 25 | ```xml 26 | 27 | 28 | 29 | A pale blue dot suspended in a sunbeam. 30 | 31 | 32 | 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/xml/dontformatillegalcharacters.md: -------------------------------------------------------------------------------- 1 | Don't format illegal characters 2 | ------------------------------- 3 | Don't convert [XML illegal characters](https://technet.microsoft.com/en-us/library/ms145315(v=sql.90).aspx) to their XML safe encodings. 4 | 5 | By default, all XML exported by ESD is formatted for proper XML use. This means that certain characters are replaced with their XML safe encoding. 6 | 7 | > [!NOTE] 8 | > Keys are always encoded. 9 | 10 | The affected characters and their XML safe encodings are: 11 | 12 | Character | Encoded Value 13 | --------- | ------------- 14 | `<` | `<` 15 | `>` | `>` 16 | `'` | `'` 17 | `"` | `"` 18 | `&` | `&` 19 | -------------------------------------------------------------------------------- /docs/xml/exportcolumnsaschildelements.md: -------------------------------------------------------------------------------- 1 | Export columns as child elements 2 | -------------------------------- 3 | 4 | Force cells to be exported as child elements of their row element instead of attributes. 5 | 6 | ### Example: ### 7 | 8 | **Sheet name: `Arrows`** 9 | 10 | Type | Damage | Effect 11 | ---- | ------ | ------ 12 | Normal | 1 | None 13 | Fire | 3 | Burn 14 | Ice | 2 | Freeze 15 | Light | 5 | Flare 16 | 17 | *Default Output:* 18 | ```xml 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | ``` 28 | 29 | *Child Elements Output:* 30 | ```xml 31 | 32 | 33 | 34 | 1 35 | None 36 | 37 | 38 | 3 39 | Burn 40 | 41 | 42 | 2 43 | Freeze 44 | 45 | 46 | 5 47 | Flare 48 | 49 | 50 | 51 | ``` 52 | -------------------------------------------------------------------------------- /docs/xml/includexmldeclaration.md: -------------------------------------------------------------------------------- 1 | Include XML declaration 2 | ----------------------- 3 | Determines if a customized XML declaration should be included at the top of exported XML documents. 4 | 5 | XML declarations must be at the top of the XML document (if included) and look like the following: 6 | 7 | `` 8 | 9 | See also 10 | -------- 11 | - [XML version](xmlversion.md) 12 | - [XML encoding](xmlencoding.md) 13 | - [Standalone](standalone.md) 14 | 15 | External references 16 | ------------------- 17 | - [XML declaration on MSDN](https://msdn.microsoft.com/en-us/library/ms256048(v=vs.110).aspx) 18 | -------------------------------------------------------------------------------- /docs/xml/innertextprefix.md: -------------------------------------------------------------------------------- 1 | Inner text prefix 2 | ----------------- 3 | Force columns with keys using the specified prefix to export as inner text for their row's XML element. 4 | 5 | Default value: `IT_` (short for "**I**nner **T**ext") 6 | 7 | ### Example: ### 8 | 9 | **Sheet name: `Planets`** 10 | 11 | Name | Orbit | IT_Description 12 | ---- | ----- | -------------- 13 | Earth | 1 AU | A pale blue dot suspended in a sunbeam. 14 | 15 | *Default Output:* 16 | ```xml 17 | 18 | 19 | 20 | 21 | 22 | ``` 23 | 24 | *With "Inner text prefix" enabled:* 25 | ```xml 26 | 27 | 28 | 29 | A pale blue dot suspended in a sunbeam. 30 | 31 | 32 | 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/xml/namereplacementcharacter.md: -------------------------------------------------------------------------------- 1 | Name replacement character 2 | -------------------------- 3 | Specifies the character that replaces illegal characters in XML element names. 4 | 5 | XML element names can only contain a certain set of characters. Escaping illegal characters is not enough for element names, so ESD will instead replace illegal characters with a valid one. 6 | 7 | There are three possible replacement characters: 8 | 9 | - Underscore (` _ `) 10 | - Dash (` - `) 11 | - Dot (` . `) 12 | 13 | For example, the value `T'Pau` would create the XML element `` if Underscore is selected as the replacement character. 14 | -------------------------------------------------------------------------------- /docs/xml/rootelement.md: -------------------------------------------------------------------------------- 1 | Root element 2 | ------------ 3 | Specifies the name for the exported XML document's root element. By default, this value is "data". 4 | 5 | ### Example: ### 6 | 7 | **Sheet name: `Colors`** 8 | 9 | Name | R | G | B 10 | ---- | - | - | - 11 | Red | 1 | 0 | 0 12 | Green | 0 | 1 | 0 13 | Blue | 0 | 0 | 1 14 | 15 | *Default Root Element:* 16 | ```xml 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | ``` 25 | 26 | *Root Element "Art":* 27 | ```xml 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | ``` 36 | -------------------------------------------------------------------------------- /docs/xml/rootnamespaceuri.md: -------------------------------------------------------------------------------- 1 | Root namespace URI 2 | ------------------ 3 | The root namespace used for the exported XML's elements. 4 | 5 | This is defined via the `xmlns` attribute in the document's root element. 6 | 7 | ### Example: ### 8 | 9 | **Sheet: `SheetPrograms`** 10 | 11 | Name | Company | ID 12 | ---- | ------- | -- 13 | Excel | Microsoft | MS 14 | Sheets | Google | G 15 | Numbers | Apple | A 16 | 17 | *Empty root namespace URI:* 18 | ```xml 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | ``` 27 | 28 | *Root namespace URI set to `urn:schemas-microsoft-com:office:spreadsheet`* 29 | ```xml 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | ``` 38 | 39 | See also 40 | -------- 41 | - [XML Namespaces](xmlnamespaces.md) 42 | -------------------------------------------------------------------------------- /docs/xml/standalone.md: -------------------------------------------------------------------------------- 1 | Standalone 2 | ---------- 3 | Specifies if the exported XML document relies on information from an external source, such as external [document type definition (DTD)](https://www.w3schools.com/xml/xml_dtd.asp). 4 | 5 | If set to `None` the standalone section will not be included in the XML declaration. For most cases, the standalone section can be safely left out of the XML declaration. 6 | 7 | See also 8 | -------- 9 | - [Include XML declaration](includexmldeclaration.md) 10 | - [XML version](xmlversion.md) 11 | - [XML encoding](xmlencoding.md) 12 | -------------------------------------------------------------------------------- /docs/xml/xmlencoding.md: -------------------------------------------------------------------------------- 1 | XML encoding 2 | ------------ 3 | Specifies the encoding shown in the included XML declaration. 4 | 5 | If set to `None`, encoding will not be included in the XML declaration. 6 | 7 | Supported encodings | 8 | ------------------- | 9 | UTF-8 10 | UTF-16 11 | ISO-10646-UCS-2 12 | ISO-10646-UCS-4 13 | ISO-8859-1 14 | ISO-8859-2 15 | ISO-8859-3 16 | ISO-8859-4 17 | ISO-8859-5 18 | ISO-8859-6 19 | ISO-8859-7 20 | ISO-8859-8 21 | ISO-8859-9 22 | ISO-2022-JP 23 | Shift_JIS 24 | EUC-JP 25 | 26 | See also 27 | -------- 28 | - [Include XML declaration](includexmldeclaration.md) 29 | - [XML version](xmlversion.md) 30 | - [Standalone](standalone.md) 31 | -------------------------------------------------------------------------------- /docs/xml/xmlnamespaces.md: -------------------------------------------------------------------------------- 1 | Namespaces 2 | ---------- 3 | Namespaces used for the exported XML's elements. Attributes and elements can be declared with a namespace by using a name prefix. For example: `ss:Type`, `x:Width`, `mx:Platform`, ect. To add a namespace, click the `+` button next to the Namespaces label. To remove a namespace, click the `-` button next to the namespace's prefix label. 4 | 5 | There are two values associated with a namespace: 6 | - `Prefix` 7 | - The actual prefix used in element names. 8 | - `URI` 9 | - Unique string for the namespace. This is commonly a URL or URN, but can really be any unique string. See [External Resources](#external-resources) for more. 10 | 11 | These are defined via `xmlns:prefix` attributes in the document's root element. 12 | 13 | **NOTES:** 14 | - Prefixes are case sensitive. `sA:test` will not recognize a namespace with the prefix `sa`. 15 | - When using namespaces in conjuction with prefix options like [Attributes prefix](attributesprefix.md), ESD prefixes must come *after* the namespace prefix. 16 | - ✅ Good 17 | - `x:ATT_value` 18 | - ❌ Bad 19 | - `ATT_x:value` 20 | 21 | ### Example: ### 22 | 23 | **Sheet: `SheetPrograms`** 24 | 25 | Name | Company | ss:ID 26 | ---- | ------- | ----- 27 | sm:Excel | Microsoft | MS 28 | sg:Sheets | Google | G 29 | sa:Numbers | Apple | A 30 | 31 | *No namespaces set:* 32 | ```xml 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | ``` 41 | 42 | > [!NOTE] 43 | > Colons (`:`) have been replaced with underscores (`_`) in this export, as colons are not valid XML tag characters unless they are used for namespaces. 44 | 45 | *Various namespaces set:* 46 | ```xml 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | ``` 55 | 56 | As a sidenote, you can use namespaces with or without a [root namespace](rootnamespaceuri.md) for the XML document. The above examples do not include a root namespace for simplicity, but it could be included if desired: 57 | ```xml 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | ``` 66 | 67 | See also 68 | -------- 69 | - [Root namespace URI](rootnamespaceuri.md) 70 | 71 | External resources 72 | ------------------ 73 | For more information on XML namespaces, check out [w3schools' page on the subject](https://www.w3schools.com/xml/xml_namespaces.asp). 74 | -------------------------------------------------------------------------------- /docs/xml/xmlversion.md: -------------------------------------------------------------------------------- 1 | XML version 2 | ----------- 3 | Specifies the version of the XML standard shown in the XML declaration. 4 | 5 | This value is always present if an XML declaration is included in the exported file. 6 | 7 | There are two possible values: 8 | 9 | - [`1.0`](https://www.w3.org/TR/2008/REC-xml-20081126/) - This is the current XML standard and should be used for most cases. 10 | - [`1.1`](https://www.w3.org/TR/2006/REC-xml11-20060816/) - This is a previous standard and should only be used when needed. 11 | 12 | See also 13 | -------- 14 | - [Include XML declaration](includexmldeclaration.md) 15 | - [XML encoding](xmlencoding.md) 16 | - [Standalone](standalone.md) 17 | -------------------------------------------------------------------------------- /images/esd_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Synthoid/ExportSheetData/adb3907f34372493f37441096db75ef90ae53023/images/esd_banner.png -------------------------------------------------------------------------------- /images/esd_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | 35 | 36 | 37 | 38 | 46 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /images/esd_icon_json.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | 29 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /images/esd_icon_sheets.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /images/esd_icon_xml.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/FilePicker.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 149 | 150 | 151 | 152 |
153 |

Loading folder picker...

154 |
155 | 156 | 157 | -------------------------------------------------------------------------------- /src/Modal_About.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 16 | 17 | 18 |
19 |

Current version:

20 |

Release notes: here

21 |

Documentation: here

22 |

Nested Elements Documentation: here

23 | 24 |
25 | 38 | 39 | -------------------------------------------------------------------------------- /src/Modal_Error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 30 | 31 | 32 |
33 | 34 |

{5fd5c101-9583-456a-8c32-857c0fe3d1db}

35 |

Visit ESD's troubleshooting page for help. If you have multiple accounts signed in, see this section specifically.

36 |
37 |
38 | 39 |
40 |
41 | 42 | 43 |
44 |
45 | 46 |
47 | 58 | 59 | -------------------------------------------------------------------------------- /src/Modal_Export.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 25 | 26 | 27 |
28 |

29 | File exported successfully. You can view the file here: 30 |

31 |
32 |
33 |

34 | 35 | {a7372abf-bd7e-4c13-8d54-0c0b3603a816} 36 |

37 |
38 |
39 |

40 | 41 | {393b3288-20f3-48f6-9255-07f11a84e7e2} 42 |

43 |
44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /src/Modal_NewVersion.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 26 | 27 | 28 |
29 |

ESD has updated to version:

30 |
31 |
32 | 33 |
Backend Updates
34 | 40 |
General
41 | 52 |
XML
53 | 57 |
JSON
58 | 91 |
92 |
93 |

For more information, see ESD's release notes

94 |
95 | 96 | 109 | 110 | -------------------------------------------------------------------------------- /src/Modal_Settings.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 59 | 60 | 61 |
62 |

63 | ESD's current settings for this sheet are shown in the top field. Paste ESD settings copied from another sheet into the bottom field to load them into this sheet. 64 |

65 |
66 | 67 |
68 | 69 | 70 |
71 | New Settings 72 |
73 | 74 | 75 |
76 |
77 | 78 | 79 |
80 |
81 | 82 |
83 | 172 | 173 | -------------------------------------------------------------------------------- /src/Modal_Support.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 33 | 34 | 35 |
36 |

If you enjoy using ESD and want to help ensure its continued development, please consider supporting the project.

37 | 40 |

GitHub Sponsors: 47 | 48 |

49 | 50 |
51 | 52 | -------------------------------------------------------------------------------- /src/Modal_Visualize.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 36 | 37 | 38 |
39 | 40 |
41 |
42 | 43 | 44 |
45 |
46 |

47 | Note: Escaped characters may not display properly when visualized, but will be properly formatted in the exported data. 48 |

49 |
50 |
51 |

52 | 53 | {4297f144-6a18-49df-b298-29fdfcf1a092} 54 |

55 |
56 |
57 | 58 | 59 | 60 |
61 | 72 | 73 | -------------------------------------------------------------------------------- /src/Sidebar.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | 20 | 21 |
22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /src/SidebarStyle.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Spinner.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 16 | 17 | 18 |
19 |
20 |

0 seconds

21 |
22 | 42 | 395 | 399 | 400 | -------------------------------------------------------------------------------- /src/appsscript.json: -------------------------------------------------------------------------------- 1 | { 2 | "timeZone": "America/New_York", 3 | "exceptionLogging": "STACKDRIVER", 4 | "runtimeVersion": "V8", 5 | "dependencies": { 6 | "enabledAdvancedServices": [ 7 | { 8 | "userSymbol": "Drive", 9 | "serviceId": "drive", 10 | "version": "v3" 11 | } 12 | ] 13 | }, 14 | "oauthScopes": [ 15 | "https://www.googleapis.com/auth/drive.file", 16 | "https://www.googleapis.com/auth/spreadsheets.currentonly", 17 | "https://www.googleapis.com/auth/script.container.ui", 18 | "https://www.googleapis.com/auth/userinfo.email" 19 | ], 20 | "urlFetchWhitelist": [ 21 | "https://www.github.com/" 22 | ], 23 | "addOns": { 24 | "common": { 25 | "name": "Export Sheet Data", 26 | "logoUrl": "https://github.com/Synthoid/ExportSheetData/blob/master/images/esd_icon.svg", 27 | "openLinkUrlPrefixes": [ 28 | "https://www.github.com/" 29 | ] 30 | }, 31 | "sheets": {} 32 | } 33 | } -------------------------------------------------------------------------------- /src/secrets.html: -------------------------------------------------------------------------------- 1 | { 2 | "apiKey": "PickerApiKey", 3 | "appId": "CloudProjectId" 4 | } --------------------------------------------------------------------------------