{"id":5536,"date":"2018-10-25T11:47:52","date_gmt":"2018-10-25T08:47:52","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=5536"},"modified":"2024-08-10T13:50:51","modified_gmt":"2024-08-10T10:50:51","slug":"dhtmlxspreadsheet-reborn-major-update-3-0","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/dhtmlxspreadsheet-reborn-major-update-3-0\/","title":{"rendered":"dhtmlxSpreadsheet Reborn in Major Update 3.0"},"content":{"rendered":"<p>A series of cutting-edge releases goes on! <\/p>\n<p>Here comes dhtmlxSpreadsheet 3.0, entirely renewed and redesigned <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet\/\" rel=\"noopener\" target=\"_blank\">JavaScript spreadsheet component<\/a> with a range of major improvements. We&#8217;ve got rid of PHP dependency transforming it into a pure client-side JavaScript widget. The API has been thoroughly modified making room for various configuration options and operations for the grid. The interface has acquired the stylish Material look. Our Spreadsheet component has also received support for <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet-for-Angular\/\" rel=\"noopener\" target=\"_blank\">Angular<\/a>, <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet-for-React\/\" rel=\"noopener\" target=\"_blank\">React<\/a>, and <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet-for-Vue\/\" rel=\"noopener\" target=\"_blank\">Vue.js<\/a>.<\/p>\n<p><strong>Hurry up to <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet\/download.shtml\" rel=\"noopener\" target=\"_blank\">download the 30-day free trial of the latest version<\/a>!<\/strong><\/p>\n<h5>Fine-tune Your JavaScript Spreadsheet<\/h5>\n<p>V3.0 presents a highly adjustable structure for dhtmlxSpreadsheet, which consists of Menu, Context Menu, Toolbar, Editing Line, and Grid. All of these elements can be easily configured. For instance, you can put a limit on the number of columns and rows in the grid for your purposes:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">var<\/span> spreadsheet <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Spreadsheet<\/span><span class=\"br0\">&#40;<\/span>document.<span class=\"me1\">body<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br \/>\n&nbsp; &nbsp; colsCount<span class=\"sy0\">:<\/span> <span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; rowsCount<span class=\"sy0\">:<\/span> <span class=\"nu0\">10<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>While the Menu section is hidden by default, you can switch it on via the API. Both Menu and Context Menu may include additional options for manipulating data in the grid. <\/p>\n<p>You can add new Menu and Context Menu items:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"co1\">\/\/ spreadsheet.menu.data.add \/ spreadsheet.contextMenu.data.add<\/span><br \/>\nspreadsheet.<span class=\"me1\">toolbar<\/span>.<span class=\"me1\">data<\/span>.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;menuItem&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;menuitem-id&quot;<\/span><span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; value<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Some value&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;parent-id&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/02_menu.gif\" alt=\"Spreadsheet Menu Customization\" width=\"656\" height=\"420\" class=\"alignleft size-full wp-image-5540\" \/><br \/>\nSpreadsheet Menu Customization. <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/samples\/05_customization\/02_menu.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/03_context_menu.gif\" alt=\"Spreadsheet Context Menu\" width=\"656\" height=\"380\" class=\"alignleft size-full wp-image-5542\" \/><br \/>\nSpreadsheet Context Menu Customization. <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/samples\/05_customization\/03_context_menu.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>The toolbar is the most flexible part of dhtmlxSpreadsheet. You can replace icons of toolbar controls with custom ones, remove default controls or add new blocks of controls at your discretion.<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">spreadsheet.<span class=\"me1\">toolbar<\/span>.<span class=\"me1\">data<\/span>.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;button&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; icon<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;mdi mdi-delete&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; tooltip<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Remove all&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;remove-all&quot;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/01_toolbar_buttons.gif\" alt=\"Spreadsheet Toolbar Buttons\" width=\"656\" height=\"420\" class=\"alignleft size-full wp-image-5544\" \/><br \/>\nAdding Custom Toolbar Buttons. <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/samples\/05_customization\/01_toolbar_buttons.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>dhtmxSpreadsheet makes use of the Material-style icon font. However, you can change it for any other icon font pack:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"sy0\">&lt;<\/span>script type<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/javascript&quot;<\/span> src<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;..\/..\/codebase\/spreadsheet.js&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>script<span class=\"sy0\">&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>link rel<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;stylesheet&quot;<\/span> href<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;..\/..\/codebase\/spreadsheet.css&quot;<\/span><span class=\"sy0\">&gt;<\/span><br \/>\n<br \/>\n<span class=\"sy0\">&lt;<\/span>link rel<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;stylesheet&quot;<\/span> href<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;https:\/\/use.fontawesome.com\/releases\/v5.3.1\/css\/all.css&quot;<\/span> <br \/>\n&nbsp; integrity<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU&quot;<\/span> &nbsp;<br \/>\n&nbsp; crossorigin<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;anonymous&quot;<\/span><span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/04_toolbar_icons-1.gif\" alt=\"Custom toolbar icons\" width=\"656\" height=\"420\" class=\"alignleft size-full wp-image-5576\" \/><br \/>\nCustom Toolbar Icons. <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/samples\/05_customization\/04_toolbar_icons.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Localization allows displaying dhtmlxSpreadsheet in any language of your choice:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/localization.png\" alt=\"Spreadsheet Localization\" width=\"669\" height=\"238\" class=\"alignleft size-full wp-image-5552\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/localization.png 669w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/localization-300x107.png 300w\" sizes=\"auto, (max-width: 669px) 100vw, 669px\" \/><br \/>\n<a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/samples\/01_init\/04_localization.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Besides, you can restrict access to Spreadsheet for end users by means of the read-only mode enabled via the <strong>readonly<\/strong> configuration option. Events will help you to customize this mode and make some parts of Spreadsheet unavailable by blocking the operations of your choice:<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">var<\/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;cont&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <br \/>\nspreadsheet.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;beforeEditStart&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nspreadsheet.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;beforeValueChange&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nspreadsheet.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;beforeStyleChange&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"kw1\">function<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw2\">false<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nspreadsheet.<span class=\"me1\">parse<\/span><span class=\"br0\">&#40;<\/span>data<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<h5>Reorganized API Simplifies Work With Spreadsheet<\/h5>\n<p>Developers&#8217; work with Spreadsheet is simplified due to <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/api\/api_overview\/\" rel=\"noopener\" target=\"_blank\">the reorganized and detailed API<\/a>. Now there are plenty of coherent methods for performing operations in the grid, for example, undo and redo actions, adding and removing columns and rows, locking and unlocking cells etc.<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"co1\">\/\/ locks a cell<\/span><br \/>\nspreadsheet.<span class=\"me1\">lock<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;A1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<br \/>\n<span class=\"co1\">\/\/ locks a range of cells<\/span><br \/>\nspreadsheet.<span class=\"me1\">lock<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;A1:C1&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<br \/>\n<span class=\"co1\">\/\/ locks specified cells<\/span><br \/>\nspreadsheet.<span class=\"me1\">lock<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;A1,B5,B7,D4:D6&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/locked_cells2.png\" alt=\"Spreadsheet cell locking\" width=\"761\" height=\"401\" class=\"alignleft size-full wp-image-5570\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/locked_cells2.png 761w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/locked_cells2-300x158.png 300w\" sizes=\"auto, (max-width: 761px) 100vw, 761px\" \/><br \/>\n<a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/samples\/02_usage\/01_locked_cells.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>Spreadsheet enables extensive styling of cells and cell values. You can define the background color of cells, text decoration and text alignment of values in cells. Besides, you can clear the styles applied to cells, their values or both.<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"co1\">\/\/ setting style for one cell<\/span><br \/>\nspreadsheet.<span class=\"me1\">setStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;A1&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"br0\">&#123;<\/span>background<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;red&quot;<\/span><span class=\"sy0\">,<\/span> border<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;solid 1px yellow&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ setting the same style for a range of cells<\/span><br \/>\nspreadsheet.<span class=\"me1\">setStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;A1:D1&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"br0\">&#123;<\/span>color<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;blue&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ setting the same style for different cells<\/span><br \/>\nspreadsheet.<span class=\"me1\">setStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;B6,A1:D1&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"br0\">&#123;<\/span>color<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;blue&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ setting styles for cells in a range alternately<\/span><br \/>\nspreadsheet.<span class=\"me1\">setStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;A1:D1&quot;<\/span><span class=\"sy0\">,<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#123;<\/span>color<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;blue&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><span class=\"br0\">&#123;<\/span>color<span class=\"sy0\">:<\/span><span class=\"st0\">&quot;red&quot;<\/span><span class=\"br0\">&#125;<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/styling.png\" alt=\"Spreadsheet Styling\" width=\"763\" height=\"401\" class=\"alignleft size-full wp-image-5557\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/styling.png 763w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2018\/10\/styling-300x158.png 300w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><br \/>\n<a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/samples\/01_init\/02_styled_data.html\" rel=\"noopener\" target=\"_blank\">Check the sample ><\/a><\/p>\n<p>The main objective of dhtmlxSpreadsheet is providing a safe and convenient way to process large amounts of data. The safety of all operations is ensured by storing your data on your server. Loading data can be fulfilled from an external file in a JSON or CSV format via the <strong>load<\/strong> method or a local source with the help of the <strong>parse<\/strong> method. The <strong>serialize<\/strong> method makes it possible to save the processed data in the current state and paste it to another spreadsheet.<\/p>\n<div class=\"codecolorer-container javascript default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"co1\">\/\/ saving state of the spreadsheet1<\/span><br \/>\n<span class=\"kw1\">var<\/span> state <span class=\"sy0\">=<\/span> spreadsheet1.<span class=\"me1\">serialize<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ creating a new spreadsheet<\/span><br \/>\n<span class=\"kw1\">var<\/span> spreadsheet2 <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Spreadsheet<\/span><span class=\"br0\">&#40;<\/span>document.<span class=\"me1\">body<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ parsing the state of the spreadsheet1 into spreadsheet2<\/span><br \/>\nspreadsheet2.<span class=\"me1\">parse<\/span><span class=\"br0\">&#40;<\/span>state<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<h5>Angular, React, and Vue.js Supported<\/h5>\n<p>From now on, using our JavaScript Spreadsheet in an app based on any of these three popular frameworks is a piece of cake. You&#8217;re free to choose one of the two simple scenarios for initializing Spreadsheet with Angular, React, or Vue.js. Check our initialization guides:<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/angular_integration\/\" rel=\"noopener\" target=\"_blank\">Spreadsheet with Angular<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/react_integration\/\" rel=\"noopener\" target=\"_blank\">Spreadsheet with React<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/vuejs_integration\/\" rel=\"noopener\" target=\"_blank\">Spreadsheet with Vue.js<\/a><\/li>\n<\/ul>\n<p>Download <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet\/download.shtml\" rel=\"noopener\" target=\"_blank\">JavaScript Spreadsheet v3.0 free trial<\/a> and feel free to leave us your feedback in the comments section or via email.<\/p>\n<p>We invite our current clients to get the latest version in their <a href=\"https:\/\/dhtmlx.com\/clients\/\" rel=\"noopener\" target=\"_blank\">Client&#8217;s Area<\/a> or download it from the newsletter we&#8217;ll send within 24 hours.<\/p>\n<h5>Related Material:<\/h5>\n<ul>\n<li>Full <a href=\"https:\/\/docs.dhtmlx.com\/spreadsheet\/whats_new\/\" rel=\"noopener\" target=\"_blank\">what&#8217;s new list<\/a> in v3.0<\/li>\n<li><a href=\"https:\/\/snippet.dhtmlx.com\/wux2b35b?tag=spreadsheet\" rel=\"noopener\" target=\"_blank\">Samples<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet-for-Angular\/\" rel=\"noopener\" target=\"_blank\">Spreadsheet for Angular<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet-for-React\/\" rel=\"noopener\" target=\"_blank\">Spreadsheet for React<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSpreadsheet-for-Vue\/\" rel=\"noopener\" target=\"_blank\">Spreadsheet for Vue.js<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A series of cutting-edge releases goes on! Here comes dhtmlxSpreadsheet 3.0, entirely renewed and redesigned JavaScript spreadsheet component with a range of major improvements. We&#8217;ve got rid of PHP &#8230;<\/p>\n","protected":false},"author":101012,"featured_media":5550,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70,1,38],"tags":[33,59,56,34,4,55],"class_list":["post-5536","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-releases","category-uncategorized","category-visible","tag-all-posts","tag-angular","tag-react","tag-spreadsheet","tag-dhtmlx-updates","tag-vue-js"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/5536","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\/101012"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=5536"}],"version-history":[{"count":3,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/5536\/revisions"}],"predecessor-version":[{"id":12715,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/5536\/revisions\/12715"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/5550"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=5536"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=5536"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=5536"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}