{"id":11939,"date":"2023-12-07T14:07:38","date_gmt":"2023-12-07T11:07:38","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=11939"},"modified":"2026-06-30T17:21:31","modified_gmt":"2026-06-30T14:21:31","slug":"dhtmlx-spreadsheet-5-1","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/dhtmlx-spreadsheet-5-1\/","title":{"rendered":"DHTMLX Spreadsheet 5.1 with New Themes, Simplified Localization of Number Formats, Live Integration Demos with Frameworks, and More"},"content":{"rendered":"<p>Today we are delighted to present the release of DHTMLX Spreadsheet v5.1. The new version of our <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet\/\" rel=\"noopener\" target=\"_blank\">JavaScript Spreadsheet component<\/a> is delivered with a pack of useful features, which will appeal to both developers and end-users.<\/p>\n<p>Firstly, the new Spreadsheet version provides 4 built-in themes that can be customized to your liking. We also introduced simplified localization of number, date, currency, and time formats. Our collection of Spreadsheet integration demos now includes a new example for Svelte, and all such demos are available on the CodeSandbox platform. There are a couple of useful changes related to the export\/import feature. First, you can store the lock status and links of cells when exporting\/importing spreadsheet data in a JSON file. Moreover, if you need to save your project to an Excel file, now it is possible to specify your name for files with the .xlsx extension. For more convenient working with formulas, we also added automatic conversion of lowercase letters to upper-case and auto-closing of formulas.<\/p>\n\n\t\t<div class='post-banner'>\n\t\t    <div class='post-banner__inside'>\n\t\t        <div>\n\t\t            <div class=\"post-banner__title\">Download DHTMLX Spreadsheet v5.1<\/div>\n\t\t            <div class=\"post-banner__text\">Estimate the updated functionality for delivering Excel-like data tables<\/div>\n                <\/div>\n\t\t            \n                \n            <div class='post-banner__btn'>\n                <a href='https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet\/download.shtml' title='' class='button-secondary'>Get free trial<\/a>\n            <\/div>\n        \n            <\/div>\n\t\t<\/div>\n\t\n<p>Now let us review all these novelties in more detail.<\/p>\n<h5>New Customizable Built-in Themes<\/h5>\n<p>Customization has always been one of the main strengths of all DHTMLX products, including the Spreadsheet component. In v5.1, we significantly expanded Spreadsheet styling capabilities with four new built-in themes that are already available in the Suite library: <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/themes\/#light-theme-default\" rel=\"noopener\" target=\"_blank\">Light<\/a>, <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/themes\/#dark-theme\" rel=\"noopener\" target=\"_blank\">Dark<\/a>, <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/themes\/#light-high-contrast-theme\" rel=\"noopener\" target=\"_blank\">Light High Contrast<\/a>, and <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/themes\/#dark-high-contrast-theme\" rel=\"noopener\" target=\"_blank\">Dark High Contrast<\/a>. The availability of high-contrast themes makes our Spreadsheet component accessible to users with eyesight disorders.<\/p>\n<p>Just like in Suite, there are two ways to enable the needed theme in Spreadsheet. First, you can do it using the <strong>dhx.setTheme()<\/strong> method that takes two parameters:<\/p>\n<ul>\n<li><strong>theme<\/strong> (required) &#8211; designates the theme that should be applied using a string value (default value \u2013 \u201clight\u201d)<\/li>\n<li><strong>container<\/strong> (optional) &#8211; identifies the container where the theme will be added. It can be an <strong>HTMLElement<\/strong>, a container ID, a Layout cell ID, or <strong>document.documentElement<\/strong> (default value)<\/li>\n<\/ul>\n<p><iframe data-src=\"https:\/\/snippet.dhtmlx.com\/t6rspqai?mode=mobile\" frameborder=\"0\" width=\"100%\" height=\"560\"class=\"snippet-container js-iframe\"><\/iframe> <a href=\"https:\/\/snippet.dhtmlx.com\/t6rspqai?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Alternatively, you can enable the needed theme by changing the <strong>data<\/strong> attribute for one of the following elements:<\/p>\n<ul>\n<li>chosen container<\/li>\n<\/ul>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"sy0\">&lt;<\/span>div data<span class=\"sy0\">-<\/span>dhx<span class=\"sy0\">-<\/span>theme<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;dark&quot;<\/span> id<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;spreadsheet&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>div<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<ul>\n<li>root element<\/li>\n<\/ul>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">document.<span class=\"me1\">documentElement<\/span>.<span class=\"me1\">setAttribute<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;data-dhx-theme&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;dark&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<h6>Themes configuration: individually or all at once<\/h6>\n<p>Now let us consider some configuration aspects of new themes. If you pay attention to the styling settings of the default theme (&#8220;light&#8221;), you can notice variables of the color scheme in CSS variables.<\/p>\n<div class=\"codecolorer-container css default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"css codecolorer\"><span class=\"re4\">--dhx-h-primary<\/span><span class=\"sy0\">:<\/span> <span class=\"nu0\">200<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re4\">--dhx-s-primary<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">98%<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"re4\">--dhx-l-primary<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">40%<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>These variables enable an automatic change of the color scheme (specified in the HSL format) for other themes. The thing is when you modify any value of the CSS variable from the color scheme in the root element of the default theme, it will be recalculated for other themes in real time.<\/p>\n<p>Here is how you can simultaneously override the primary colors for all Spreadsheet themes:<\/p>\n<div class=\"codecolorer-container css default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"css codecolorer\">&lt;style<span class=\"sy0\">&gt;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">:<\/span><span class=\"kw5\">root<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"re4\">--dhx-h-primary<\/span><span class=\"sy0\">:<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"re4\">--dhx-l-primary<\/span><span class=\"sy0\">:<\/span> <span class=\"re3\">30%<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><br \/>\n&lt;\/style<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p>Other CSS variables based on the primary colors are recalculated accordingly. For example, the value of the focused color is derived from the following calculation:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"sy0\">--<\/span>dhx<span class=\"sy0\">-<\/span>color<span class=\"sy0\">-<\/span>focused<span class=\"sy0\">:<\/span> hsl<span class=\"br0\">&#40;<\/span>calc<span class=\"br0\">&#40;<\/span><span class=\"kw1\">var<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">--<\/span>dhx<span class=\"sy0\">-<\/span>h<span class=\"sy0\">-<\/span>primary<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">+<\/span> <span class=\"nu0\">10<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">var<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">--<\/span>dhx<span class=\"sy0\">-<\/span>s<span class=\"sy0\">-<\/span>primary<span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">var<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">--<\/span>dhx<span class=\"sy0\">-<\/span>l<span class=\"sy0\">-<\/span>primary<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>But what if you need to make changes in the visual appearance of only one particular theme? No worries, you can change the look of the needed theme in the <strong>data-dhx-theme<\/strong> attribute. <\/p>\n<p>As a cherry on top, v5.1 allows you to create a custom theme with the desired color scheme. If none of the new predefined themes correspond to your requirements, you can modify them by overriding the values of internal CSS variables. <\/p>\n<p><iframe data-src=\"https:\/\/snippet.dhtmlx.com\/59nt1rcb?mode=mobile\" frameborder=\"0\" width=\"100%\" height=\"560\"class=\"snippet-container js-iframe\"><\/iframe><a href=\"https:\/\/snippet.dhtmlx.com\/59nt1rcb?mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Find more details on working with new Spreadsheet themes in the <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/category\/themes\/\" rel=\"noopener\" target=\"_blank\">documentation<\/a>.<\/p>\n<h5>Convenient Localization for Number, Date, Time, and Currency Formats<\/h5>\n<p>Starting from v5.1, it also becomes much easier to localize popular predefined number formats in the Spreadsheet component such as number, date, time, and currency. Now it can be done using only one new <strong><a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/api\/spreadsheet_localization_config\/\" rel=\"noopener\" target=\"_blank\">localization<\/a><\/strong> property, where it is possible to specify the needed decimal and thousands separators, currency sign, time and date formats. The piece of code below shows how to change the default localization settings.<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> spreadsheet <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Spreadsheet<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;spreadsheet&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; localization<span class=\"sy0\">:<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; decimal<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;,&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ &quot;.&quot; | &quot;,&quot; - the decimal separator (&quot;.&quot; by default)<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; thousands<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot; &quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ &quot;.&quot; | &quot;,&quot; | &quot; &quot; | &quot;&quot; - the thousands separator (&quot;,&quot; by default)<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; currency<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;\u00a5&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ the currency sign (&quot;$&quot; by default)<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; dateFormat<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;%d\/%M\/%Y&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ the date format (&quot;%d\/%m\/%Y&quot; by default)<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; timeFormat<span class=\"sy0\">:<\/span> <span class=\"nu0\">24<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/ 12 | 24 - the time format (12 by default)<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>As a result of these changes, that\u2019s what you will see in the UI:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/12\/image2.png\" alt=\"v5.1 - localization of number formats\" width=\"885\" height=\"369\" class=\"alignnone size-full wp-image-11943\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/12\/image2.png 885w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/12\/image2-300x125.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2023\/12\/image2-768x320.png 768w\" sizes=\"auto, (max-width: 885px) 100vw, 885px\" \/><a href=\"https:\/\/snippet.dhtmlx.com\/xislsb3c?tag=spreadsheet&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<h5>Ready to Use Integration Demos For React, Angular, Vue, and Svelte<\/h5>\n<p>DHTMLX Spreadsheet is known to be quite flexible in terms of compatibility with front-end frameworks. Our component can be smoothly integrated into web apps based on top frameworks, and we offer nice samples that demonstrate how to do it in real-case scenarios. The new Spreadsheet 5.1 brings along updated integrations with <a href=\"https:\/\/codesandbox.io\/p\/sandbox\/dhtmlx-spreadsheet-with-react-rhjh94\" rel=\"noopener\" target=\"_blank\">React<\/a>, <a href=\"https:\/\/codesandbox.io\/p\/sandbox\/dhtmlx-spreadsheet-with-vue3-c75m2t\" rel=\"noopener\" target=\"_blank\">Vue<\/a>, and <a href=\"https:\/\/codesandbox.io\/p\/sandbox\/dhtmlx-spreadsheet-with-angular-7xnzr9\" rel=\"noopener\" target=\"_blank\">Angular<\/a>, as well as a new integration option with <a href=\"https:\/\/codesandbox.io\/p\/sandbox\/dhtmlx-spreadsheet-with-svelte-wt5v34\" rel=\"noopener\" target=\"_blank\">Svelte<\/a> that has been gaining more and more popularity in the dev community in recent years.<\/p>\n<p>You can find detailed instructions on the integration of DHTMLX Spreadsheet with front-end frameworks in this section of our documentation.<\/p>\n<p>All our Spreadsheet integration demos, including the new one, are now available on the <a href=\"https:\/\/codesandbox.io\/u\/DHTMLX\" rel=\"noopener\" target=\"_blank\">CodeSandbox<\/a> platform. It offers an instant development environment setup, where you can conveniently examine all integration samples, introduce code changes, and see the results at once.<\/p>\n<h5>Storing Locked State and Links of Cells In Data Set<\/h5>\n<p>The ability to lock cells is a popular feature of our component that enables you to make particular spreadsheet cells read-only for users. Previously, there were issues with storing the locked status of cells when exporting\/importing spreadsheet data to\/from a JSON file. Fortunately, it is no longer a problem.<\/p>\n<p>In version 5.1, we extended the Spreadsheet API with a new cell property named <strong>locked<\/strong>. When setting the value of this property to <em>true<\/em>, you can easily save spreadsheet data with locked cells to a JSON file and then import it, if needed. The implementation of this feature is shown in the following code:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> spreadsheet <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Spreadsheet<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;spreadsheet&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; toolbarBlocks<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><span class=\"st0\">&quot;undo&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;colors&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;decoration&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;align&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;help&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;lock&quot;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nspreadsheet.<span class=\"me1\">parse<\/span><span class=\"br0\">&#40;<\/span>dataset<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nspreadsheet.<span class=\"me1\">lock<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;B2,B4,B6&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ locks specified cells<\/span><br \/>\nspreadsheet.<span class=\"me1\">lock<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;A7:B8&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ locks a range of cells<\/span><br \/>\n<span class=\"co1\">\/\/the other locked cells are set via dataset <\/span><br \/>\n\u2026<br \/>\n<br \/>\n<span class=\"kw1\">const<\/span> dataset <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;a1&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Country&quot;<\/span><span class=\"sy0\">,<\/span> locked<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/locks a cell<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;b1&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Product&quot;<\/span><span class=\"sy0\">,<\/span> locked<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;c1&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Price&quot;<\/span><span class=\"sy0\">,<\/span> locked<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;d1&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Amount&quot;<\/span><span class=\"sy0\">,<\/span> locked<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;e1&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Total Price&quot;<\/span><span class=\"sy0\">,<\/span> locked<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"co1\">\/\/ more cells<\/span><br \/>\n<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>The same issue is solved in v5.1 for links in grid cells. Now you can specify a link for a certain cell in the data set using the new <strong>link<\/strong> property. It serves as an object, where you can add the text of the link and the URL for the link destination with <strong>text<\/strong> (optional) and <strong>href<\/strong> (required) parameters respectively.<\/p>\n<p>Programmatically, it is done the following way:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> dataset <span class=\"sy0\">=<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;a1&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Country&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> <span class=\"co1\">\/\/locks a cell<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;b1&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Product&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> &nbsp;<br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span> cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;a2&quot;<\/span><span class=\"sy0\">,<\/span> value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Ecuador&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;cell<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;b2&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Banana&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;link<span class=\"sy0\">:<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;href<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;http:\/\/localhost:8080\/&quot;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp;<span class=\"co1\">\/\/ more cells<\/span><br \/>\n<span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><a href=\"https:\/\/snippet.dhtmlx.com\/e3xct53l?tag=spreadsheet&#038;mode=wide\">Check the sample ><\/a><\/p>\n<p><em>Please, bear in mind that the <strong>value<\/strong> property of the <strong>cell<\/strong> object and the <strong>text<\/strong> property of the <strong>link<\/strong> object are mutually exclusive and you should not use them at the same time.<\/em><\/p>\n<h5>Custom Name for Excel File with Exported Spreadsheet Data<\/h5>\n<p>In previous versions, when users needed to export spreadsheet data into an Excel file, it was saved in the file named &#8220;data&#8221; by default. It could cause a bit of inconvenience, therefore we came up with a solution for this issue in this minor update.<\/p>\n<p>Starting from v5.1, it is possible to give a custom name to an exported file. To do that, we added a corresponding parameter to the <strong><a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/api\/export_xlsx_method\/\" rel=\"noopener\" target=\"_blank\">xlsx()<\/a><\/strong> method. <\/p>\n<p>That\u2019s how it works in practice:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">spreadsheet.<span class=\"kw5\">export<\/span>.<span class=\"me1\">xlsx<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;MyData&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><a href=\"https:\/\/snippet.dhtmlx.com\/btyo3j8s?tag=spreadsheet&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>When it becomes necessary to import data from files with the .xlsx extension, follow these <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/loading_data\/#loading-excel-file-xlsx\" rel=\"noopener\" target=\"_blank\">steps<\/a>.<\/p>\n<h5>Other Improvements<\/h5>\n<p>Built-in formulas are one of the most widely used features in our Spreadsheet, therefore it is important to make working with them maximally simple and user-friendly.  In version 5.1 end-users won\u2019t have to bother anymore about entering formulas only in upper case letters and obligatory closing them. Now our Spreadsheet automatically converts the letter case and closes brackets in formulas.<\/p>\n<p>You can go through all the new features delivered by our development team for this release in the &#8220;<a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/whats_new\/#version-51\" rel=\"noopener\" target=\"_blank\">What\u2019s new<\/a>&#8221; section.<\/p>\n<p>If you want to estimate the new functional capabilities of the updated DHTMLX Spreadsheet, just download a <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet\/download.shtml\" rel=\"noopener\" target=\"_blank\">free 30-day trial version<\/a> and embark on it right away. For our current clients, v5.1 is available in their <a href=\"https:\/\/dhtmlx.com\/clients\/\" rel=\"noopener\" target=\"_blank\">Client\u2019s Area<\/a>.<\/p>\n<p>Stay tuned for more DHTMLX releases in the coming months!<\/p>\n<h5>Related Materials:<\/h5>\n<ul>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/whats_new\/#version-51\" rel=\"noopener\" target=\"_blank\">What\u2019s new in v5.1<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/\" rel=\"noopener\" target=\"_blank\">DHTMLX Spreadsheet documentation<\/a><\/li>\n<li><a href=\"https:\/\/snippet.dhtmlx.com\/uulux27v?tag=spreadsheet&#038;mode=wide\" rel=\"noopener\" target=\"_blank\">DHTMLX Spreadsheet code snippets<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet\/download.shtml\" rel=\"noopener\" target=\"_blank\">Free 30-day trial version<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Today we are delighted to present the release of DHTMLX Spreadsheet v5.1. The new version of our JavaScript Spreadsheet component is delivered with a pack of useful features, which &#8230;<\/p>\n","protected":false},"author":101014,"featured_media":11948,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70],"tags":[33,34],"class_list":["post-11939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-releases","tag-all-posts","tag-spreadsheet"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/11939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/101014"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=11939"}],"version-history":[{"count":18,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/11939\/revisions"}],"predecessor-version":[{"id":15763,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/11939\/revisions\/15763"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/11948"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=11939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=11939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=11939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}