Skip to main content
Skip table of contents

Using Excel-like Tables for Jira With Scripting Apps

Since the spreadsheet data can be accessed via REST API, third-party scripting and automation tools such as ScriptRunner can interact with information stored in Excel-like Tables for Jira. This makes it possible for administrators and developers to build custom logic that reads cell values, evaluates spreadsheet calculations, or reacts to data maintained inside a table on a Jira issue.

Important Disclaimer

Excel-like Tables for Jira is not associated with ScriptRunner or any other scripting vendor. ScriptRunner is mentioned only as an example of a tool capable of performing REST calls and running custom scripts. Users who wish to implement automation should consult the documentation provided by their chosen scripting or automation app.


Capabilities and Benefits

Excel-like Tables for Jira provides a structured spreadsheet layer inside Jira that can act as both a data source and a calculation engine.

When combined with scripting or automation tools:

  • Spreadsheet data can be retrieved via REST API

  • Built-in formulas handle calculations directly in the table

  • Scripts consume processed values, not raw data

  • Automation logic stays simpler and more maintainable

  • Table updates do not require script changes

Key Benefits

  • Structured spreadsheet data that scripts can reliably read

  • Consistent table layout across issues

  • Built-in formulas reduce the need for custom code

  • REST API access to calculated values

  • Non-technical users can update data without touching scripts


API Access

The REST API for Excel-like Tables for Jira is currently in beta.

It is suitable for:

  • Prototyping

  • Internal automation

  • Controlled production usage

Note: API structure and behavior may change as the app transitions to the Forge platform.

Support Policy

Please note that we do not provide support for scripting. However, if you have a specific use case you’d like to share and believe it highlights a potential product gap or opportunity, feel free to submit it as a feature request through our support portal. We’re always happy to review and consider feedback that helps improve the product.

Retrieve Table Data

To retrieve table data for an issue, call:

CODE
GET https://excel-like-tables-for-jira.herokuapp.com/rest/api/table/{issueKey}?host={your-jira-domain}

For more information of what it returns you can refer to this page: Excel-like Tables for Jira – Simplified REST API Response and Data Structure


Example Usage in Scriptrunner

Below is an example of using ScriptRunner for Jira Cloud to automate actions based on data stored in Excel-like Tables for Jira.

This script runs when a Jira issue is updated. It retrieves table data from the issue, reads values from a specific column, and creates Jira Tasks based on table rows.


Automation Flow

This example demonstrates a common automation pattern:

  1. A Jira issue is updated

  2. A ScriptRunner listener is triggered

  3. The script calls the Excel-like Tables for Jira REST API

  4. The script iterates through table rows

  5. A value is extracted from a specific column

  6. A Jira Task is created for each valid row


What the Script Does

  • Fetches the Excel-like Table attached to the current issue

  • Assumes a simple table structure:

    • Column A: Row number (ignored)

    • Column B: Task name

  • Skips the header row

  • Skips empty rows

  • Creates one Jira Task per valid row

  • Uses the cell value as the task summary

  • Adds a reference to the source issue in the task description

This allows non-technical users to control automation behavior simply by editing table data.


Key Configuration Points

Most users only need to adjust the following values to match their table layout:

CODE
def TASK_COLUMN = "1"   // Column index containing task names
def HEADER_ROW  = 0     // Header row index

No changes to the core logic are required when table content changes.


Example Script

CODE
import groovy.json.JsonSlurper
import java.util.Base64

/**
 * SAMPLE SCRIPT
 * Demonstrates how to:
 *  - Fetch an Excel-like Table
 *  - Select cells by column index
 *  - Skip headers and numbering
 *  - Create Jira Tasks from table rows
 *
 * This script is intentionally verbose for documentation clarity.
 */

// =====================================================
// Context
// =====================================================
def issueKey   = issue.key
def projectKey = issue.fields.project.key

// =====================================================
// Resolve Jira host (required by Excel-like Tables API)
// =====================================================
def serverInfo = get("/rest/api/3/serverInfo").asObject(Map)
def jiraHost   = serverInfo.body.baseUrl.replace("https://", "")

// =====================================================
// Authentication (sample only)
// =====================================================
def username = "ATLASSIAN_EMAIL"
def apiToken = "ATLASSIAN API TOKEN"
def authHeader = "Basic ${"${username}:${apiToken}".bytes.encodeBase64()}"

// =====================================================
// Fetch Excel-like Table JSON
// =====================================================
def apiUrl =
    "https://excel-like-tables-for-jira.herokuapp.com" +
    "/rest/api/table/${issueKey}?host=${jiraHost}"

def tableResponse = get(apiUrl)
    .header("Accept", "application/json")
    .header("Authorization", authHeader)
    .asObject(Map)

if (tableResponse.status != 200) {
    logger.error("Failed to fetch table: ${tableResponse.status}")
    return
}

def tableJson = tableResponse.body

// =====================================================
// Choose columns (THIS IS WHAT USERS CHANGE)
// =====================================================

// Column indexes (0-based)
def NUMBER_COLUMN = "0"   // Column A (ignored)
def TASK_COLUMN   = "1"   // Column B (Task Name)

// Header row index
def HEADER_ROW = 0

// =====================================================
// Iterate rows safely
// =====================================================
tableJson.sheets.Sheet1.data.dataTable.each { rowIndex, columns ->

    int row = rowIndex.toInteger()

    // Skip header row
    if (row == HEADER_ROW) {
        return
    }

    // Read task name from Column B
    def taskSummary = columns[TASK_COLUMN]?.value

    // Skip empty rows
    if (!taskSummary) {
        return
    }

    // -------------------------------------------------
    // Create Jira Task
    // -------------------------------------------------
    def createResp = post("/rest/api/3/issue")
        .header("Content-Type", "application/json")
        .body([
            fields: [
                project  : [ key: projectKey ],
                issuetype: [ name: "Task" ],
                summary  : taskSummary.toString(),
                description: [
                    type   : "doc",
                    version: 1,
                    content: [[
                        type   : "paragraph",
                        content: [[
                            type: "text",
                            text: "Created from Excel-like Table on ${issueKey}"
                        ]]
                    ]]
                ]
            ]
        ])
        .asObject(Map)

    if (createResp.status != 201) {
        logger.warn("Failed to create task for row ${row}")
    }
}

Alternative to Scripting

Excel-like Tables for Jira also supports spreadsheet formulas, allowing simple calculations and logic to be performed directly within the table. When paired with Jira field mapping, these calculated values can automatically populate Jira fields without requiring any scripting.

This approach is suitable when only basic automation is needed and provides a straightforward way to keep Jira fields in sync with spreadsheet data.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.