├── .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 | 
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 | **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 |
**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 |
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 | 
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 | 
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 |
Loading folder picker...
154 |Current version:
20 |Release notes: here
21 |Documentation: here
22 |Nested Elements Documentation: here
23 | 24 |{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 |29 | File exported successfully. You can view the file here: 30 |
31 |34 | 35 | {a7372abf-bd7e-4c13-8d54-0c0b3603a816} 36 |
37 |40 | 41 | {393b3288-20f3-48f6-9255-07f11a84e7e2} 42 |
43 |ESD has updated to version:
30 |For more information, see ESD's release notes
94 |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 |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 |47 | Note: Escaped characters may not display properly when visualized, but will be properly formatted in the exported data. 48 |
49 |52 | 53 | {4297f144-6a18-49df-b298-29fdfcf1a092} 54 |
55 |0 seconds
21 |