<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE article  PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "http://dtd.nlm.nih.gov/publishing/3.0/journalpublishing3.dtd"><article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="3.0" xml:lang="en" article-type="research article"><front><journal-meta><journal-id journal-id-type="publisher-id">JSEA</journal-id><journal-title-group><journal-title>Journal of Software Engineering and Applications</journal-title></journal-title-group><issn pub-type="epub">1945-3116</issn><publisher><publisher-name>Scientific Research Publishing</publisher-name></publisher></journal-meta><article-meta><article-id pub-id-type="doi">10.4236/jsea.2024.175014</article-id><article-id pub-id-type="publisher-id">JSEA-133408</article-id><article-categories><subj-group subj-group-type="heading"><subject>Articles</subject></subj-group><subj-group subj-group-type="Discipline-v2"><subject>Computer Science&amp;Communications</subject></subj-group></article-categories><title-group><article-title>
 
 
  Building Custom Spreadsheet Functions with Python: End-User Software Engineering Approach
 
</article-title></title-group><contrib-group><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Tamer</surname><given-names>Bahgat Elserwy</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Atef</surname><given-names>Tayh Nour El-Din Raslan</given-names></name><xref ref-type="aff" rid="aff2"><sup>2</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Tarek</surname><given-names>Ali</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref></contrib><contrib contrib-type="author" xlink:type="simple"><name name-style="western"><surname>Mervat</surname><given-names>H. Gheith</given-names></name><xref ref-type="aff" rid="aff1"><sup>1</sup></xref></contrib></contrib-group><aff id="aff1"><addr-line>Department of Software Engineering, Faculty of Graduate Studies for Statistical Research (FGSSR), Cairo University, Giza, Egypt</addr-line></aff><aff id="aff2"><addr-line>Department of Information Systems, Higher Institute of Advanced Studies, Giza, Egypt</addr-line></aff><pub-date pub-type="epub"><day>20</day><month>05</month><year>2024</year></pub-date><volume>17</volume><issue>05</issue><fpage>246</fpage><lpage>258</lpage><history><date date-type="received"><day>28,</day>	<month>March</month>	<year>2024</year></date><date date-type="rev-recd"><day>25,</day>	<month>May</month>	<year>2024</year>	</date><date date-type="accepted"><day>28,</day>	<month>May</month>	<year>2024</year></date></history><permissions><copyright-statement>&#169; Copyright  2014 by authors and Scientific Research Publishing Inc. </copyright-statement><copyright-year>2014</copyright-year><license><license-p>This work is licensed under the Creative Commons Attribution International License (CC BY). http://creativecommons.org/licenses/by/4.0/</license-p></license></permissions><abstract><p>
 
 
  End-user computing empowers non-developers to manage data and applications, enhancing collaboration and efficiency. Spreadsheets, a prime example of end-user programming environments widely used in business for data analysis. However, Excel functionalities have limits compared to dedicated programming languages. This paper addresses this gap by proposing a prototype for integrating Python&amp;#8217;s capabilities into Excel through on-premises desktop to build custom spreadsheet functions with Python. This approach overcomes potential latency issues associated with cloud-based solutions. This prototype utilizes Excel-DNA and IronPython. Excel-DNA allows creating custom Python functions that seamlessly integrate with Excel&amp;#8217;s calculation engine. IronPython enables the execution of these Python (CSFs) directly within Excel. C# and VSTO add-ins form the core components, facilitating communication between Python and Excel. This approach empowers users with a potentially open-ended set of Python (CSFs) for tasks like mathematical calculations, statistical analysis, and even predictive modeling, all within the familiar Excel interface. This prototype demonstrates smooth integration, allowing users to call Python (CSFs) just like standard Excel functions. This research contributes to enhancing spreadsheet capabilities for end-user programmers by leveraging Python&amp;#8217;s power within Excel. Future research could explore expanding data analysis capabilities by expanding the (CSFs) functions for complex calculations, statistical analysis, data manipulation, and even external library integration. The possibility of integrating machine learning models through the (CSFs) functions within the familiar Excel environment.
 
