REGISTER.ID function

The REGISTER.ID function is an Excel add-in function that returns the register ID of a procedure exported by a DLL or code resource, so that other functions such as CALL can invoke it. It depends on native Windows libraries and on the Excel add-in mechanism, which do not exist in a browser or Node.js environment. Jspreadsheet lists the function for compatibility with the Excel catalog, but Jspreadsheet Formulas Pro does not evaluate it. Cells containing it return an error, and the recommended replacement is a custom formula written in JavaScript.

Documentation

Returns the register ID of a DLL or code resource procedure in Excel. Not evaluated by Jspreadsheet.

Category

Add-in and Automation

Syntax

REGISTER.ID(module_text, procedure, [type_text])

Parameter Description
module_text The name of the DLL or code resource that contains the procedure.
procedure The name or ordinal number of the procedure inside the DLL.
[type_text] Optional. The text that describes the data types of the return value and of the arguments, as used by Excel add-ins.

Behavior

In Excel, REGISTER.ID loads a native library and returns a numeric handle. In Jspreadsheet the function is not implemented, so the formula engine treats it as an unknown function.

  • Any call to REGISTER.ID returns #ERROR!, regardless of the arguments.
  • The error can be handled with IFERROR or detected with ISERROR, like any other formula error.
  • Spreadsheets imported from Excel that use REGISTER.ID or CALL keep the formula text, but the cells show the error until the formula is replaced.
  • Jspreadsheet does not load DLLs or code resources. The equivalent extension point is a custom formula registered in JavaScript, which is available to every cell by name.

Common Errors

Error Description
#ERROR! Returned for every call, because the function is not evaluated by Jspreadsheet Formulas Pro.

Best practices

  • Replace REGISTER.ID and CALL with a custom JavaScript formula. See the custom formulas documentation for how to register one.
  • When a spreadsheet must stay compatible with Excel, wrap the call with IFERROR so the Jspreadsheet version shows a fallback value instead of the error.
  • Search imported files for REGISTER.ID before publishing them, since the error propagates to every formula that depends on the cell.

Usage

A few examples using the REGISTER.ID function.

REGISTER.ID("Kernel32", "GetTickCount", "J")
// Returns #ERROR! in Jspreadsheet

IFERROR(REGISTER.ID("Kernel32", "GetTickCount", "J"), "Not supported")
// Returns "Not supported"

ISERROR(REGISTER.ID("Kernel32", "GetTickCount", "J"))
// Returns TRUE

Interactive Spreadsheet Demo

<html>
<script src="https://jsuites.net/v6/jsuites.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jspreadsheet@13/dist/index.min.js"></script>
<link rel="stylesheet" href="https://jsuites.net/v6/jsuites.css" type="text/css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jspreadsheet@13/dist/jspreadsheet.min.css" type="text/css" />

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Material+Icons" />
<script src="https://cdn.jsdelivr.net/npm/@jspreadsheet/formula-pro/dist/index.min.js"></script>

<div id="spreadsheet"></div>

<script>
// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('NzA5NjE0NGU0ZjQ4MDQwNTFhMzAxNDU1ODdhNzY5ZWZhYjRiMDcwYjFjMWQ1Yjk3YzRkMzFmMGRiNTlhMGEzM2E2YzBiYzg0NDg1NjNlYzQ5ZjBlZmI2MzVmNjk0Y2RjMjE5MGNiM2IxZmQwZTJmZTVlYjU5OWMyNjdhNzNlNzYsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNekl5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

// Create a new spreadsheet
jspreadsheet(document.getElementById('spreadsheet'), {
  worksheets: [{
    data: [
    [
        "Formula",
        "Result"
    ],
    [
        "REGISTER.ID",
        "=REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\")"
    ],
    [
        "With fallback",
        "=IFERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"), \"Not supported in Jspreadsheet\")"
    ],
    [
        "Is error?",
        "=ISERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"))"
    ]
]
  }]
});
</script>
</html>
import React, { useRef } from "react";
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/react";
import formula from "@jspreadsheet/formula-pro";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";

// Set license
jspreadsheet.setLicense('NzA5NjE0NGU0ZjQ4MDQwNTFhMzAxNDU1ODdhNzY5ZWZhYjRiMDcwYjFjMWQ1Yjk3YzRkMzFmMGRiNTlhMGEzM2E2YzBiYzg0NDg1NjNlYzQ5ZjBlZmI2MzVmNjk0Y2RjMjE5MGNiM2IxZmQwZTJmZTVlYjU5OWMyNjdhNzNlNzYsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNekl5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

export default function App() {
    // Spreadsheet array of worksheets
    const spreadsheet = useRef();

    // Worksheet data
    const data = [
    [
        "Formula",
        "Result"
    ],
    [
        "REGISTER.ID",
        "=REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\")"
    ],
    [
        "With fallback",
        "=IFERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"), \"Not supported in Jspreadsheet\")"
    ],
    [
        "Is error?",
        "=ISERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"))"
    ]
];

    // Render component
    return (
        <Spreadsheet ref={spreadsheet}>
            <Worksheet data={data} />
        </Spreadsheet>
    );
}
<template>
    <Spreadsheet ref="spreadsheet">
        <Worksheet :data="data" />
    </Spreadsheet>
