Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - openfin/excel-api-example: This repo demonstrates the usage of JavaScript Excel API provided by Openfin. · GitHub
Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - openfin/excel-api-example: This repo demonstrates the usage of JavaScript Excel API provided by Openfin. · GitHub
Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - openfin/excel-api-example: This repo demonstrates the usage of JavaScript Excel API provided by Openfin. · GitHub
Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - openfin/excel-api-example: This repo demonstrates the usage of JavaScript Excel API provided by Openfin. · GitHub
Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - openfin/excel-api-example: This repo demonstrates the usage of JavaScript Excel API provided by Openfin. · GitHub
Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - openfin/excel-api-example: This repo demonstrates the usage of JavaScript Excel API provided by Openfin. · GitHub
Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - openfin/excel-api-example: This repo demonstrates the usage of JavaScript Excel API provided by Openfin. · GitHub
Skip to content

Repository files navigation

IMPORTANT NOTE: The code in this repo has now been deprecated as it has been replaced by our new Excel integration. Please refer to the developer docs for more information.

Excel Service API Demo

This repo provides a demonstration of the OpenFin Excel Service and its JavaScript API.

Note: This main source code for this demo is intentionally coded in plain JavaScript so that its easy to follow, without any need to understand other technologies/ frameworks. The API libraries are generated from TypeScript, and the end-product utilizes webpack to achieve a single-file web application.

This demo uses ExcelDna to create the Excel addin.

Running the Demo

Quick Start

  1. Download and run the installer:

openfin installer download

  1. After the installer runs, the OpenFin application should launch and either connect to Excel if it already running or present the option to launch Excel.

  2. Once Excel is running you can create workbooks or open existing workbooks and observe two-way data synchronization between Excel and the demo app.

Modifying and Building Locally

For development purposes you may wish to clone this repository and run on a local computer. The Excel Add-In is only compatible with Excel for Windows.

Pre-requisite: Node and NPM must be installed ( https://nodejs.org/en/ ).

Clone the repository and, in the Command Prompt, navigate into the excel-api-example directory created.

In the Command Prompt run:

> npm install

Once the Node packages have installed, it is now possible to make modifications to files in the excel-api-example\src folder and rebuild the project by running:

> npm run webpack

After rebuilding, start the application by running:

> npm start

This will start a simple HTTP server on port 8080 and launch the OpenFin App automatically.

Including the API in Your Own Project

Manifest Declaration

Declare the Excel Service by including the following declaration in your application manifest:

"services":
[{"name": "excel"}]

Including the Client

Unlike other services, currently the Excel API client is only provided as a script tag. Include the following script tag on each page that requires API access:

<scriptsrc="https://openfin.github.io/excel-api-example/client/fin.desktop.Excel.js"></script>

Waiting for the Excel Service to be Running

During startup, an application which wishes to utilize the Excel Service should ensure the service is running and ready to receive commands by doing two things:

Setup event listeners so you are notified when Excel is connected/disconnected before trying to interact with Excel

asyncfunctiononExcelConnected(data){console.log("Excel Connected: "+data.connectionUuid);letconnected=awaitwindow.fin.desktop.Excel.getConnectionStatus();console.log("Connected: "+connected);// do some work with the excel api}asyncfunctiononExcelDisconnected(data){console.log("Excel Disconnected: "+data.connectionUuid);}functioninitializeExcelEvents(){console.log("Initialising excel connected/disconnected events");fin.desktop.ExcelService.addEventListener("excelConnected",onExcelConnected);fin.desktop.ExcelService.addEventListener("excelDisconnected",onExcelDisconnected);}initializeExcelEvents();

Invoke the Excel service after setting up your listeners by invoking:

awaitfin.desktop.ExcelService.init();

It is advisable to place this call before any calls on the fin.desktop.Excel namespace.

New Support Capabilities from Version 4.0+

Getting Started with the API

Writing to and Reading from a Spreadsheet:

After a connection has been established between Excel and the OpenFin application, pushing data to a spreadsheet and reading back the calculated values can be performed as follows:

varsheet1=fin.desktop.Excel.getWorkbookByName('Book1').getWorksheetByName('Sheet1');// A little fun with Pythagorean triples:sheet1.setCells([["A","B","C"],[3,4,"=SQRT(A2^2+B2^2)"],[5,12,"=SQRT(A3^2+B3^2)"],[8,15,"=SQRT(A4^2+B4^2)"],],"A1");// Write the computed values to console:sheet1.getCells("C2",0,2,cells=>{console.log(cells[0][0].value);console.log(cells[1][0].value);console.log(cells[2][0].value);});

Subscribing to Events:

Monitoring various application, workbook, and sheet events are done via the addEventListener functions on their respective objects. For example:

sheet1.getCells("C2",0,2,cells=>{varlastValue=cells[0][0].value;fin.desktop.Excel.addEventListener('afterCalculation',()=>{sheet1.getCells("C2",0,2,cells=>{if(cells[0][0].value!==lastValue){console.log('Value Changed!');}lastValue=cells[0][0].value;});});})

Legacy Callback-Based API

Version 1 of the Demo API utilized callbacks to handle asynchronous actions and return values. Starting in Version 2, all asynchronous functions are instead handled via Promises, however, for reverse compatibility the legacy callback-style calls are still supported.

All functions which return promises can also take a callback as the final argument. The following three calls are identical:

// Version 1 - Callback style [deprecated]fin.desktop.Excel.getWorkbooks(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise then callbackfin.desktop.Excel.getWorkbooks().then(workbooks=>{console.log('Number of open workbooks: ',workbooks.length);});// Version 2 - Promise awaitvarworkbooks=awaitfin.desktop.Excel.getWorkbooks();console.log('Number of open workbooks: ',workbooks.length);

Full API Documentation

The complete Excel Service API Documentation is available here.

In the future, type definition files will be available for public consumption via an NPM types package.

License

MIT

The code in this repository is covered by the included license.

However, if you run this code, it may call on the OpenFin RVM or OpenFin Runtime, which are covered by OpenFin’s Developer, Community, and Enterprise licenses. You can learn more about OpenFin licensing at the links listed below or just email us at support@openfin.co with questions.

https://openfin.co/developer-agreement/
https://openfin.co/licensing/

Support

Please enter an issue in the repo for any questions or problems. Alternatively, please contact us at support@openfin.co

About

This repo demonstrates the usage of JavaScript Excel API provided by Openfin.

Resources

Stars

30 stars

Watchers

26 watching

Forks

Releases

Packages

Used by

Contributors

Languages