</p></abstract><kwd-group><kwd>End-User Software Engineering</kwd><kwd> Custom Spreadsheet Functions (CSFs)</kwd></kwd-group></article-meta></front><body><sec id="s1"><title>1. Introduction</title><p>End-user computing offers a centralized and standardized approach to managing applications, devices, and data. This translates to improved collaboration, scalability, and operational efficiency [<xref ref-type="bibr" rid="scirp.133408-ref1">1</xref>] . A significant trend in software technology is the rise of interactive applications built not by professional developers, but by domain experts leveraging computational tools to achieve their goals [<xref ref-type="bibr" rid="scirp.133408-ref2">2</xref>] . The global EUC market is estimated at USD 10.3 billion in 2022 and is projected for an 11% CAGR by 2032, reflecting the growing demand for EUC solutions driven by digital transformation across industries efficiency [<xref ref-type="bibr" rid="scirp.133408-ref1">1</xref>] . Research has shown that spreadsheets are a form of code, with spreadsheet users acting as end-user programmers [<xref ref-type="bibr" rid="scirp.133408-ref2">2</xref>] . Excel, specifically, remains one of the most popular end-user programming environments, with its importance in the business world continuing to rise [<xref ref-type="bibr" rid="scirp.133408-ref3">3</xref>] . Microsoft’s recent announcement of Python integration within Excel signifies a major step towards enhanced data analysis capabilities within familiar software environments. This integration has the potential to streamline tasks by leveraging Python’s robust programming capabilities within Excel’s user-friendly interface [<xref ref-type="bibr" rid="scirp.133408-ref4">4</xref>] . The combination opens doors for users to perform complex data analysis, statistical computations, and even develop predictive models efficiently. However, cloud-based Python integration in Excel faces limitations, particularly concerning latency. Latency refers to the delay in data processing caused by the time it takes for information to travel between the client and the cloud server [<xref ref-type="bibr" rid="scirp.133408-ref5">5</xref>] . This paper addresses the limitations of cloud-based Python integration in Excel, particularly latency issues arising from client-server data transfer. This paper proposes an alternative solution: an on-premises desktop application approach to build custom spreadsheet functions with Python developed with Excel-DNA and IronPython [<xref ref-type="bibr" rid="scirp.133408-ref6">6</xref>] . By keeping functionalities local, to overcome potential latency issues and offer a smoother user experience within Excel. Custom spreadsheet functions (CSFs) are custom functions created by users to perform specific calculations within Excel. They can be implemented through various methods, such as add-ins introducing new functions based on specific statistical distributions, or sheet-defined functions allowing users to define functions directly within Excel sheets [<xref ref-type="bibr" rid="scirp.133408-ref7">7</xref>] . This prototype leverages the architecture of Visual Studio Tools Office (VSTO) add-ins. These add-ins can monitor user activity within Office applications and react to events, such as clicking buttons added by the add-in itself [<xref ref-type="bibr" rid="scirp.133408-ref8">8</xref>] . VSTO add-ins follow a consistent methodology: a managed code assembly is loaded by a Microsoft Office application. Once loaded, the add-in can respond to events raised within the application and call into its object model for automation and extension. Additionally, it can access any. NET Framework classes and communicates with the application’s COM components through the primary interop assembly [<xref ref-type="bibr" rid="scirp.133408-ref8">8</xref>] . This makes VSTO add-ins valuable tools for extending the functionalities of standard Office applications. This paper outlines the limitations of cloud-based Python integration in Excel and proposes an alternative approach using an on-premises desktop application.</p><p>This paper is organized through the relevant background information. The next section delves into contemporary works related to this field. To establish prototype infrastructure, the third section explores the existing architecture relevant to the study. Following that, the fourth section provides a detailed overview of the VSTO Add-Ins architecture. As this groundwork lays, the fifth section, methodology and experiment setup, outlines the paper’s methods and procedures used in the research. Finally, the sixth section, results and discussions presents and interprets the paper’s findings.</p></sec><sec id="s2"><title>2. Background</title><p>This section discusses related research areas relevant to the development of custom spreadsheet functions (CSFs) in Excel.</p><sec id="s2_1"><title>2.1. End-User Software Engineering</title><p>This field focuses on empowering non-professional programmers to create software [<xref ref-type="bibr" rid="scirp.133408-ref9">9</xref>] . It explores adapting existing software development tools for collaboration between developers and non-programmers [<xref ref-type="bibr" rid="scirp.133408-ref10">10</xref>] .</p></sec><sec id="s2_2"><title>2.2. End-User Programming of Spreadsheets</title><p>Spreadsheets are a popular tool for end-user programming languages [<xref ref-type="bibr" rid="scirp.133408-ref11">11</xref>] . They are commonly used for data organization, development of custom functionality, and even education [<xref ref-type="bibr" rid="scirp.133408-ref12">12</xref>] , while spreadsheets are flexible and user-friendly applications [<xref ref-type="bibr" rid="scirp.133408-ref13">13</xref>] .</p></sec><sec id="s2_3"><title>2.3. Concepts in Spreadsheet Programming</title><p>Spreadsheets consist of cells that can hold numbers, text, or formulas. These formulas can reference other cells to perform calculations automatically. The system for creating and modifying spreadsheets acts as a programming environment. Spreadsheets are typically built on a grid structure, and the underlying model may lack structure, especially for non-programmers who refine their model as they develop the spreadsheet [<xref ref-type="bibr" rid="scirp.133408-ref14">14</xref>] .</p></sec><sec id="s2_4"><title>2.4. Custom Spreadsheet Functions</title><p>Custom spreadsheet functions (CSFs) are valuable when standard Excel functions are insufficient. They allow users to work with data, create modular designs, and improve spreadsheet reusability [<xref ref-type="bibr" rid="scirp.133408-ref15">15</xref>] . (CSFs) empower users to extend Excel’s capabilities by creating custom functions for specific needs. These functions can automate tasks, perform advanced calculations, and enhance the overall flexibility and efficiency of Excel [<xref ref-type="bibr" rid="scirp.133408-ref16">16</xref>] .</p></sec></sec><sec id="s3"><title>3. Related Work</title><p>Several studies have explored using Excel as a programming environment. Research has investigated using Excel for complex programming tasks, highlighting its potential for more powerful spreadsheet solutions. This suggests a shift towards more formal programming practices within Excel. Other studies demonstrate how Excel 365 allows creating solutions beyond traditional spreadsheets solutions [<xref ref-type="bibr" rid="scirp.133408-ref17">17</xref>] . They advocate for using semantically meaningful code for reliable results, contributing to expanding Excel’s capabilities. In the data science field, Python is widely used for data analysis and statistics [<xref ref-type="bibr" rid="scirp.133408-ref18">18</xref>] . Libraries like Pandas [<xref ref-type="bibr" rid="scirp.133408-ref19">19</xref>] help transfer data from spreadsheets into Python for further analysis. Additional tools like, xlutils [<xref ref-type="bibr" rid="scirp.133408-ref20">20</xref>] , openpyxl [<xref ref-type="bibr" rid="scirp.133408-ref21">21</xref>] , and xlsxwriter [<xref ref-type="bibr" rid="scirp.133408-ref22">22</xref>] simplify working with spreadsheets in Python. Research has also explored unifying Python with Excel, allowing users to directly call Python functions within Excel. PyXLL [<xref ref-type="bibr" rid="scirp.133408-ref23">23</xref>] , for example, enables writing Excel add-ins in Python instead of VBA. This simplifies data analysis by leveraging Python libraries. A study in the oil industry demonstrates the effectiveness of IronPython for streamlining analysis through automation [<xref ref-type="bibr" rid="scirp.133408-ref24">24</xref>] . This aligns with the goal of integrating IronPython with Excel to improve productivity and efficiency. Similar to its use in the oil industry, IronPython scripts can be used to automate tasks within Excel, manipulate data, perform calculations, and generate reports.</p><p>This paper focuses on creating a desktop-based solution that integrates Python with Excel using an on-premises desktop application. This allows users to leverage Python for custom functionalities within Excel through Python-based custom spreadsheet functions (CSFs). This research utilizes Excel-DNA and IronPython technologies to achieve this integration. Overall, this work contributes to the ongoing exploration of enhancing Excel’s capabilities through building custom spreadsheet functions with Python.</p></sec><sec id="s4"><title>4. Underlaying Architecture</title><p>This paper investigates the potential of the Visual Studio Tools for Office (VSTO) add-in architecture. This powerful functionality is enabled by a robust underlying architecture designed by Microsoft specifically for VSTO Add-ins. VSTO add-ins act as a bridge between software engineers and end-users in the realm of Microsoft Excel. The add-ins can listen to what’s happening within the Office environment. For example, the add-in can react to users clicking on buttons they added themselves. The Visual Studio Tools for Office Add-in (VSTO Add-in) architecture also facilitates communication between the user interface and the custom spreadsheet functions (CSFs) engine. It effectively interprets user requests and converts them into executable functions within the add-in. This empowers users to directly interact with these (CSFs) within the application’s interface, inputting data into cells and leveraging them for complex calculations and task automation within their familiar Office environment.</p><p>However, the VSTO add-in architecture goes beyond a user interface. It provides a robust development framework for constructing the underlying logic of (CSFs). Using Visual Studio and .NET languages, engineers define the functionality of (CSFs), accessing the Office application’s object model to perform tasks beyond standard capabilities. Moreover, the VSTO add-in framework enriches the design of the logic for (CSFs), tailoring them precisely to meet users’ needs. The VSTO add-in architecture integration is facilitated by Excel utilizing a manifest to load the VSTO add-in assembly. Subsequently, <xref ref-type="fig" rid="fig1">Figure 1</xref> illustrates how the VSTO add-in assembly initiates integration communication with Excel through object model calls, events, and callbacks, ensuring a harmonious and integrated experience for users [<xref ref-type="bibr" rid="scirp.133408-ref25">25</xref>] .</p><p>Integrating the VSTO add-in architecture fosters an effortless workflow, enabling users to leverage Python functions within Excel as if they were standard features. Python scripts embedded within Excel as custom (CSFs) can address specific user needs. End users benefit from a smooth integration of these (CSFs) within the familiar Excel interface, extending the capabilities of Excel and empowering them to perform more advanced tasks.</p></sec><sec id="s5"><title>5. The VSTO Add-Ins Architecture</title><p>The VSTO Add-Ins, built using Visual Studio Tools for Office, extend the functionality of Microsoft Office applications like Word, Excel, and Outlook. This architecture empowers developers to create powerful customizations that blend effortlessly with the familiar Office environment. In the case of starting Microsoft office application by the end user, the application uses the deployment manifest and the application manifest to locate and load the most current version of the VSTO Add-In assembly as depicted in <xref ref-type="fig" rid="fig2">Figure 2</xref> which illustrates the basic architecture of these VSTO Add-ins.</p></sec><sec id="s6"><title>6. Methodology</title><p>This paper adopts a structured methodology. The initial phase involves setting up the development environment. Next, custom spreadsheet functions (CSFs)</p><p>are developed using C# programming language, incorporating Python for enhanced capabilities. Following development, a rigorous testing process is undertaken to ensure the effectiveness and reliability of the CSFs. Finally, the results section presents and interprets the paper findings, providing valuable insights into the performance of the custom spreadsheet functions. This paper investigates an alternative solution, an on-premises desktop application approach to build custom spreadsheet functions (CSFs) in Excel environment. This approach targets to reduce potential latency issues and provide a smoother user experience compared to cloud-based solutions. This paper presents a prototype that leverages a combination of technologies based on Visual Studio Tools for Office architecture. The prototype discuss foundational technologies to build such as Python-based functions, C# programming forms the foundation, building the core components and backend functionalities as shown in <xref ref-type="fig" rid="fig3">Figure 3</xref>. Microsoft’s VSTO Add-ins bridge the gap between Python scripts and the Excel environment, enabling smooth communication. IronPython Excel Spreadsheet Integration allows for direct execution of Python-based (CSFs) within Excel spreadsheets. These Python-based (CSFs) integrate with Excel’s calculation model and can handle various operations, with the potential for future expansion.</p><p>In a development context, a set of Python-based functions developed that integrate with Excel’s calculations by combining these technologies. These Python-based functions handle various operations such as mathematical calculations (e.g., sum, average, and maximum) within Excel spreadsheets. Crucially, the set of Python-based (CSFs) is open-ended. This means that it is possible to use any general-purpose function in the future to address recent problems that</p><p>emerge. Finally, Excel-DNA will simplify the integration of .NET components, including C# and IronPython code, into Microsoft Excel, aiding in deploying the prototype and managing add-ins.</p><sec id="s6_1"><title>6.1. Experiment Setup</title><p>This subsection outlines the steps to establish a development environment for building custom Python-based spreadsheet functions with unique functionalities. It emphasizes the importance of experimental setup to ensure that the necessary Python interpreter and dependencies are installed. To experiment setup, follow these steps:</p><p>1) Start Visual Studio and initiate a new project. 2) Navigate to the “Create a new project” section and select “Visual C#” as a development language. 3) Delve into the “Office/SharePoint” category and choose “Excel” followed by the “Excel Add-in” project template. This sets up the project specifically for crafting Excel add-ins. 4) To empower Python functionality within add-ins, you need to reference the IronPython library.</p><p>5) Head over to the “Manage NuGet Packages” option within Visual Studio and search for IronPython packages. Install the appropriate version that aligns with the project requirements. 6) Similar to IronPython, Excel-DNA is essential for integrating. NET components into Excel add-in. 7) Access the “Manage NuGet Packages” window again and search for Excel-DNA. Locate and install the compatible version for the project. By following these steps, a well-equipped environment ready to tackle building custom Python functions within Excel environment.</p></sec><sec id="s6_2"><title>6.2. Coding</title><p>In this direction, we developed a set of Python-based custom spreadsheet functions (CSFs) to demonstrate this integration. For example, the PythonistaRangeAverage() function calculates the average of selected cell ranges within an Excel environment. The AVERAGE function calculates the average (arithmetic mean) of supplied numbers. AVERAGE can handle arguments such as cell references, ranges and numbers. This capability emphasizes that new worksheet functions can be effortlessly incorporated into Excel’s existing calculation model [<xref ref-type="bibr" rid="scirp.133408-ref26">26</xref>] . To understanding the interaction process, the interaction between Python and Excel in this system follows these key steps.</p><sec id="s6_2_1"><title>6.2.1. Initialization</title><p>During startup, an Average Functions object is created. Within its constructor, the system utilizes the IronPython interpreter to create a Python engine instance (engine) and a scope instance (scope) using the Python. Create Engine() and engine. Create Scope() methods, respectively as shown in pseudocode Listing 1.</p><disp-formula id="scirp.133408-formula4"><graphic  xlink:href="//html.scirp.org/file/4-9303238x6.png?20240527163959964"  xlink:type="simple"/></disp-formula><p>Listing 1. Pseudocode shows flow of average calculation using Python scripting within the Average Functions class.</p></sec><sec id="s6_2_2"><title>6.2.2. Calling the Python Function</title><p>When calling the Python-based custom spreadsheet PythonistaRangeAverage() function, an Average Functions object (pyFunctions) is created, and the provided range data is set within the Python scope. The script file calculates_range_average.py is then executed using the engine and associated scope. This script fetches the calculate_average function from the Python scope, see pseudocode Listing 2. This function checks for non-empty cells, computes the average, and returns the result.</p><disp-formula id="scirp.133408-formula5"><graphic  xlink:href="//html.scirp.org/file/4-9303238x7.png?20240527163959964"  xlink:type="simple"/></disp-formula><p>Listing 2. Pseudocode shows calculate_average function in calculates_range_average.py script for calculating cell averages.</p><p>In closing, this subsection showcased the integration of Python with Excel through a sample set of Python functions. The PythonistaRangeAverage() function serves as a concrete example of how new functionalities can be effortlessly incorporated into Excel’s existing calculation capabilities. The provided pseudocode as shown in Listing 1 and Listing 2 outline the key steps involved in this interaction, including initialization, and calling the Python function. This approach paves the way for developers to extend Excel’s functionalities using Python such as enhancing its potential for data analysis and manipulation.</p></sec></sec><sec id="s6_3"><title>6.3. Testing the Python-Based Functions</title><p>This section discusses the testing process used to ensure the accuracy and robustness of the implemented custom spreadsheet function set. The testing process is critical for identifying and resolving issues that could impede the functionality of the (CSFs). However, development can also encounter challenges related to debugging. A common hurdle is version compatibility. Incompatibilities might arise between Excel-DNA, IronPython, and the .NET Framework versions used in the project. To overcome this, meticulous management of project dependencies is essential. Ensure all components, including Python, IronPython, and the .NET Framework, are fully compatible with each other. It might also be necessary to test with different version combinations to guarantee overall integration.</p>Testing the Custom Spreadsheet Functions (CSFs)<p>This subsection details how to utilize the custom spreadsheet functions (CSFs) within the Excel environment and here are steps to use it:</p><p>1) Start Excel and run the function by opening Microsoft Excel. Within the spreadsheet, type = PythonistaRangeAverage() in a new empty cell (e.g., C2) or inside the formula bar. This function behaves just like standard Excel functions, as shown in <xref ref-type="fig" rid="fig4">Figure 4</xref>.</p><p>2) Select the desired range of cells to calculate the average, as illustrated in <xref ref-type="fig" rid="fig5">Figure 5</xref>.</p><p>3) Press Enter to initiate the calculation. The result will be displayed in the cell where the formula was entered, as shown in <xref ref-type="fig" rid="fig6">Figure 6</xref>.</p><p>In the previous example, the VSTO add-in architecture integrates flawlessly. It executes the (CSFs) call PythonistaRangeAverage() in the background. It then transmits the data from the selected range to the custom function implemented within the add-in.</p><p>In conclusion, the experiments verify that the PythonistaRangeAverage() function performs the average calculations and returns the result back to Excel environment, where it’s displayed in the Excel spreadsheet.</p></sec></sec><sec id="s7"><title>7. Results and Discussions</title><p>As a result, the testing process confirmed the implementation Python-based custom spreadsheet functions (CSFs) within the Excel environment. Users can directly call (CSFs) functions in their spreadsheets, the prototype Pythonista RangeAverage() function just like any standard Excel function. Moreover, the intuitive integration and functionality allow users to initiate Python script execution simply by entering the (CSF) name and selecting the desired range within a cell to calculate the average. The VSTO Add-in architecture efficiently handles this call, passing the data to the Python function within the add-in, and promptly displays the calculated back in the user’s spreadsheet. In this domain, future research could explore expanding the available (CSFs) functions and investigate more complex calculations such as explore enabling (CSFs) functions to handle more complex data analysis tasks. This could involve statistical functions, data manipulation tools, or integration with external libraries. Furthermore, investigate the possibility of integrating machine learning models written in Python into the Excel environment through (CSFs) functions.</p></sec><sec id="s8"><title>8. Conclusion</title><p>In conclusion, this paper introduces a novel solution on-premises desktop application approach building custom spreadsheet functions with Python to overcome latency issues associated with cloud-based Python integration in Excel. It utilizes C# programming and VSTO add-ins to seamlessly connect Python scripts with Excel, allowing users to perform calculations directly within spreadsheets as any standard Excel function. This effective implementation empowers users and validates the effectiveness of the methodology, demonstrating how VSTO add-ins can transform Excel into a powerful data analysis tool. Future research could explore expanding data analysis capabilities by expanding (CSFs) functions for complex calculations, statistical analysis, data manipulation, and even external library integration. The possibility of integrating machine learning models through custom spreadsheet functions opens doors for even more powerful data analysis techniques within the familiar Excel environment.</p></sec><sec id="s9"><title>Acknowledgements</title><p>I would like to be grateful to our teaching staff at the department of software engineering, faculty of graduate studies for statistical research (FGSSR), Cairo University for their guidance and support.</p></sec><sec id="s10"><title>Conflicts of Interest</title><p>The authors declare no conflicts of interest regarding the publication of this paper.</p></sec><sec id="s11"><title>Cite this paper</title><p>Elserwy, T.B., Raslan, A.T.N.E.-D., Ali, T. and Gheith, M.H. (2024) Building Custom Spreadsheet Functions with Python: End-User Software Engineering Approach. Journal of Software Engineering and Applications, 17, 246-258. https://doi.org/10.4236/jsea.2024.175014</p></sec></body><back><ref-list><title>References</title><ref id="scirp.133408-ref1"><label>1</label><mixed-citation publication-type="other" xlink:type="simple">Global Market Insights (2023) End-User-Computing-EUC-Market.  &lt;br&gt;https://www.gminsights.com/industry-analysis/end-user-computing-euc-market </mixed-citation></ref><ref id="scirp.133408-ref2"><label>2</label><mixed-citation publication-type="other" xlink:type="simple">Borghouts, J., Gordon, A.D., Sarkar, A. and Toronto, N. (2019) End-User Probabilistic Programming. &lt;i&gt;Quantitative Evaluation of Systems&lt;/i&gt;, Glasgow, 10-12 September 2019, 3-24. &lt;br&gt;https://doi.org/10.1007/978-3-030-30281-8_1 </mixed-citation></ref><ref id="scirp.133408-ref3"><label>3</label><mixed-citation publication-type="other" xlink:type="simple">Tallis, M., Waltzman, R. and Blazer, R. (2007) Adding Deductive Logic to a Cots Spreadsheet. &lt;i&gt;The Knowledge Engineering Review&lt;/i&gt;, 22, 255-268. &lt;br&gt;https://doi.org/10.1017/s0269888907001166  </mixed-citation></ref><ref id="scirp.133408-ref4"><label>4</label><mixed-citation publication-type="other" xlink:type="simple">Microsoft (2023) Announcing Python in Excel: Combining the Power of Python and the Flexibility of Excel. &lt;br&gt;https://techcommunity.microsoft.com/t5/excel-blog/announcing-python-in-excel-combining-the-power-of-python-and-the/ba-p/3893439 </mixed-citation></ref><ref id="scirp.133408-ref5"><label>5</label><mixed-citation publication-type="other" xlink:type="simple">Gy&amp;#337;r&amp;#246;di, R., Pavel, M.I., Gy&amp;#337;r&amp;#246;di, C. and Zmaranda, D. (2019) Performance of OnPrem versus Azure SQL Server: A Case Study. &lt;i&gt;IEEE Access&lt;/i&gt;, 7, 15894-15902. &lt;br&gt;https://doi.org/10.1109/ACCESS.2019.2893333  </mixed-citation></ref><ref id="scirp.133408-ref6"><label>6</label><mixed-citation publication-type="other" xlink:type="simple">NET Foundation (2023) Ironpython. &lt;br&gt;https://ironpython.net/ </mixed-citation></ref><ref id="scirp.133408-ref7"><label>7</label><mixed-citation publication-type="other" xlink:type="simple">Turk, T. (2021) SDFunc: Modular Spreadsheet Design with Sheet-Defined Functions in Microsoft Excel. &lt;i&gt;Journal of Software&lt;/i&gt;:&lt;i&gt; Practice and Experience&lt;/i&gt;, 52, 415-426. &lt;br&gt;https://doi.org/10.1002/spe.3027</mixed-citation></ref><ref id="scirp.133408-ref8"><label>8</label><mixed-citation publication-type="other" xlink:type="simple">Microsoft (2023) Architecture of VSTO Add-Ins.  &lt;br&gt;https://learn.microsoft.com/en-us/visualstudio/vsto/architecture-of-vsto-add-ins?view=vs-2022 </mixed-citation></ref><ref id="scirp.133408-ref9"><label>9</label><mixed-citation publication-type="other" xlink:type="simple">Dwivedi, V. (2022) Halo: A Framework for End-User. Carnegie Mellon University, Pittsburgh. </mixed-citation></ref><ref id="scirp.133408-ref10"><label>10</label><mixed-citation publication-type="other" xlink:type="simple">Ko, A.J., Abraham, R., Beckwith, L., Blackwell, A., Burnett, M., Erwig, M., Scaffidi, C., Lawrance, J., Lieberman, H., Myers, B., Rosson, M.B., Rothermel, G., Shaw, M. and Wiedenbeck, S. (2011) The State of the Art in End-User Software Engineering. &lt;i&gt;ACM Computing Surveys&lt;/i&gt;, 43, Article No. 21. &lt;br&gt;https://doi.org/10.1145/1922649.1922658 </mixed-citation></ref><ref id="scirp.133408-ref11"><label>11</label><mixed-citation publication-type="other" xlink:type="simple">Chambers, C., Erwig, M. and Luckey, M. (2010) Sheetdiff: A Tool for Identifying Changes in Spreadsheets. 2010 &lt;i&gt;IEEE Symposium on Visual Languages and H&lt;/i&gt;&lt;i&gt;u&lt;/i&gt;&lt;i&gt;man-Centric Computing&lt;/i&gt;, Leganes, 21-25 September 2010, 85-92. &lt;br&gt;https://doi.org/10.1109/VLHCC.2010.21  </mixed-citation></ref><ref id="scirp.133408-ref12"><label>12</label><mixed-citation publication-type="other" xlink:type="simple">Bock, A. and Biermann, F. (2019) Puncalc: Task-Based Parallelism and Speculative Reevaluation in Spreadsheets. &lt;i&gt;The Journal of Supercomputing&lt;/i&gt;, 76, 4977-4997. &lt;br&gt;https://doi.org/10.1007/s11227-019-02823-8  </mixed-citation></ref><ref id="scirp.133408-ref13"><label>13</label><mixed-citation publication-type="other" xlink:type="simple">Hermans, F., Pinzger, M. and Deursen, A. (2011) Supporting Professional Spreadsheet Users by Generating Leveled Dataflow Diagrams. &lt;i&gt;Proceedings of the &lt;/i&gt;33&lt;i&gt;rd I&lt;/i&gt;&lt;i&gt;n&lt;/i&gt;&lt;i&gt;ternational Conference on Software Engineering&lt;/i&gt;, Honolulu, 21-28 May 2011, 451-460. &lt;br&gt;https://doi.org/10.1145/1985793.1985855</mixed-citation></ref><ref id="scirp.133408-ref14"><label>14</label><mixed-citation publication-type="book" xlink:type="simple">Abraham, R., Burnett, M. and Erwig, M. (2009) Spreadsheet Programming. In: Wah, B.W., Ed., &lt;i&gt;Wiley Encyclopedia of Computer Science and Engineering&lt;/i&gt;, John Wiley &amp; Sons, Hoboken. &lt;br&gt;https://doi.org/10.1002/9780470050118.ecse415  </mixed-citation></ref><ref id="scirp.133408-ref15"><label>15</label><mixed-citation publication-type="other" xlink:type="simple">McCutchen, M., Borghouts, J., Gordon, A., Jones, S. and Sarkar, A. (2020) Elastic Sheet-Defined Functions: Generalising Spreadsheet Functions to Variable-Size Input Arrays. &lt;i&gt;Journal of Functional Programming&lt;/i&gt;, 30, e26. &lt;br&gt;https://doi.org/10.1017/S0956796820000234  </mixed-citation></ref><ref id="scirp.133408-ref16"><label>16</label><mixed-citation publication-type="other" xlink:type="simple">Klasson, K.T. (2018) QXLA: Adding Upper Quantiles for the Studentized Range to Excel for Multiple Comparison Procedures. &lt;i&gt;Journal of Statistical Software&lt;/i&gt;, 85, 1-9. &lt;br&gt;https://doi.org/10.18637/jss.v085.c01 </mixed-citation></ref><ref id="scirp.133408-ref17"><label>17</label><mixed-citation publication-type="other" xlink:type="simple">Bartholomew, P. (2023) Excel as a Turing-Complete Functional Programming Environment. arXiv:2309.00115. &lt;br&gt;https://doi.org/10.48550/arXiv.2309.00115 </mixed-citation></ref><ref id="scirp.133408-ref18"><label>18</label><mixed-citation publication-type="other" xlink:type="simple">Nassereldine, A., Chen, P. and Xiong, J. (2022) Excel Spreadsheet Analyzer.  &lt;br&gt;https://arxiv.org/abs/2211.06333 </mixed-citation></ref><ref id="scirp.133408-ref19"><label>19</label><mixed-citation publication-type="other" xlink:type="simple">McKinney, W. (2011) pandas: A Foundational Python Library for Data Analysis and Statistics.  &lt;br&gt;https://docslib.org/doc/4231522/a-foundational-python-library-for-data-analysis-and-statistics  </mixed-citation></ref><ref id="scirp.133408-ref20"><label>20</label><mixed-citation publication-type="other" xlink:type="simple">Xlutils Documentation. &lt;br&gt;https://xlutils.readthedocs.io/en/latest/# </mixed-citation></ref><ref id="scirp.133408-ref21"><label>21</label><mixed-citation publication-type="other" xlink:type="simple">https://openpyxl.readthedocs.io/en/stable/tutorial.html </mixed-citation></ref><ref id="scirp.133408-ref22"><label>22</label><mixed-citation publication-type="other" xlink:type="simple">https://xlsxwriter.readthedocs.io/contents.html </mixed-citation></ref><ref id="scirp.133408-ref23"><label>23</label><mixed-citation publication-type="other" xlink:type="simple">Introduction to PyXLL. &lt;br&gt;https://www.pyxll.com/docs/introduction.html </mixed-citation></ref><ref id="scirp.133408-ref24"><label>24</label><mixed-citation publication-type="other" xlink:type="simple">Fatra, R., Flodin, E., Bawono, C., Arshanda, M., Rivano, F. and Rachmanto, D. (2020) Teasing Insight Out of Reams of Data Using Advanced Data Visualization and Analytics Software for Improved Reservoir Management, Rokan Light Oil, Indonesia. &lt;i&gt;SPE/IATMI Asia Pacific Oil &amp; Gas Conference and Exhibition&lt;/i&gt;, Bali, 29-31 October 2019. &lt;br&gt;https://doi.org/10.2118/196318-MS</mixed-citation></ref><ref id="scirp.133408-ref25"><label>25</label><mixed-citation publication-type="other" xlink:type="simple">iFour Technolab (2016) Office Add-in Development: VSTO Add-ins vs JavaScript API. &lt;br&gt;https://www.ifourtechnolab.com/blog/office-add-in-development-vsto-add-ins-vs-javascript-api </mixed-citation></ref><ref id="scirp.133408-ref26"><label>26</label><mixed-citation publication-type="other" xlink:type="simple">Excel-DNA Free and Easy. NET for Excel. &lt;br&gt;https://excel-dna.net/</mixed-citation></ref></ref-list></back></article>