</template>

<script>
import { Spreadsheet, Worksheet, jspreadsheet } from "@jspreadsheet/vue";
import "jsuites/dist/jsuites.css";
import "jspreadsheet/dist/jspreadsheet.css";
import formula from "@jspreadsheet/formula-pro";

// Set license
jspreadsheet.setLicense('NzA5NjE0NGU0ZjQ4MDQwNTFhMzAxNDU1ODdhNzY5ZWZhYjRiMDcwYjFjMWQ1Yjk3YzRkMzFmMGRiNTlhMGEzM2E2YzBiYzg0NDg1NjNlYzQ5ZjBlZmI2MzVmNjk0Y2RjMjE5MGNiM2IxZmQwZTJmZTVlYjU5OWMyNjdhNzNlNzYsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNekl5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

export default {
    components: {
        Spreadsheet,
        Worksheet,
    },
    data() {
        // Worksheet data
        const data = [
    [
        "Formula",
        "Result"
    ],
    [
        "REGISTER.ID",
        "=REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\")"
    ],
    [
        "With fallback",
        "=IFERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"), \"Not supported in Jspreadsheet\")"
    ],
    [
        "Is error?",
        "=ISERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"))"
    ]
]

        return {
            data
        };
    }
}
</script>
import { Component, ViewChild, ElementRef } from "@angular/core";
import jspreadsheet from "jspreadsheet";
import formula from "@jspreadsheet/formula-pro";

// You can use the following license for quick testing on localhost, StackBlitz, or CodeSandbox.
// The license is valid for one day, after which the spreadsheet will become read-only.
// For a longer trial period, you can create a free account and generate a demo license with an extended expiration date.
jspreadsheet.setLicense('NzA5NjE0NGU0ZjQ4MDQwNTFhMzAxNDU1ODdhNzY5ZWZhYjRiMDcwYjFjMWQ1Yjk3YzRkMzFmMGRiNTlhMGEzM2E2YzBiYzg0NDg1NjNlYzQ5ZjBlZmI2MzVmNjk0Y2RjMjE5MGNiM2IxZmQwZTJmZTVlYjU5OWMyNjdhNzNlNzYsZXlKamJHbGxiblJKWkNJNklpSXNJbTVoYldVaU9pSktjM0J5WldGa2MyaGxaWFFpTENKa1lYUmxJam94TnpreE1ESTRNekl5TENKa2IyMWhhVzRpT2xzaWFuTndjbVZoWkhOb1pXVjBMbU52YlNJc0ltTnZaR1Z6WVc1a1ltOTRMbWx2SWl3aWFuTm9aV3hzTG01bGRDSXNJbU56WWk1aGNIQWlMQ0p6ZEdGamEySnNhWFI2TG1sdklpd2lkMlZpWTI5dWRHRnBibVZ5TG1sdklpd2liRzlqWVd4b2IzTjBJbDBzSW5Cc1lXNGlPaUl6TkNJc0luTmpiM0JsSWpwYkluWTNJaXdpZGpnaUxDSjJPU0lzSW5ZeE1DSXNJbll4TVNJc0luWXhNaUlzSW5ZeE15SXNJbU5vWVhKMGN5SXNJbVp2Y20xeklpd2labTl5YlhWc1lTSXNJbkJoY25ObGNpSXNJbkpsYm1SbGNpSXNJbU52YlcxbGJuUnpJaXdpYVcxd2IzSjBaWElpTENKaVlYSWlMQ0oyWVd4cFpHRjBhVzl1Y3lJc0luTmxZWEpqYUNJc0luQnlhVzUwSWl3aWMyaGxaWFJ6SWl3aVkyeHBaVzUwSWl3aWMyVnlkbVZ5SWl3aWMyaGhjR1Z6SWl3aVptOXliV0YwSWl3aWNHbDJiM1FpWFN3aVpHVnRieUk2ZEhKMVpYMD0=');

// Set the extensions
jspreadsheet.setExtensions({ formula });

@Component({
    standalone: true,
    selector: "app-root",
    template: `<div #spreadsheet></div>`
})
export class AppComponent {
    @ViewChild("spreadsheet") spreadsheet: ElementRef;
    // Worksheets
    worksheets: jspreadsheet.worksheetInstance[];

    // Create a new data grid
    ngAfterViewInit() {
        // Create spreadsheet
        this.worksheets = jspreadsheet(this.spreadsheet.nativeElement, {
            worksheets: [{
                data: [
    [
        "Formula",
        "Result"
    ],
    [
        "REGISTER.ID",
        "=REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\")"
    ],
    [
        "With fallback",
        "=IFERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"), \"Not supported in Jspreadsheet\")"
    ],
    [
        "Is error?",
        "=ISERROR(REGISTER.ID(\"Kernel32\", \"GetTickCount\", \"J\"))"
    ]
]
            }]
        });
    }
}