<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Documentation – User Guide</title>
    <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/</link>
    <description>Recent content in User Guide on Documentation</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    
	  <atom:link href="https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Java: Autofill Options</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/autofill-options/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/autofill-options/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs creates an &lt;code&gt;AutofillOption&lt;/code&gt; popup after a successful autofill drag from the selection corner. The popup contains four actions: &lt;strong&gt;Copy Cell&lt;/strong&gt;, &lt;strong&gt;Fill Series&lt;/strong&gt;, &lt;strong&gt;Fill Formatting Only&lt;/strong&gt;, and &lt;strong&gt;Fill Without Formatting&lt;/strong&gt;. During the first drag release, the sheet runs &lt;code&gt;data.autofill(selector.arange, &#39;all&#39;, ...)&lt;/code&gt;, stores the original target cells in &lt;code&gt;data.autofillCellInfo.history&lt;/code&gt;, and stores the autofill result in &lt;code&gt;data.autofillCellInfo.series&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the source cell or source range in GridJs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Drag the small selection corner to extend the autofill area. The selector code supports extending the target area to the left, top, right, or bottom of the current selection.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Release the mouse. When the sheet is not in read mode and the target range passes the paste validation check, GridJs runs &lt;code&gt;data.autofill(selector.arange, &#39;all&#39;, ...)&lt;/code&gt;, redraws the table, and shows the Autofill Options button next to the filled area.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;autofill-drag.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;
&lt;p&gt;Click the Autofill Options button to open the menu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Copy Cell&lt;/strong&gt; to rewrite each target cell by repeating cells from the source range. The code calculates the source cell with row and column modulo offsets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Fill Series&lt;/strong&gt; to keep the autofill result that was generated during the drag operation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Fill Formatting Only&lt;/strong&gt; to restore each target cell from the saved history and then apply the autofill result style when a style exists in the generated series cell.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Fill Without Formatting&lt;/strong&gt; to keep the generated autofill content and restore the original target style from history. If the original target cell does not have a style, GridJs creates a left-aligned style before writing the cell back.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;autofill-options.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;CellRange&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;./core/cell_range&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;

&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;targetRange&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;CellRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;autofill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;targetRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;all&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Internal option values used by the Autofill Options popup:
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;autofillTypes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;copyCell&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;series&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;withoutFormat&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.autofill(cellRange, what, error)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Validates the target range, runs the autofill copy path, and records &lt;code&gt;history&lt;/code&gt; and &lt;code&gt;series&lt;/code&gt; data for later option changes.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cellRange&lt;/code&gt;: destination &lt;code&gt;CellRange&lt;/code&gt;; &lt;code&gt;what&lt;/code&gt;: paste mode such as &lt;code&gt;&#39;all&#39;&lt;/code&gt;; &lt;code&gt;error&lt;/code&gt;: callback for validation errors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;autofillOption.change(autofillType)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rewrites the autofilled cells according to the selected Autofill Options menu item.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;autofillType&lt;/code&gt;: &lt;code&gt;&#39;copyCell&#39;&lt;/code&gt;, &lt;code&gt;&#39;series&#39;&lt;/code&gt;, &lt;code&gt;&#39;format&#39;&lt;/code&gt;, or &lt;code&gt;&#39;withoutFormat&#39;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;In the inspected UI flow, the sheet always starts autofill with &lt;code&gt;what === &#39;all&#39;&lt;/code&gt;. The option popup then changes the written cells by reading &lt;code&gt;data.autofillCellInfo.history&lt;/code&gt;, &lt;code&gt;data.autofillCellInfo.series&lt;/code&gt;, and &lt;code&gt;data.autofillCellInfo.srcCellRange&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: When does the Autofill Options button appear?
A: The button is shown only after dragging from the selection corner, completing &lt;code&gt;data.autofill(...)&lt;/code&gt; successfully, and rendering the filled range. The code skips this flow when the sheet mode is &lt;code&gt;read&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Which directions can the autofill target area extend?
A: The selector code creates an autofill range only when the drag extends outside the current selection to the left, top, right, or bottom.&lt;/p&gt;
&lt;p&gt;Q: What does &lt;strong&gt;Fill Formatting Only&lt;/strong&gt; change?
A: The handler starts from the saved target cell in &lt;code&gt;history&lt;/code&gt;, then replaces only its &lt;code&gt;style&lt;/code&gt; with the generated series cell style when that style exists.&lt;/p&gt;
&lt;p&gt;Q: What does &lt;strong&gt;Fill Without Formatting&lt;/strong&gt; change?
A: The handler keeps the generated autofill cell content, restores the original target &lt;code&gt;style&lt;/code&gt; from &lt;code&gt;history&lt;/code&gt;, and creates a left-aligned style when the original target cell has no style.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to add switch rename and delete worksheets</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/worksheet-management-add-switch-rename-delete-sheet/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/worksheet-management-add-switch-rename-delete-sheet/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs manages worksheets through the bottom bar. In edit mode, the bottom bar shows an add button, lets you click a tab to switch sheets, lets you double-click a tab to rename it inline, and provides a tab context menu with &lt;strong&gt;Delete Sheet&lt;/strong&gt;. The worksheet actions are blocked when the workbook is protected, and adding a sheet is also blocked for &lt;code&gt;.csv&lt;/code&gt;, &lt;code&gt;.tsv&lt;/code&gt;, and workbooks that already have 50 sheet names in the bottom bar.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open GridJs in edit mode if you want to add, rename, or delete worksheets. In read mode, the bottom bar still supports clicking tabs to switch sheets, but the add button and edit-only tab events are not attached.&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;sheet-add.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Click the add button in the bottom bar to create a worksheet. If no name is supplied by the caller, GridJs generates the first unused name in the &lt;code&gt;Sheet1&lt;/code&gt;, &lt;code&gt;Sheet2&lt;/code&gt;, &lt;code&gt;Sheet3&lt;/code&gt; sequence.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click a worksheet tab to switch to that sheet. GridJs triggers &lt;code&gt;sheet-selected&lt;/code&gt;, switches the sheet page, resets the active sheet data, resets pagination, moves the vertical scrollbar to the top, and reapplies the target sheet zoom level.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the target sheet uses lazy loading and a lazy-loading URL is configured, GridJs loads that sheet first and then switches to it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;sheet-switch.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;
&lt;p&gt;Double-click a worksheet tab to rename it. GridJs replaces the tab text with an inline input and commits the rename when the input loses focus.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use a valid worksheet name when you rename a tab. The code rejects names longer than 31 characters, duplicate worksheet names, and names that contain any of these characters: &lt;code&gt;:&lt;/code&gt;, &lt;code&gt;\&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;[&lt;/code&gt;, &lt;code&gt;]&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;sheet-rename.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;Right-click a worksheet tab and choose &lt;strong&gt;Delete Sheet&lt;/strong&gt; to remove it. The delete action runs only when more than one worksheet tab exists.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;sheet-delete.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;If you delete the active sheet, GridJs activates the first remaining worksheet tab and resets the sheet view to that sheet.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Add a worksheet and make it active.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;summarySheet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addSheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Summary&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#dbeafe&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#1e3a8a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Switch to a worksheet by tab name.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setActiveSheetByName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Summary&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Rename the worksheet at index 0.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;renameSheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Input&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Delete the current sheet.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;deleteSheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// The implementation also accepts a sheet name.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;deleteSheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Summary&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;addSheet(name, active = true, tabcolor, fontcolor)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates a new &lt;code&gt;DataProxy&lt;/code&gt;, adds a new bottom-bar tab, and sends an &lt;code&gt;op: &#39;add&#39;&lt;/code&gt; request when the workbook is not in the initial loading path.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;name&lt;/code&gt;: worksheet name or &lt;code&gt;null&lt;/code&gt;; &lt;code&gt;active&lt;/code&gt;: whether the new tab is active; &lt;code&gt;tabcolor&lt;/code&gt;: tab background color; &lt;code&gt;fontcolor&lt;/code&gt;: tab text color&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DataProxy&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setActiveSheetByName(sheetname)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Finds the matching bottom-bar tab and switches to it through the same tab-click flow used by the UI.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sheetname&lt;/code&gt;: worksheet name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Spreadsheet&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;renameSheet(index, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Replaces the worksheet name in &lt;code&gt;datas[index]&lt;/code&gt; and sends an &lt;code&gt;op: &#39;rename&#39;&lt;/code&gt; request.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;index&lt;/code&gt;: worksheet index; &lt;code&gt;value&lt;/code&gt;: new worksheet name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deleteSheet(sheetname)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Removes a worksheet tab, sends an &lt;code&gt;op: &#39;del&#39;&lt;/code&gt; request for the removed sheet, and resets the active sheet when needed.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sheetname&lt;/code&gt;: optional worksheet name; when omitted, the current tab context target is used&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The inspected &lt;code&gt;index.d.ts&lt;/code&gt; file declares &lt;code&gt;deleteSheet(): void&lt;/code&gt;. The &lt;code&gt;index.js&lt;/code&gt; implementation also includes &lt;code&gt;addSheet(...)&lt;/code&gt;, &lt;code&gt;setActiveSheetByName(...)&lt;/code&gt;, &lt;code&gt;renameSheet(index, value)&lt;/code&gt;, and an optional &lt;code&gt;sheetname&lt;/code&gt; parameter for &lt;code&gt;deleteSheet(sheetname)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Can I add, rename, or delete worksheets when the workbook is protected?
A: No. The add, rename, and delete handlers check &lt;code&gt;wprotected&lt;/code&gt; and stop with an error toast when workbook protection is active.&lt;/p&gt;
&lt;p&gt;Q: Can I add worksheets to a CSV or TSV file?
A: No. The add-button handler stops immediately and shows a warning when &lt;code&gt;uniqueid&lt;/code&gt; ends with &lt;code&gt;.csv&lt;/code&gt; or &lt;code&gt;.tsv&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: What name validation does GridJs apply when I rename a worksheet tab?
A: The rename code rejects names longer than 31 characters, duplicate names, and names that contain &lt;code&gt;:&lt;/code&gt;, &lt;code&gt;\&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;[&lt;/code&gt;, or &lt;code&gt;]&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: What happens when I delete the active worksheet tab?
A: If more than one tab exists, GridJs removes the tab, selects the first remaining tab, and resets the sheet data to that remaining worksheet.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to batch insert Rows and Columns</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-batch-insert-rows-columns/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-batch-insert-rows-columns/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs supports two batch insertion paths. The first path is context-menu batch input for rows/columns (&lt;strong&gt;Insert rows above/below&lt;/strong&gt;, &lt;strong&gt;Insert columns left/right&lt;/strong&gt;). The second path is the bottom &lt;strong&gt;Row Appender&lt;/strong&gt; toolbar for batch appending rows. Both paths use the same row insertion pipeline (&lt;code&gt;sheet.insertRows(...)&lt;/code&gt;) and update sheet layout/rendering.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;p&gt;Method 1: Context menu batch insert (rows and columns).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select a range, a row header, or a column header.&lt;/li&gt;
&lt;li&gt;Right-click and open &lt;strong&gt;Insert&amp;hellip;&lt;/strong&gt; in the context menu.&lt;/li&gt;
&lt;li&gt;Choose one action:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Insert rows above&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insert rows below&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insert columns to left&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insert columns to right&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Enter the count in the number box and click &lt;strong&gt;Insert&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;The input is configured with &lt;code&gt;min=1&lt;/code&gt; and &lt;code&gt;max=300&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The insert submenu pre-fills the number input with &lt;code&gt;10&lt;/code&gt; when opened.
&lt;img src=&#34;batch-insert-open-menu.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Method 2: Row Appender batch insert (rows only).
In edit mode, scroll near the bottom until the Row Appender appears, enter row count, then click &lt;strong&gt;Add&lt;/strong&gt;.
&lt;img src=&#34;row-appender-add.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Insert 5 rows starting at row index 3.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;insertRows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Insert 4 columns starting at column index 2.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;insertColumns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Row Appender equivalent: append rows to the end.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;insertRows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Optional: listen to insert events.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rows-inserted&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rows inserted:&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;columns-inserted&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;columns inserted:&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Optional: enable/disable bottom Row Appender toolbar.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xsWithAppender&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid-2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;showRowAppenderToolbar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.insertRows(start, n, raiseServerOpr = true)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Batch inserts rows at the given start row index.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;start&lt;/code&gt; (row index), &lt;code&gt;n&lt;/code&gt; (count), &lt;code&gt;raiseServerOpr&lt;/code&gt; (optional boolean)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.insertColumns(start, n, raiseServerOpr = true)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Batch inserts columns at the given start column index.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;start&lt;/code&gt; (column index), &lt;code&gt;n&lt;/code&gt; (count), &lt;code&gt;raiseServerOpr&lt;/code&gt; (optional boolean)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;data.insert(&#39;row&#39; | &#39;column&#39;, n, raiseServerOpr)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Internal insert operation used by sheet insert flow; updates data structures and triggers insert events.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;, &lt;code&gt;n&lt;/code&gt;, &lt;code&gt;raiseServerOpr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;showRowAppenderToolbar&lt;/code&gt; (option)&lt;/td&gt;
&lt;td&gt;Controls whether the bottom Row Appender toolbar is created (default enabled).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;true&lt;/code&gt; / &lt;code&gt;false&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.on(eventName, handler)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Binds event handler; insert flow triggers &lt;code&gt;rows-inserted&lt;/code&gt; and &lt;code&gt;columns-inserted&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;eventName&lt;/code&gt;, &lt;code&gt;handler&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Context menu mapping for batch insert:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;insert-rows-above&lt;/code&gt; -&amp;gt; &lt;code&gt;sheet.insertRows(sri, n)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;insert-rows-below&lt;/code&gt; -&amp;gt; &lt;code&gt;sheet.insertRows(eri + 1, n)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;insert-columns-left&lt;/code&gt; -&amp;gt; &lt;code&gt;sheet.insertColumns(sci, n)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;insert-columns-right&lt;/code&gt; -&amp;gt; &lt;code&gt;sheet.insertColumns(eci + 1, n)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why do I only see row-related or column-related insert options in some cases?
A: Context menu mode switches by selection type. In row/column header mode, submenu items are filtered to matching row or column operations.&lt;/p&gt;
&lt;p&gt;Q: Why does batch insert do nothing on a protected sheet?
A: Insert is blocked when the sheet is locked.&lt;/p&gt;
&lt;p&gt;Q: Why is Row Appender not visible?
A: It is hidden in read mode, when &lt;code&gt;showRowAppenderToolbar&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;, or for chart-type sheets.&lt;/p&gt;
&lt;p&gt;Q: Can I use batch insert in read mode?
A: No. In read mode, the context menu is reduced to copy-only behavior.&lt;/p&gt;
&lt;p&gt;Q: Where is the insertion anchor for above/below/left/right?
A: It uses the current selected range: &lt;code&gt;sri&lt;/code&gt;/&lt;code&gt;eri&lt;/code&gt; for rows and &lt;code&gt;sci&lt;/code&gt;/&lt;code&gt;eci&lt;/code&gt; for columns, with below/right using &lt;code&gt;+1&lt;/code&gt; as insertion start.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to Download</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/download-export-from-file-menu/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/download-export-from-file-menu/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs adds file export entries to the File menu through the &lt;code&gt;Download&lt;/code&gt; menu item class. The File menu contains &lt;strong&gt;Download Original&lt;/strong&gt;, &lt;strong&gt;Download As XLSX&lt;/strong&gt;, &lt;strong&gt;Download As PDF&lt;/strong&gt;, and &lt;strong&gt;Download As HTML&lt;/strong&gt;. When the locale is not &lt;code&gt;ru&lt;/code&gt; and not &lt;code&gt;zh&lt;/code&gt;, the same File menu also adds &lt;strong&gt;Save To Google Drive&lt;/strong&gt; and &lt;strong&gt;Save To Dropbox&lt;/strong&gt; entries.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open GridJs and use the &lt;strong&gt;File&lt;/strong&gt; menu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Download Original&lt;/strong&gt; to route the menu action as &lt;code&gt;download_Original&lt;/code&gt; and call the download flow with save type &lt;code&gt;Original&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Download As XLSX&lt;/strong&gt;, &lt;strong&gt;Download As PDF&lt;/strong&gt;, or &lt;strong&gt;Download As HTML&lt;/strong&gt; to route the menu action as &lt;code&gt;download_XLSX&lt;/code&gt;, &lt;code&gt;download_PDF&lt;/code&gt;, or &lt;code&gt;download_HTML&lt;/code&gt;. GridJs changes the exported file name suffix to &lt;code&gt;.xlsx&lt;/code&gt;, &lt;code&gt;.pdf&lt;/code&gt;, or &lt;code&gt;.html&lt;/code&gt; before starting the download flow.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;file-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;If the current locale is neither &lt;code&gt;ru&lt;/code&gt; nor &lt;code&gt;zh&lt;/code&gt;, use &lt;strong&gt;Save To Google Drive&lt;/strong&gt; or &lt;strong&gt;Save To Dropbox&lt;/strong&gt;. Both entries export the original file type and pass the device value as &lt;code&gt;GoogleDrive&lt;/code&gt; or &lt;code&gt;Dropbox&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;file-menu-cloud.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;
&lt;p&gt;If &lt;code&gt;beforeSaveFunc&lt;/code&gt; is configured, GridJs calls it before starting the export. If it returns a false value, the export stops.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If &lt;code&gt;fileDownloadCallFunc&lt;/code&gt; is configured, GridJs calls that function with the target file name, export type, and device value. If no custom callback is configured, GridJs sends a &lt;code&gt;POST&lt;/code&gt; request to &lt;code&gt;fileDownloadUrl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When the &lt;code&gt;POST&lt;/code&gt; response is JSON or text, GridJs treats the response as a file URL and downloads that URL as a blob. For other response content types, GridJs downloads the response blob directly.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The File menu has a generic &lt;code&gt;download&lt;/code&gt; handler that opens &lt;code&gt;ModalDownload&lt;/code&gt;, but the &lt;code&gt;new Download()&lt;/code&gt; entry without a suffix is commented out in the inspected File menu code. The active File menu entries use the direct typed handlers listed above.&lt;/p&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;Configure the built-in download request URL with &lt;code&gt;setFileDownloadInfo(url)&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setFileDownloadInfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/GridJs2/Download&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use &lt;code&gt;setFileDownloadCallFunction(fileDownloadCallFunc)&lt;/code&gt; when you want to handle the export action yourself instead of using the built-in &lt;code&gt;POST&lt;/code&gt; request.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setFileDownloadCallFunction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toFileName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;c1&#34;&gt;// toFileName is the final file name selected by GridJs.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// type is one of: &amp;#39;Original&amp;#39;, &amp;#39;XLSX&amp;#39;, &amp;#39;PDF&amp;#39;, or &amp;#39;HTML&amp;#39;.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// device is &amp;#39;Device&amp;#39;, &amp;#39;GoogleDrive&amp;#39;, or &amp;#39;Dropbox&amp;#39;.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use &lt;code&gt;setBeforeSaveFunction(beforeSaveFunc)&lt;/code&gt; to run a guard before export starts.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setBeforeSaveFunction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function / Location&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Download(suffix)&lt;/code&gt; (&lt;code&gt;component/toolbar/download.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Builds a download menu item tag as &lt;code&gt;download_&amp;lt;suffix&amp;gt;&lt;/code&gt; and uses the download icon, or the save-to-cloud icon for &lt;code&gt;GOOGLE&lt;/code&gt; and &lt;code&gt;DROPBOX&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;suffix&lt;/code&gt;: export suffix such as &lt;code&gt;Original&lt;/code&gt;, &lt;code&gt;XLSX&lt;/code&gt;, &lt;code&gt;PDF&lt;/code&gt;, &lt;code&gt;HTML&lt;/code&gt;, &lt;code&gt;GOOGLE&lt;/code&gt;, or &lt;code&gt;DROPBOX&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Download&lt;/code&gt; instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Menubar(data, widthFn, isHide, showPartToolbar, local)&lt;/code&gt; (&lt;code&gt;component/menubar.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;Download(&amp;quot;Original&amp;quot;)&lt;/code&gt;, &lt;code&gt;Download(&amp;quot;XLSX&amp;quot;)&lt;/code&gt;, &lt;code&gt;Download(&amp;quot;PDF&amp;quot;)&lt;/code&gt;, and &lt;code&gt;Download(&amp;quot;HTML&amp;quot;)&lt;/code&gt; to the File menu, and conditionally adds cloud entries when &lt;code&gt;local !== &#39;ru&#39; &amp;amp;&amp;amp; local !== &#39;zh&#39;&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;data&lt;/code&gt;, &lt;code&gt;widthFn&lt;/code&gt;, &lt;code&gt;isHide&lt;/code&gt;, &lt;code&gt;showPartToolbar&lt;/code&gt;, &lt;code&gt;local&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Menubar&lt;/code&gt; instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;toolbarChange(type, value)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Dispatches &lt;code&gt;download_Original&lt;/code&gt;, &lt;code&gt;download_XLSX&lt;/code&gt;, &lt;code&gt;download_PDF&lt;/code&gt;, &lt;code&gt;download_HTML&lt;/code&gt;, &lt;code&gt;download_GOOGLE&lt;/code&gt;, and &lt;code&gt;download_DROPBOX&lt;/code&gt; to &lt;code&gt;fileDownloadByType&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;: menu tag; &lt;code&gt;value&lt;/code&gt;: optional value&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fileDownloadByType(type, device = &#39;Device&#39;)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Runs &lt;code&gt;beforeSaveFunc&lt;/code&gt;, builds the target file name, and either calls &lt;code&gt;downloadFile&lt;/code&gt; or &lt;code&gt;fileDownloadCallFunc&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;: save type; &lt;code&gt;device&lt;/code&gt;: destination string&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;downloadFile(toFileName, saveType)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Posts sheet state and requested output type to &lt;code&gt;fileDownloadUrl&lt;/code&gt;, then downloads the returned file URL or response blob.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;toFileName&lt;/code&gt;: target file name; &lt;code&gt;saveType&lt;/code&gt;: output type&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fileLinkToStreamDownload(url, fileName, authToken)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Downloads a returned file URL with &lt;code&gt;XMLHttpRequest&lt;/code&gt; and forwards the blob to &lt;code&gt;downloadExportFile&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;, &lt;code&gt;fileName&lt;/code&gt;, &lt;code&gt;authToken&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;downloadExportFile(blob, tagFileName)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Creates an anchor element, sets &lt;code&gt;href&lt;/code&gt; and &lt;code&gt;download&lt;/code&gt;, clicks it, and revokes the object URL for non-string blobs.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;blob&lt;/code&gt;: Blob or string URL; &lt;code&gt;tagFileName&lt;/code&gt;: download name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setFileDownloadInfo(url)&lt;/code&gt; (&lt;code&gt;index.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Stores the built-in download request URL on &lt;code&gt;this.sheet.fileDownloadUrl&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;: download endpoint URL&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setFileDownloadCallFunction(fileDownloadCallFunc)&lt;/code&gt; (&lt;code&gt;index.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Stores a custom export callback on &lt;code&gt;this.sheet.fileDownloadCallFunc&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;fileDownloadCallFunc&lt;/code&gt;: function called with &lt;code&gt;(toFileName, type, device)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setBeforeSaveFunction(beforeSaveFunc)&lt;/code&gt; (&lt;code&gt;index.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Stores a guard callback on &lt;code&gt;this.sheet.beforeSaveFunc&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;beforeSaveFunc&lt;/code&gt;: function returning a truthy value to continue&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The inspected &lt;code&gt;index.d.ts&lt;/code&gt; file does not declare &lt;code&gt;setFileDownloadInfo&lt;/code&gt;, &lt;code&gt;setFileDownloadCallFunction&lt;/code&gt;, or &lt;code&gt;setBeforeSaveFunction&lt;/code&gt;, but the &lt;code&gt;index.js&lt;/code&gt; implementation exposes these methods directly.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Which export entries are active in the File menu?
A: The inspected File menu code adds Download Original, Download As XLSX, Download As PDF, and Download As HTML.&lt;/p&gt;
&lt;p&gt;Q: When are Google Drive and Dropbox entries shown?
A: They are added when the &lt;code&gt;local&lt;/code&gt; value is not &lt;code&gt;ru&lt;/code&gt; and not &lt;code&gt;zh&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: How does GridJs choose the exported file extension?
A: For non-Original export types, GridJs replaces the current file name suffix with the lowercase export type, such as &lt;code&gt;.xlsx&lt;/code&gt;, &lt;code&gt;.pdf&lt;/code&gt;, or &lt;code&gt;.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Can application code intercept the File menu export?
A: Yes. If &lt;code&gt;fileDownloadCallFunc&lt;/code&gt; is configured, GridJs calls it instead of the built-in &lt;code&gt;downloadFile&lt;/code&gt; request.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to hide and unhide rows and columns in GridJS</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-hide-and-unhide-rows-columns/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-hide-and-unhide-rows-columns/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJS exposes &lt;code&gt;Hide&lt;/code&gt; and &lt;code&gt;Unhide&lt;/code&gt; in the context menu, using the row/column context mode rather than the normal cell-range menu.
When you select row headers or column headers, the context menu switches to whole-row or whole-column mode, and the &lt;code&gt;Hide&lt;/code&gt; / &lt;code&gt;Unhide&lt;/code&gt; commands operate on that selected range.
GridJS also wires an unhide callback to the row and column resizers, so the header area can show a dedicated unhide hover target near hidden lines.
In read mode, the context menu is reduced to &lt;code&gt;Copy&lt;/code&gt;, so the UI hide/unhide commands are not available there.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select entire rows or entire columns.
Use the row headers on the left or the column headers at the top so GridJS enters row/column context mode.
&lt;img src=&#34;hide-unhide-select-headers.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hide the selected rows or columns.
Right-click the selected headers and choose &lt;code&gt;Hide&lt;/code&gt;.
In the current implementation, &lt;code&gt;Hide&lt;/code&gt; works only when the selection covers whole rows or whole columns.
&lt;img src=&#34;hide-unhide-context-menu-hide.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unhide from the context menu.
Select the row-header range or column-header range where you want hidden items to be restored, right-click, and choose &lt;code&gt;Unhide&lt;/code&gt;.
&lt;img src=&#34;hide-unhide-context-menu-unhide.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review the updated sheet.
After hide or unhide runs, GridJS resets the sheet view. Row and column image positions are also updated together with the hide state.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;Based on the current source code, the sheet instance exposes direct methods for hiding and unhiding row and column ranges.
These methods call the shared hide/unhide workflow internally, so you do not need an extra &lt;code&gt;table.render()&lt;/code&gt; call in this flow.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Hide rows 3 through 5.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hideRows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Hide columns 2 through 4.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hideColumns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Unhide the same rows.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;unhideRows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Unhide the same columns.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;unhideColumns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.hideRows(sri, eri)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hides the row range by routing to the shared hide/unhide handler with &lt;code&gt;type = &#39;row&#39;&lt;/code&gt; and &lt;code&gt;isunhiden = false&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sri:number&lt;/code&gt;, &lt;code&gt;eri:number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.unhideRows(sri, eri)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unhides the row range through the same shared handler.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sri:number&lt;/code&gt;, &lt;code&gt;eri:number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.hideColumns(sci, eci)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Hides the column range by routing to the shared hide/unhide handler with &lt;code&gt;type = &#39;col&#39;&lt;/code&gt; and &lt;code&gt;isunhiden = false&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sci:number&lt;/code&gt;, &lt;code&gt;eci:number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.unhideColumns(sci, eci)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unhides the column range through the same shared handler.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sci:number&lt;/code&gt;, &lt;code&gt;eci:number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Can I hide a normal cell range from the context menu?
A: No. The current context-menu hide flow checks for whole-row or whole-column selection.&lt;/p&gt;
&lt;p&gt;Q: Where do the &lt;code&gt;Hide&lt;/code&gt; and &lt;code&gt;Unhide&lt;/code&gt; menu items come from?
A: They are defined in the GridJS context menu as &lt;code&gt;contextmenu.hide&lt;/code&gt; and &lt;code&gt;contextmenu.unhide&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Why can I not see &lt;code&gt;Hide&lt;/code&gt; or &lt;code&gt;Unhide&lt;/code&gt; in read mode?
A: In read mode, the context menu is reduced to a single &lt;code&gt;Copy&lt;/code&gt; item.&lt;/p&gt;
&lt;p&gt;Q: Is there a JavaScript API for this feature?
A: Yes. The current sheet instance exposes &lt;code&gt;hideRows&lt;/code&gt;, &lt;code&gt;unhideRows&lt;/code&gt;, &lt;code&gt;hideColumns&lt;/code&gt;, and &lt;code&gt;unhideColumns&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to input Formula</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-input-formula/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-input-formula/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs supports formula input in both the cell editor and the formula bar. When input starts with &lt;code&gt;=&lt;/code&gt;, formula suggestion and formula tip UI are used during editing. You can also insert a function template from the &lt;strong&gt;Functions&lt;/strong&gt; toolbar dropdown, which writes a formula skeleton into the selected cell.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Select a target cell.&lt;/li&gt;
&lt;li&gt;Type a formula that starts with &lt;code&gt;=&lt;/code&gt; in the cell editor or in the formula bar (for example, &lt;code&gt;=SUM(A1:A3)&lt;/code&gt;).
&lt;img src=&#34;input-formula-editor.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;While typing after &lt;code&gt;=&lt;/code&gt;, formula suggestions are shown; choose a function to insert it quickly.
&lt;img src=&#34;input-formula-suggest.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;To insert a function template directly, click &lt;strong&gt;Functions&lt;/strong&gt; on the toolbar and pick a function. The selected cell receives &lt;code&gt;=FUNCTION()&lt;/code&gt;.
&lt;img src=&#34;input-formula-functions-dropdown.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Press &lt;strong&gt;Enter&lt;/strong&gt; in the formula bar to commit and move selection down. Use &lt;strong&gt;Shift+Enter&lt;/strong&gt; to move up, &lt;strong&gt;Tab&lt;/strong&gt; to move right, and &lt;strong&gt;Shift+Tab&lt;/strong&gt; to move left.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Set a formula text directly (ri/ci are zero-based indexes).
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cellText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;=SUM(A1:A3)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reRender&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Insert a formula template into the current selected cell.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setSelectedCellAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;formula&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;SUM&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reRender&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.cellText(ri, ci, text, sheetIndex)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets cell text on a sheet. A formula can be passed as text beginning with &lt;code&gt;=&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ri&lt;/code&gt; (number), &lt;code&gt;ci&lt;/code&gt; (number), &lt;code&gt;text&lt;/code&gt; (string), &lt;code&gt;sheetIndex&lt;/code&gt; (number, optional)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.reRender()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the sheet after data changes so formula input results are visible.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setSelectedCellAttr(&#39;formula&#39;, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Writes a formula template to the current selection. For a single cell it becomes &lt;code&gt;=value()&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;value&lt;/code&gt; (function key, such as &lt;code&gt;SUM&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;xs.cellText(...)&lt;/code&gt; writes formula text through the same cell-text pipeline used by editing.
&lt;code&gt;setSelectedCellAttr(&#39;formula&#39;, ...)&lt;/code&gt; is the function-template path used by the toolbar Functions dropdown.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why can I not input formulas in some sheets?
A: Input is blocked in read mode and also blocked when the sheet is locked.&lt;/p&gt;
&lt;p&gt;Q: When does formula suggestion appear?
A: Suggestion appears when input starts with &lt;code&gt;=&lt;/code&gt; and formula text is being edited.&lt;/p&gt;
&lt;p&gt;Q: What happens when I pick a function from the Functions dropdown?
A: For a single selected cell, GridJs inserts a formula skeleton like &lt;code&gt;=SUM()&lt;/code&gt; and places the editor cursor inside &lt;code&gt;()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Why does the formula bar show formula text instead of displayed value?
A: If the selected cell has a formula field (&lt;code&gt;f&lt;/code&gt;), the formula bar shows &lt;code&gt;f&lt;/code&gt; first.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to paste values only and paste format only</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/paste-special-paste-values-paste-formats/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/paste-special-paste-values-paste-formats/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs adds a &lt;strong&gt;Paste Special&lt;/strong&gt; submenu to the context menu. That submenu contains &lt;strong&gt;Paste values only&lt;/strong&gt; and &lt;strong&gt;Paste format only&lt;/strong&gt;, and the sheet component routes them to &lt;code&gt;paste(&#39;text&#39;)&lt;/code&gt; and &lt;code&gt;paste(&#39;format&#39;)&lt;/code&gt;. Both actions stop immediately when the sheet is in read mode or the current sheet is locked.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the source cell or range in GridJs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Copy or cut the selection inside GridJs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the target cell or range.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Right-click the selection and open &lt;strong&gt;Paste Special&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Paste values only&lt;/strong&gt; when you want the handler to use the &lt;code&gt;text&lt;/code&gt; paste branch.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Paste format only&lt;/strong&gt; when you want the handler to use the &lt;code&gt;format&lt;/code&gt; paste branch.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;paste-special-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;If the current sheet is read-only or locked, GridJs does not run the paste action.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Paste only the internal GridJs clipboard text branch.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;valuesPasted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pasteFromInternal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;text&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Paste only the internal GridJs clipboard format branch.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;formatsPasted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pasteFromInternal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Paste plain text into the current selection.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pasteFromText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A\tB\r\n1\t2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Paste styled HTML cells into the current selection.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pasteFromHTML&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;htmlString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.pasteFromInternal(what, error)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pastes from the internal GridJs copy/cut clipboard.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;what&lt;/code&gt;: &lt;code&gt;&#39;all&#39;&lt;/code&gt;, &lt;code&gt;&#39;text&#39;&lt;/code&gt;, or &lt;code&gt;&#39;format&#39;&lt;/code&gt;; &lt;code&gt;error&lt;/code&gt;: callback for paste errors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Promise&amp;lt;boolean&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.pasteFromText(txt, error)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Splits plain text by &lt;code&gt;\r\n&lt;/code&gt; and &lt;code&gt;\t&lt;/code&gt;, expands the target range, and writes text cells.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;txt&lt;/code&gt;: plain text; &lt;code&gt;error&lt;/code&gt;: callback for paste errors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.pasteFromHTML(html, error)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Parses styled cells from HTML and applies them to the current selection.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;html&lt;/code&gt;: HTML string; &lt;code&gt;error&lt;/code&gt;: callback for paste errors&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For internal copy and paste, the row model uses &lt;code&gt;what === &#39;text&#39;&lt;/code&gt; to write destination &lt;code&gt;text&lt;/code&gt; only, and &lt;code&gt;what === &#39;format&#39;&lt;/code&gt; to write destination &lt;code&gt;style&lt;/code&gt; and copied merge metadata.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: What does &lt;strong&gt;Paste values only&lt;/strong&gt; do in this code?
A: The context menu action calls &lt;code&gt;paste(&#39;text&#39;)&lt;/code&gt;, and the row model&amp;rsquo;s &lt;code&gt;text&lt;/code&gt; branch writes only the destination cell text.&lt;/p&gt;
&lt;p&gt;Q: What does &lt;strong&gt;Paste format only&lt;/strong&gt; do in this code?
A: The context menu action calls &lt;code&gt;paste(&#39;format&#39;)&lt;/code&gt;, and the row model&amp;rsquo;s &lt;code&gt;format&lt;/code&gt; branch writes the destination cell style. When the copied cell includes merge metadata, that merge metadata is copied in the same branch.&lt;/p&gt;
&lt;p&gt;Q: Does the &lt;strong&gt;Paste Special&lt;/strong&gt; menu have a separate external clipboard fallback for formats?
A: No separate external format-only fallback was found in the menu handler. When internal copy/cut is unavailable, the code reads the browser clipboard and handles &lt;code&gt;text/plain&lt;/code&gt; through &lt;code&gt;pasteFromText&lt;/code&gt;, or &lt;code&gt;image/png&lt;/code&gt; through image upload.&lt;/p&gt;
&lt;p&gt;Q: What happens when the target intersects merged cells?
A: Paste is allowed only when the target is exactly one complete merged area and the source is a single cell, or when the merged target size is an integer multiple of the source range. For a multi-cell source pasted into one complete merged area, the code unmerges the target area before applying the paste.&lt;/p&gt;
&lt;p&gt;Q: Do &lt;code&gt;Ctrl+Shift+V&lt;/code&gt; and &lt;code&gt;Ctrl+Alt+V&lt;/code&gt; have dedicated keyboard handling?
A: The submenu items display those labels, but in the inspected &lt;code&gt;sheet.js&lt;/code&gt; code only &lt;code&gt;Ctrl+V&lt;/code&gt; has a dedicated keyboard branch. No separate key handling branch was found for the two Paste Special combinations.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to Protect a Sheet and Workbook</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-protect-sheet-and-workbook/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-protect-sheet-and-workbook/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs provides a Protect menu with separate actions for &lt;strong&gt;Protect Sheet&lt;/strong&gt; and &lt;strong&gt;Protect Workbook&lt;/strong&gt;. Protect Sheet opens a password dialog that can also collect worksheet permission options such as selecting locked cells, sorting, or using AutoFilter. Protect Workbook applies workbook-structure protection, and the code blocks sheet add, delete, and rename actions while workbook protection is active.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the &lt;strong&gt;Protect&lt;/strong&gt; menu in the toolbar, then choose &lt;strong&gt;Protect Sheet&lt;/strong&gt; or &lt;strong&gt;Protect Workbook&lt;/strong&gt;.
&lt;img src=&#34;protect-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To protect a sheet, enter a password in the &lt;strong&gt;Protect Sheet&lt;/strong&gt; dialog. Leave &lt;strong&gt;Protect worksheet and contents of locked cells&lt;/strong&gt; checked if you want locked cells to stay protected, then choose any allowed actions such as &lt;strong&gt;Select locked cells&lt;/strong&gt;, &lt;strong&gt;Select unlocked cells&lt;/strong&gt;, &lt;strong&gt;Format cells&lt;/strong&gt;, &lt;strong&gt;Insert rows&lt;/strong&gt;, &lt;strong&gt;Sort&lt;/strong&gt;, or &lt;strong&gt;Use AutoFilter&lt;/strong&gt;.
&lt;img src=&#34;protect-sheet-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reenter the same password in the confirmation dialog. If the two passwords do not match, GridJs shows an error and asks again.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To protect the workbook structure, choose &lt;strong&gt;Protect Workbook&lt;/strong&gt;, enter a password, and confirm it. This dialog only asks for the password and confirmation.
&lt;img src=&#34;protect-workbook-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To remove protection, open the same Protect menu item again. GridJs asks for the password to unprotect the sheet or workbook, and it shows an &lt;strong&gt;Incorrect password&lt;/strong&gt; error if the password is wrong.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After protection is applied, workbook protection blocks sheet structure changes such as adding, deleting, or renaming worksheets, and sheet protection blocks changes to locked cells or other protected areas.
&lt;img src=&#34;protected-workbook-error.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Protect the current sheet and allow a few actions.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;protectSheetOpr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;secret&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;canselectlocked&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;canselectunlocked&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;allowSort&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;allowFilter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;allowFormatCell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;allowInsertRow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Remove sheet protection.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;unprotectSheetOpr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;secret&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Protect workbook structure.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;protectWorkbookOpr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;secret&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Remove workbook structure protection.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;unprotectWorkbookOpr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;secret&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.protectSheetOpr(password, protection)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sends a &lt;code&gt;protectsheet&lt;/code&gt; operation for the current sheet and can include worksheet permission flags.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;password&lt;/code&gt; (string), &lt;code&gt;protection&lt;/code&gt; (object, optional)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.unprotectSheetOpr(password)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sends an &lt;code&gt;unprotectsheet&lt;/code&gt; operation for the current sheet.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;password&lt;/code&gt; (string, optional)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.protectWorkbookOpr(password)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sends a &lt;code&gt;protectworkbook&lt;/code&gt; operation for workbook structure protection.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;password&lt;/code&gt; (string)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.unprotectWorkbookOpr(password)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sends an &lt;code&gt;unprotectworkbook&lt;/code&gt; operation for workbook structure protection.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;password&lt;/code&gt; (string, optional)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The &lt;code&gt;protection&lt;/code&gt; object used by &lt;code&gt;protectSheetOpr&lt;/code&gt; can include keys exposed in the dialog, including &lt;code&gt;canselectlocked&lt;/code&gt;, &lt;code&gt;canselectunlocked&lt;/code&gt;, &lt;code&gt;allowFormatCell&lt;/code&gt;, &lt;code&gt;allowFormatCol&lt;/code&gt;, &lt;code&gt;allowFormatRow&lt;/code&gt;, &lt;code&gt;allowInsertCol&lt;/code&gt;, &lt;code&gt;allowInsertRow&lt;/code&gt;, &lt;code&gt;allowInsertLink&lt;/code&gt;, &lt;code&gt;allowDeleteCol&lt;/code&gt;, &lt;code&gt;allowDeleteRow&lt;/code&gt;, &lt;code&gt;allowEditObject&lt;/code&gt;, &lt;code&gt;allowEditScenario&lt;/code&gt;, &lt;code&gt;allowSort&lt;/code&gt;, &lt;code&gt;allowFilter&lt;/code&gt;, and &lt;code&gt;allowUsePivot&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: What is the difference between Protect Sheet and Protect Workbook?
A: Protect Sheet applies password-based protection to the current worksheet and can include per-action permissions. Protect Workbook applies workbook structure protection and blocks sheet add, delete, and rename actions.&lt;/p&gt;
&lt;p&gt;Q: What happens if I enter the wrong password when unprotecting?
A: GridJs shows an &lt;strong&gt;Incorrect password&lt;/strong&gt; error and prompts again for the password.&lt;/p&gt;
&lt;p&gt;Q: Which actions can stay available on a protected sheet?
A: The sheet protection dialog exposes options including selecting locked or unlocked cells, formatting cells, columns, or rows, inserting rows, columns, or hyperlinks, deleting rows or columns, editing objects or scenarios, sorting, using AutoFilter, and using PivotTable or PivotChart.&lt;/p&gt;
&lt;p&gt;Q: What happens to locked cells after sheet protection is turned on?
A: Changes to locked cells are blocked, and the code checks the sheet protection state together with each cell&amp;rsquo;s locked or unlocked style.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to Send By Email</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/send-by-email/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/send-by-email/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs adds &lt;strong&gt;Send By Email&lt;/strong&gt; to the File menu through the &lt;code&gt;Email&lt;/code&gt; menu item. Selecting this item opens an email modal with a &lt;strong&gt;Receiver&lt;/strong&gt; input and a &lt;strong&gt;File Type&lt;/strong&gt; selector. The modal passes the receiver value and selected file type to &lt;code&gt;setEmailSendCallFunction&lt;/code&gt; when the user clicks &lt;strong&gt;OK&lt;/strong&gt; and a callback has been configured.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open GridJs and use the &lt;strong&gt;File&lt;/strong&gt; menu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select &lt;strong&gt;Send By Email&lt;/strong&gt;. GridJs routes the menu item tag &lt;code&gt;email&lt;/code&gt; through the menu change handler and opens the email modal.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;file-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;
&lt;p&gt;Enter a receiver address in the &lt;strong&gt;Receiver&lt;/strong&gt; field. The field placeholder is &lt;code&gt;example@mail.com&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose one file type from the &lt;strong&gt;File Type&lt;/strong&gt; selector. The code defines three values: &lt;code&gt;xlsx&lt;/code&gt;, &lt;code&gt;pdf&lt;/code&gt;, and &lt;code&gt;html&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;OK&lt;/strong&gt;. If the receiver input has been marked with a red border by the input handler, the modal shakes the receiver field and does not call the send callback.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When the receiver input is not marked red and &lt;code&gt;emailSendCallFunc&lt;/code&gt; has been configured, GridJs calls the send callback with an object containing &lt;code&gt;receiver&lt;/code&gt; and &lt;code&gt;type&lt;/code&gt;, shows a &lt;strong&gt;Sending Email&lt;/strong&gt; mask, and then shows a success toast with the returned message. If the callback throws, GridJs shows an error toast and closes the mask.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Cancel&lt;/strong&gt; to close the modal without calling the send callback.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;email-modal.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;Use &lt;code&gt;setEmailSendCallFunction(emailSendCallFunc)&lt;/code&gt; on the top-level spreadsheet instance to provide the email send callback.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setEmailSendCallFunction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mailObj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;c1&#34;&gt;// mailObj.receiver comes from the Receiver input.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// mailObj.type is one of: &amp;#39;xlsx&amp;#39;, &amp;#39;pdf&amp;#39;, or &amp;#39;html&amp;#39;.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Email sent&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function / Location&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;new Email()&lt;/code&gt; (&lt;code&gt;component/toolbar/email.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Creates an icon menu item with the tag &lt;code&gt;email&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Email&lt;/code&gt; instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Menubar(data, widthFn, isHide, showPartToolbar, local)&lt;/code&gt; (&lt;code&gt;component/menubar.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Adds &lt;code&gt;new Email()&lt;/code&gt; to the File menu after the download entries.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;data&lt;/code&gt;, &lt;code&gt;widthFn&lt;/code&gt;, &lt;code&gt;isHide&lt;/code&gt;, &lt;code&gt;showPartToolbar&lt;/code&gt;, &lt;code&gt;local&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Menubar&lt;/code&gt; instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;toolbarChange(type, value)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Opens &lt;code&gt;modalEmail&lt;/code&gt; when &lt;code&gt;type === &#39;email&#39;&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;type&lt;/code&gt;: menu or toolbar tag; &lt;code&gt;value&lt;/code&gt;: optional item value&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ModalEmail&lt;/code&gt; (&lt;code&gt;component/modal_email.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Builds the Receiver input, File Type selector, OK button, and Cancel button.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ModalEmail&lt;/code&gt; instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setEmailSendCallFunction(emailSendCallFunc)&lt;/code&gt; (&lt;code&gt;index.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Stores the callback on &lt;code&gt;this.sheet.emailSendCallFunc&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;emailSendCallFunc&lt;/code&gt;: function called with &lt;code&gt;{ receiver, type }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;modalEmail.change(action, mailObj)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Calls &lt;code&gt;emailSendCallFunc(mailObj)&lt;/code&gt; when &lt;code&gt;action === &#39;ok&#39;&lt;/code&gt;, shows a sending mask, and reports success or error with a toast.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;action&lt;/code&gt;: modal action; &lt;code&gt;mailObj&lt;/code&gt;: &lt;code&gt;{ receiver, type }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The inspected &lt;code&gt;index.d.ts&lt;/code&gt; file does not declare &lt;code&gt;setEmailSendCallFunction&lt;/code&gt;, but the &lt;code&gt;index.js&lt;/code&gt; implementation exposes the method directly.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Where does the Send By Email command appear?
A: It is added to the File menu after the download-related menu entries.&lt;/p&gt;
&lt;p&gt;Q: Which file types are available in the email modal?
A: The modal defines &lt;code&gt;xlsx&lt;/code&gt;, &lt;code&gt;pdf&lt;/code&gt;, and &lt;code&gt;html&lt;/code&gt; as selectable file type values.&lt;/p&gt;
&lt;p&gt;Q: What object is passed to the send callback?
A: GridJs passes an object with &lt;code&gt;receiver&lt;/code&gt; from the Receiver input and &lt;code&gt;type&lt;/code&gt; from the File Type selector.&lt;/p&gt;
&lt;p&gt;Q: Is Send By Email blocked when the sheet is protected?
A: No. The &lt;code&gt;email&lt;/code&gt; operation is included in &lt;code&gt;protectSheetAllowOperations&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to set cell link in GridJS</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-set-cell-link/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-set-cell-link/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJS provides a &lt;code&gt;Link&lt;/code&gt; entry in the &lt;strong&gt;Insert&lt;/strong&gt; menu and in the cell context menu.
The link dialog supports three target types: &lt;code&gt;Web Page&lt;/code&gt;, &lt;code&gt;This Document&lt;/code&gt;, and &lt;code&gt;E-mail Address&lt;/code&gt;.
When adding a cell link, GridJS stores link objects in &lt;code&gt;data.hyperlinks&lt;/code&gt;, applies hyperlink style (&lt;code&gt;underline: true&lt;/code&gt;, &lt;code&gt;color: #0000ff&lt;/code&gt;), and updates clickable link positions on the sheet.
For web links, the dialog auto-adds &lt;code&gt;http://&lt;/code&gt; when protocol is missing, and accepts only &lt;code&gt;http&lt;/code&gt; or &lt;code&gt;https&lt;/code&gt; URLs.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the target cell or range.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the link dialog.
Use either:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Insert menu: &lt;code&gt;Link&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Right-click menu: &lt;code&gt;Link&lt;/code&gt;
&lt;img src=&#34;link-open-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Choose &lt;code&gt;Link To&lt;/code&gt; type and fill fields.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Web Page&lt;/code&gt;: set &lt;code&gt;Address&lt;/code&gt;.
&lt;img src=&#34;link-web-page.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;This Document&lt;/code&gt;: set &lt;code&gt;Document Place&lt;/code&gt; and &lt;code&gt;Cell Reference&lt;/code&gt; (for example &lt;code&gt;Sheet2!A1&lt;/code&gt;).
&lt;img src=&#34;link-this-document.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E-mail Address&lt;/code&gt;: set &lt;code&gt;E-mail Address&lt;/code&gt; and &lt;code&gt;Subject&lt;/code&gt;.
&lt;img src=&#34;link-email-address.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Click &lt;code&gt;OK&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For a new range, GridJS adds a link object with &lt;code&gt;area&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt; (and keeps cell text in &lt;code&gt;text&lt;/code&gt;), then refreshes hyperlink style and hit-testing.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open, edit, or remove the link.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;If the selected cell has a link, the context menu switches from &lt;code&gt;Link&lt;/code&gt; to &lt;code&gt;Edit Link&lt;/code&gt;, &lt;code&gt;Open Link&lt;/code&gt;, and &lt;code&gt;Remove Link&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clicking a linked cell opens the link (non-right-click path).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Remove Link&lt;/code&gt; removes the link from &lt;code&gt;data.hyperlinks&lt;/code&gt; and clears hyperlink style for that range.
&lt;img src=&#34;link-open-edit-remove.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;You can set links through sheet data and reload it, because &lt;code&gt;hyperlinks&lt;/code&gt; is part of &lt;code&gt;getData()&lt;/code&gt; / &lt;code&gt;loadData()&lt;/code&gt; payload.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hyperlinks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hyperlinks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[];&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hyperlinks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;area&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;B2:B2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 0=web, 2=email, 3=this document
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;address&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://example.com&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Example&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;loadData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For runtime updates on the current sheet without rebuilding all data, you can mutate &lt;code&gt;xs.sheet.data.hyperlinks&lt;/code&gt; and refresh link style/positions:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;area&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;C3:C3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;address&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Sheet2!A1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Jump to Sheet2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hyperlinks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hyperlink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setHyperlinkStyleByArea&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;area&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hyperlink&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;loadLinkPosition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.getData()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Gets workbook data including each sheet&amp;rsquo;s &lt;code&gt;hyperlinks&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Array&amp;lt;sheetData&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.loadData(data)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loads workbook data; &lt;code&gt;hyperlinks&lt;/code&gt; in payload is applied through data proxy.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;data:Array|Object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.hyperlink.getSelectArea(range)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Converts current range to &lt;code&gt;A1:B2&lt;/code&gt; area string.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range:{sri,sci,eri,eci}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.hyperlink.setHyperlinkStyleByArea(area, sheet, type)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies or clears hyperlink style for all cells in area.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;area:string&lt;/code&gt;, &lt;code&gt;sheet:Sheet&lt;/code&gt;, &lt;code&gt;type:boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.hyperlink.loadLinkPosition(sheet)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rebuilds clickable hyperlink hit regions after data changes.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sheet:Sheet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.hyperlink.access(hyperlink)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Opens a hyperlink by type (&lt;code&gt;web/email&lt;/code&gt; opens URL, &lt;code&gt;this document&lt;/code&gt; jumps to sheet/cell).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;hyperlink:{type,address,...}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;null|undefined&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why is my web link rejected?
A: The dialog only accepts &lt;code&gt;http://&lt;/code&gt; or &lt;code&gt;https://&lt;/code&gt; URLs. If protocol is missing, GridJS first normalizes it to &lt;code&gt;http://...&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Why do I see &lt;code&gt;Edit Link / Open Link / Remove Link&lt;/code&gt; instead of &lt;code&gt;Link&lt;/code&gt;?
A: Context menu visibility is switched by whether the selected cell already has a hyperlink.&lt;/p&gt;
&lt;p&gt;Q: Why can&amp;rsquo;t I add links on a locked sheet from context menu?
A: In locked mode, context-menu actions are hidden except copy-related actions and &lt;code&gt;Open Link&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: How does &lt;code&gt;This Document&lt;/code&gt; link navigate?
A: GridJS stores address as &lt;code&gt;SheetName!CellRef&lt;/code&gt;; on open, it activates target sheet and then activates the target cell.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to set Data Validations settings in GridJS</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-set-data-validations-settings/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-set-data-validations-settings/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJS provides Data Validation entry points from both the top menu and the context menu, labeled &lt;code&gt;Data Validation&lt;/code&gt; and &lt;code&gt;Data Validations&lt;/code&gt;.
The Data Validation dialog contains three tabs: &lt;code&gt;Setting&lt;/code&gt;, &lt;code&gt;Input Message&lt;/code&gt;, and &lt;code&gt;Error Alert&lt;/code&gt;.
In the &lt;code&gt;Setting&lt;/code&gt; tab, you can configure &lt;code&gt;AnyValue / WholeNumber / Decimal / List / Date / Time / TextLength / Custom&lt;/code&gt;, and the &lt;code&gt;Value1/Value2&lt;/code&gt; (or &lt;code&gt;Source&lt;/code&gt;) inputs are shown dynamically based on the selected &lt;code&gt;Allow&lt;/code&gt; and &lt;code&gt;Data&lt;/code&gt; options.
When &lt;code&gt;Allow&lt;/code&gt; is set to &lt;code&gt;Date&lt;/code&gt; or &lt;code&gt;Time&lt;/code&gt;, the selected cells are also formatted as date/time after submission.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the target cell or range where you want to apply validation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the Data Validation dialog.
Use either the context menu item &lt;code&gt;Data Validations&lt;/code&gt; or the toolbar item &lt;code&gt;Data Validation&lt;/code&gt;.
&lt;img src=&#34;data-validations-open-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure rules in the &lt;code&gt;Setting&lt;/code&gt; tab.
Set &lt;code&gt;Allow&lt;/code&gt;, &lt;code&gt;Data&lt;/code&gt;, and &lt;code&gt;Value1/Value2&lt;/code&gt;; if &lt;code&gt;Allow = List&lt;/code&gt;, enter the source in &lt;code&gt;Source&lt;/code&gt;, and optionally enable &lt;code&gt;Allow multiple selection&lt;/code&gt;.
&lt;img src=&#34;data-validations-setting-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the &lt;code&gt;Input Message&lt;/code&gt; tab.
Enable &lt;code&gt;Show input message when cell is selected&lt;/code&gt;, then set the title and message.
&lt;img src=&#34;data-validations-input-message-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Configure the &lt;code&gt;Error Alert&lt;/code&gt; tab.
Enable &lt;code&gt;Show error alert after invalid data is entered&lt;/code&gt;, then set &lt;code&gt;Style&lt;/code&gt; (Stop/Warning/Information), title, and message.
&lt;img src=&#34;data-validations-error-alert-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;code&gt;Submit&lt;/code&gt; to save, then test input values in the target range.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;Based on the current source code, you can apply validation rules programmatically through &lt;code&gt;xs.sheet.modalDataValidation.change(index, validation)&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;c1&#34;&gt;// Select B2:B10 (0-based indexes)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setEnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

  &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modalDataValidation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;change&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;allowtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;List&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;operatorfull&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Between&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;ignoreblank&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;value1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;=D2:D6&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;value2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;f1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;=D2:D6&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;f2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;showinput&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;inputtitle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Allowed values&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;inputmessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Please pick from the list, comma-separated for multiple values&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;showerror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;alertstyle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;warning&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;errortitle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Invalid input&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;errormessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;The value is not in the allowed list&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;ismultiple&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.selector.set(ri, ci, indexesUpdated)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets the selection start cell.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ri:number&lt;/code&gt;, &lt;code&gt;ci:number&lt;/code&gt;, &lt;code&gt;indexesUpdated?:boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.selector.setEnd(ri, ci, moving)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets the selection end cell to form the target range.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ri:number&lt;/code&gt;, &lt;code&gt;ci:number&lt;/code&gt;, &lt;code&gt;moving?:boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.modalDataValidation.change(index, validation)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies or updates Data Validation settings for the current selection.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;index:number&lt;/code&gt; (use &lt;code&gt;-1&lt;/code&gt; for new settings), &lt;code&gt;validation:object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.checkValidation(ri, ci)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Triggers server-side validation (used when formulas/custom conditions are involved).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ri:number&lt;/code&gt;, &lt;code&gt;ci:number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Promise&amp;lt;boolean&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.table.render()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the sheet view.&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why is no input message shown when I select a validated cell?
A: &lt;code&gt;showinput&lt;/code&gt; must be enabled, and both &lt;code&gt;inputtitle&lt;/code&gt; and &lt;code&gt;inputmessage&lt;/code&gt; must be non-empty.&lt;/p&gt;
&lt;p&gt;Q: How does multiple selection work for &lt;code&gt;List&lt;/code&gt; validation?
A: Enable &lt;code&gt;Allow multiple selection&lt;/code&gt;; values are comma-separated and each item is validated against the list.&lt;/p&gt;
&lt;p&gt;Q: What is the behavior difference among error alert styles?
A: &lt;code&gt;stop&lt;/code&gt; shows &lt;code&gt;Retry&lt;/code&gt;; &lt;code&gt;warning&lt;/code&gt; shows &lt;code&gt;Yes/No&lt;/code&gt;; &lt;code&gt;information&lt;/code&gt; shows &lt;code&gt;OK&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Why does the cell display format change after choosing &lt;code&gt;Date&lt;/code&gt; or &lt;code&gt;Time&lt;/code&gt;?
A: Current implementation sets selected cell format to &lt;code&gt;date&lt;/code&gt; or &lt;code&gt;time&lt;/code&gt; when the validation is submitted.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to use Border settings</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-use-border-settings/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-use-border-settings/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs includes a &lt;strong&gt;Format Cells&lt;/strong&gt; dialog with a &lt;strong&gt;Border&lt;/strong&gt; tab. In that tab, you can choose one of the built-in line styles, pick a border color, use preset actions such as &lt;strong&gt;none&lt;/strong&gt;, &lt;strong&gt;outline&lt;/strong&gt;, and &lt;strong&gt;inside&lt;/strong&gt;, or click individual border buttons around the preview area. The dialog keeps these changes in local border actions and applies them to the current selection only after you click &lt;strong&gt;Ok&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the cell or range that you want to format.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open the context menu and click &lt;strong&gt;Format Cells&lt;/strong&gt;.
&lt;img src=&#34;context-menu-format-cells.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the dialog, open the &lt;strong&gt;Border&lt;/strong&gt; tab.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;style&lt;/strong&gt; section, choose one of the available line styles: &lt;code&gt;thin&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;thick&lt;/code&gt;, &lt;code&gt;dashed&lt;/code&gt;, or &lt;code&gt;dotted&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the &lt;strong&gt;color&lt;/strong&gt; section, pick the border color that you want to apply.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the preset buttons to remove all borders (&lt;code&gt;none&lt;/code&gt;), apply an outer outline (&lt;code&gt;outline&lt;/code&gt;), or apply inside borders (&lt;code&gt;inside&lt;/code&gt;). When the current selection is a single cell, the &lt;strong&gt;inside&lt;/strong&gt; preset is disabled.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you need more control, use the preview buttons to toggle &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;, &lt;code&gt;all&lt;/code&gt;, &lt;code&gt;horizontal&lt;/code&gt;, &lt;code&gt;vertical&lt;/code&gt;, or &lt;code&gt;inside&lt;/code&gt; for the current selection.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review the preview area. The preview uses up to a 2 x 2 layout from the current selection and highlights the border buttons that are currently active.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Ok&lt;/strong&gt;. GridJs sends each recorded border action to the selected range and redraws the sheet with the new borders.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;border-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Apply an outside border to the current selection.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setSelectedCellAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;border&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;outside&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;thin&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#000000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Add inside borders to the current selection.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setSelectedCellAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;border&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;inside&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;dashed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#ff0000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Read the resulting border object from a cell.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;border&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cellStyle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.setSelectedCellAttr(property, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies a border action to the current selection immediately.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;property&lt;/code&gt;: &lt;code&gt;&#39;border&#39;&lt;/code&gt;; &lt;code&gt;value&lt;/code&gt;: &lt;code&gt;{ mode, style, color }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.setRangeAttr(range, property, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies a border action to a specific range. The &lt;strong&gt;Format Cells&lt;/strong&gt; dialog uses this path when you click &lt;strong&gt;Ok&lt;/strong&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt;: selected range; &lt;code&gt;property&lt;/code&gt;: &lt;code&gt;&#39;border&#39;&lt;/code&gt;; &lt;code&gt;value&lt;/code&gt;: &lt;code&gt;{ mode, style, color }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cellStyle(rowIndex, colIndex, sheetIndex)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns the cell style object for a cell.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;rowIndex&lt;/code&gt;, &lt;code&gt;colIndex&lt;/code&gt;, &lt;code&gt;sheetIndex&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;CellStyle&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For border actions, the code handles these modes: &lt;code&gt;none&lt;/code&gt;, &lt;code&gt;all&lt;/code&gt;, &lt;code&gt;inside&lt;/code&gt;, &lt;code&gt;outside&lt;/code&gt;, &lt;code&gt;horizontal&lt;/code&gt;, &lt;code&gt;vertical&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;, and &lt;code&gt;right&lt;/code&gt;. The Border tab exposes these line styles in the UI: &lt;code&gt;thin&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;thick&lt;/code&gt;, &lt;code&gt;dashed&lt;/code&gt;, and &lt;code&gt;dotted&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The resulting border data is stored in &lt;code&gt;CellStyle.border&lt;/code&gt;, where each side uses the shape &lt;code&gt;top?: [style, color]&lt;/code&gt;, &lt;code&gt;right?: [style, color]&lt;/code&gt;, &lt;code&gt;bottom?: [style, color]&lt;/code&gt;, and &lt;code&gt;left?: [style, color]&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: When are border changes actually written to the sheet from the Border tab?
A: The Border tab records actions while you click in the dialog. The code applies those actions to the selected range only when you click &lt;strong&gt;Ok&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Q: Can I use the &lt;strong&gt;inside&lt;/strong&gt; preset on a single cell?
A: No. The dialog disables the &lt;strong&gt;inside&lt;/strong&gt; preset for a 1 x 1 selection, and the border handler also skips &lt;code&gt;inside&lt;/code&gt;, &lt;code&gt;horizontal&lt;/code&gt;, and &lt;code&gt;vertical&lt;/code&gt; when the selection is not multiple.&lt;/p&gt;
&lt;p&gt;Q: How does GridJs store a border after it is applied?
A: The cell style keeps a &lt;code&gt;border&lt;/code&gt; object. Each visible side is stored as a &lt;code&gt;[style, color]&lt;/code&gt; pair under &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt;, or &lt;code&gt;left&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: What happens when I reopen Border settings on a range that already has borders?
A: The dialog scans the selected range and only preloads borders that are consistent for the whole matching edge or inner line. If the selected cells do not share the same border on that side, that side is not preselected in the preview.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to use Freeze</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-freeze/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-freeze/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Freeze is a toolbar toggle (&lt;code&gt;Freeze cell&lt;/code&gt;) that locks the top rows and left columns relative to the current selected cell. When enabled, GridJs stores freeze coordinates in sheet data and resets scroll to the freeze origin. When disabled, freeze is cleared by setting coordinates to &lt;code&gt;(0, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Select a cell where both row index and column index are greater than zero (for example, &lt;code&gt;C3&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Freeze cell&lt;/strong&gt; on the toolbar.
&lt;img src=&#34;freeze-toolbar-button.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Scroll the sheet and verify that rows above and columns to the left of the freeze position stay fixed.
&lt;img src=&#34;freeze-result.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Freeze cell&lt;/strong&gt; again to unfreeze.
&lt;img src=&#34;freeze-unfreeze.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Freeze by row/column index (zero-based): freeze top 2 rows and left 2 columns.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;freeze&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Unfreeze.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;freeze&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Persist freeze through sheet data (A1-style reference).
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;freeze&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;C3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;loadData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.freeze(ri, ci, raiseServerOpr = true)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies or clears freeze on the current sheet. Internally updates freeze data and triggers sheet reset/render.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ri&lt;/code&gt; (row index), &lt;code&gt;ci&lt;/code&gt; (column index), &lt;code&gt;raiseServerOpr&lt;/code&gt; (optional boolean)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;sheet&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;data.setFreeze(ri, ci)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sets freeze coordinates in data and resets scroll state.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ri&lt;/code&gt; (row index), &lt;code&gt;ci&lt;/code&gt; (column index)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;data.freezeIsActive()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Checks whether freeze is active.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.loadData(data)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loads sheet data; &lt;code&gt;freeze&lt;/code&gt; supports A1-style value (for example &lt;code&gt;C3&lt;/code&gt;).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;data&lt;/code&gt; (sheet array/object)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;sheet.freeze(...)&lt;/code&gt; is the same freeze path used by the toolbar toggle.
A freeze state is active only when &lt;code&gt;ri &amp;gt; 0&lt;/code&gt; or &lt;code&gt;ci &amp;gt; 0&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why did clicking Freeze not create a frozen pane when A1 is selected?
A: Freeze is active only when row index or column index is greater than zero. Selecting A1 maps to &lt;code&gt;(0, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: How do I unfreeze?
A: Toggle the Freeze button again, or call &lt;code&gt;sheet.freeze(0, 0)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Does toolbar state follow the current freeze status?
A: Yes. Toolbar reset reads &lt;code&gt;data.freezeIsActive()&lt;/code&gt; and updates the Freeze button active state.&lt;/p&gt;
&lt;p&gt;Q: Can I freeze on a protected sheet?
A: No. Freeze is blocked by the protected-sheet operation guard in the toolbar change flow.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to use Insert Controls</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-insert-controls/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-insert-controls/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Insert Controls provides a toolbar dropdown for adding form-like controls to the grid. The available options are Text Box,
Combo Box, Check Box, Spin Button, and Option Button. Each option opens a dialog with the required fields for that control,
and the control is inserted at the current selection after you confirm.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Select a target cell, then click Insert Controls on the toolbar.&lt;/li&gt;
&lt;li&gt;Choose a control type from the dropdown.
&lt;img src=&#34;insert-controls-dropdown.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Text Box: adds a Text Box control at the selected cell.&lt;br&gt;
Label text: required input for creating the control (placeholder: &amp;ldquo;Please enter text&amp;rdquo;).&lt;br&gt;
&lt;img src=&#34;insert-control-textbox-options.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;insert-control-textbox-result.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Combo Box: adds a Combo Box control at the selected cell with values from a range.&lt;br&gt;
Cell Reference: linked cell updated when the selection changes.&lt;br&gt;
Cell Range: source range for dropdown options (for example, B1:B10).&lt;br&gt;
&lt;img src=&#34;insert-control-combobox-options.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;insert-control-combobox-result.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Check Box: adds a Check Box control at the selected cell.&lt;br&gt;
Cell Reference: linked cell updated with TRUE or FALSE when toggled.&lt;br&gt;
Label text: shown next to the checkbox.&lt;br&gt;
&lt;img src=&#34;insert-control-checkbox-options.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;insert-control-checkbox-result.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Option Button: adds an Option Button (Radio Button) control at the selected cell.&lt;br&gt;
Cell Reference: linked cell updated when the option is selected.&lt;br&gt;
Label text: shown next to the option button.&lt;br&gt;
&lt;img src=&#34;insert-control-optionbutton-options.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;insert-control-optionbutton-result.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Spin Button: adds a Spin Button control at the selected cell.&lt;br&gt;
Cell Reference: linked cell updated with the current value.&lt;br&gt;
Minimum value: lower bound for the value.&lt;br&gt;
Maximum value: upper bound for the value.&lt;br&gt;
Current value: initial value.&lt;br&gt;
Incremental change: step size for each click.&lt;br&gt;
&lt;img src=&#34;insert-control-spinbutton-options.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;insert-control-spinbutton-result.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Open the Insert Controls dialog for a specific type.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modelControl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;TextBox&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modelControl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ComboBox&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modelControl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;CheckBox&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modelControl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SpinButton&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modelControl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;RadioButton&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sheet.modelControl.show(type)&lt;/td&gt;
&lt;td&gt;Show the Insert Controls dialog for the given control type.&lt;/td&gt;
&lt;td&gt;type (&amp;lsquo;TextBox&amp;rsquo;, &amp;lsquo;ComboBox&amp;rsquo;, &amp;lsquo;CheckBox&amp;rsquo;, &amp;lsquo;SpinButton&amp;rsquo;, &amp;lsquo;RadioButton&amp;rsquo;)&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sheet.modelControl.hide()&lt;/td&gt;
&lt;td&gt;Close the Insert Controls dialog.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;sheet.modelControl.show(type) displays the control dialog configured for the requested type.
sheet.modelControl.hide() closes the dialog without inserting a control.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: What control types are available in Insert Controls?
A: Text Box, Combo Box, Check Box, Spin Button, and Option Button.&lt;/p&gt;
&lt;p&gt;Q: What inputs are required for Combo Box?
A: Cell Reference and Cell Range. The range uses a spreadsheet reference like B1:B10.&lt;/p&gt;
&lt;p&gt;Q: Why does the dialog reject my values for Spin Button?
A: The dialog validates Minimum value, Maximum value, Current value, and Incremental change. If the values are out of
range (for example, Current value outside min/max), the dialog blocks submission.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to use Number Formats and Format Cells tabs in GridJS</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-use-number-formats-and-more-number-formats/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-use-number-formats-and-more-number-formats/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJS provides two related formatting entry points for cells.
The format dropdown offers built-in formats such as &lt;code&gt;Normal&lt;/code&gt;, &lt;code&gt;Plain Text&lt;/code&gt;, &lt;code&gt;Number&lt;/code&gt;, &lt;code&gt;Percent&lt;/code&gt;, &lt;code&gt;RMB&lt;/code&gt;, &lt;code&gt;USD&lt;/code&gt;, &lt;code&gt;EUR&lt;/code&gt;, &lt;code&gt;Date&lt;/code&gt;, &lt;code&gt;Time&lt;/code&gt;, &lt;code&gt;Date time&lt;/code&gt;, and &lt;code&gt;Duration&lt;/code&gt;.
For more detailed formatting, GridJS opens the &lt;code&gt;Format Cells&lt;/code&gt; dialog from the &lt;code&gt;More Number Formats&lt;/code&gt; dropdown entry, the context-menu item &lt;code&gt;Format Cells&lt;/code&gt;, or the &lt;code&gt;Ctrl+1&lt;/code&gt; shortcut.
In the current source code, this dialog contains five tabs: &lt;code&gt;Number&lt;/code&gt;, &lt;code&gt;Alignment&lt;/code&gt;, &lt;code&gt;Font&lt;/code&gt;, &lt;code&gt;Border&lt;/code&gt;, and &lt;code&gt;Fill&lt;/code&gt;.
The dialog does not submit everything through one identical path: number, alignment, font, and fill settings are collected into a style object, while merge and border actions are sent separately.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the target cell or range.
Both the quick format dropdown and the &lt;code&gt;Format Cells&lt;/code&gt; dialog apply to the current selection.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;code&gt;Format Cells&lt;/code&gt;.
Use one of these entry points:
the &lt;code&gt;More Number Formats&lt;/code&gt; item in the format dropdown, the context-menu item &lt;code&gt;Format Cells&lt;/code&gt;, or &lt;code&gt;Ctrl+1&lt;/code&gt;.
&lt;img src=&#34;number-formats-open-more-dialog.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;number-formats-open-context-menu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;code&gt;Number&lt;/code&gt; tab.
The &lt;code&gt;Category&lt;/code&gt; dropdown chooses the active number-format group.
The read-only &lt;code&gt;Sample&lt;/code&gt; box previews the current format result for the selected cell value.
&lt;code&gt;Decimal places&lt;/code&gt; is a numeric input limited to &lt;code&gt;0&lt;/code&gt; through &lt;code&gt;99&lt;/code&gt;, and changing it refreshes the sample.
&lt;code&gt;Use 1000 Separator&lt;/code&gt; is shown for the &lt;code&gt;Number&lt;/code&gt; category and toggles the generated custom format between grouped and ungrouped thousands.
&lt;code&gt;Symbol&lt;/code&gt; is shown for &lt;code&gt;Currency&lt;/code&gt; and &lt;code&gt;Accounting&lt;/code&gt; and changes the currency symbol used by the generated format.
&lt;code&gt;Type&lt;/code&gt; changes by category:
for &lt;code&gt;Number&lt;/code&gt; and &lt;code&gt;Currency&lt;/code&gt;, it selects the negative-number pattern;
for &lt;code&gt;Date&lt;/code&gt; and &lt;code&gt;Time&lt;/code&gt;, it selects one of the predefined date/time display patterns;
for &lt;code&gt;Custom&lt;/code&gt;, it becomes editable so you can type or select a custom format string.
&lt;code&gt;General&lt;/code&gt; and &lt;code&gt;Text&lt;/code&gt; do not show format pickers; they display explanatory text instead.
&lt;img src=&#34;number-formats-number-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;code&gt;Alignment&lt;/code&gt; tab.
&lt;code&gt;Horizontal&lt;/code&gt; selects &lt;code&gt;General&lt;/code&gt;, &lt;code&gt;Left&lt;/code&gt;, &lt;code&gt;Center&lt;/code&gt;, or &lt;code&gt;Right&lt;/code&gt;.
&lt;code&gt;Vertical&lt;/code&gt; selects &lt;code&gt;Top&lt;/code&gt;, &lt;code&gt;Center&lt;/code&gt;, or &lt;code&gt;Bottom&lt;/code&gt;.
&lt;code&gt;Indent&lt;/code&gt; is a numeric input limited to &lt;code&gt;0&lt;/code&gt; through &lt;code&gt;250&lt;/code&gt;; when it becomes greater than &lt;code&gt;0&lt;/code&gt;, the dialog forces horizontal alignment to &lt;code&gt;Left&lt;/code&gt; unless the current alignment is already &lt;code&gt;Left&lt;/code&gt; or &lt;code&gt;Right&lt;/code&gt;.
&lt;code&gt;Wrap text&lt;/code&gt; toggles the stored &lt;code&gt;textwrap&lt;/code&gt; state.
&lt;code&gt;Merge cells&lt;/code&gt; toggles the merge state for the selected range and is submitted separately from the style object.
The orientation area has three interactive parts:
the vertical-text button with stacked &lt;code&gt;Text&lt;/code&gt; letters switches the dialog into vertical-text mode;
the angle diagram lets you drag the pointer or click near snap points;
the degrees input accepts values from &lt;code&gt;-90&lt;/code&gt; through &lt;code&gt;90&lt;/code&gt;.
&lt;img src=&#34;format-cells-alignment-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;code&gt;Font&lt;/code&gt; tab.
The &lt;code&gt;Font&lt;/code&gt; list selects the font family from &lt;code&gt;baseFonts&lt;/code&gt;.
The &lt;code&gt;Font style&lt;/code&gt; list switches between &lt;code&gt;Regular&lt;/code&gt;, &lt;code&gt;Italic&lt;/code&gt;, &lt;code&gt;Bold&lt;/code&gt;, and &lt;code&gt;Bold Italic&lt;/code&gt;.
The &lt;code&gt;Size&lt;/code&gt; list changes the font size.
The color button opens the font color palette; selecting a color updates the stored font color and refreshes the preview.
The &lt;code&gt;Underline&lt;/code&gt; dropdown supports &lt;code&gt;None&lt;/code&gt;, &lt;code&gt;Single&lt;/code&gt;, &lt;code&gt;Double&lt;/code&gt;, &lt;code&gt;Single Accounting&lt;/code&gt;, and &lt;code&gt;Double Accounting&lt;/code&gt;.
The &lt;code&gt;Strikethrough&lt;/code&gt;, &lt;code&gt;Superscript&lt;/code&gt;, and &lt;code&gt;Subscript&lt;/code&gt; checkboxes toggle those effects; &lt;code&gt;Superscript&lt;/code&gt; and &lt;code&gt;Subscript&lt;/code&gt; are mutually exclusive in the current implementation.
The preview box redraws &lt;code&gt;AaBbYyZz&lt;/code&gt; each time these controls change.
&lt;img src=&#34;format-cells-font-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;code&gt;Border&lt;/code&gt; tab.
The line-style list chooses the border stroke style such as &lt;code&gt;thin&lt;/code&gt;, &lt;code&gt;medium&lt;/code&gt;, &lt;code&gt;thick&lt;/code&gt;, &lt;code&gt;dashed&lt;/code&gt;, or &lt;code&gt;dotted&lt;/code&gt;.
The border color palette changes the color used for the next border action.
The preset buttons work as follows:
&lt;code&gt;none&lt;/code&gt; removes all borders,
&lt;code&gt;outline&lt;/code&gt; applies borders to the outside of the selection,
&lt;code&gt;inside&lt;/code&gt; applies borders to the inside edges of a multi-cell selection.
The preview action buttons around the sample grid apply specific modes:
top, left, right, and bottom apply one side;
&lt;code&gt;all&lt;/code&gt; applies all sides;
&lt;code&gt;vertical&lt;/code&gt; applies internal vertical borders;
&lt;code&gt;horizontal&lt;/code&gt; applies internal horizontal borders;
&lt;code&gt;inside&lt;/code&gt; applies both internal directions.
The sample preview updates immediately so you can see the active border state before pressing &lt;code&gt;Ok&lt;/code&gt;.
&lt;img src=&#34;format-cells-border-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use the &lt;code&gt;Fill&lt;/code&gt; tab.
The &lt;code&gt;NO COLOR&lt;/code&gt; button clears the stored background color by setting it to the special &lt;code&gt;NO_COLOR&lt;/code&gt; state.
The background color palette sets the base fill color.
The &lt;code&gt;Pattern Color&lt;/code&gt; dropdown chooses the color used to draw the selected pattern.
Each pattern box in the pattern grid selects one pattern style such as &lt;code&gt;Solid&lt;/code&gt;, &lt;code&gt;Gray75&lt;/code&gt;, &lt;code&gt;Gray50&lt;/code&gt;, stripe patterns, and crosshatch patterns.
The sample preview canvas redraws after every fill change.
When the selected pattern is &lt;code&gt;Solid&lt;/code&gt;, the pattern color becomes the final visible fill color; otherwise the preview combines background color, pattern color, and pattern style.
&lt;img src=&#34;format-cells-fill-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;code&gt;Ok&lt;/code&gt; to apply the changes.
&lt;code&gt;Ok&lt;/code&gt; collects the Number, Alignment, Font, and Fill settings into one style object, then applies merge and border actions separately.
&lt;code&gt;Cancel&lt;/code&gt; restores the original number-format state from &lt;code&gt;currentStyle&lt;/code&gt;, clears temporary dialog state, and closes the dialog.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;Based on the current source code, you can use a quick built-in format through &lt;code&gt;setSelectedCellAttr(&#39;format&#39;, ...)&lt;/code&gt;, or open the full dialog and apply the same tab-level updates programmatically.
For Number, Alignment, Font, and Fill, GridJS uses &lt;code&gt;formatUpdate&lt;/code&gt;. For merge and borders, it uses separate range updates.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Select B2:D4.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setEnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Apply a built-in quick format.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setSelectedCellAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;number&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Open the full dialog.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modalMoreNumberFormats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Open the Font tab.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fontTabIndex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modalMoreNumberFormats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabComponent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;findIndex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;tab&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;tabFont&amp;#39;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fontTabIndex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modalMoreNumberFormats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tabComponent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;openTab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fontTabIndex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Apply Number / Alignment / Font / Fill style data.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;formatUpdate&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;custom&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#,##0.00&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;align&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;right&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;valign&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;middle&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;textwrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;angle&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Arial&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;bold&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;italic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#c00000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;underline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Single&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;strike&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;bgcolor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#fff2cc&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Apply merge from the Alignment tab.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;merge&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Apply border actions from the Border tab.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;border&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;outside&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;thin&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#000000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setSelectedCellAttr(&#39;format&#39;, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies one of the built-in format keys handled by the quick format workflow.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;value: &#39;normal&#39; | &#39;text&#39; | &#39;number&#39; | &#39;percent&#39; | &#39;rmb&#39; | &#39;usd&#39; | &#39;eur&#39; | &#39;date&#39; | &#39;time&#39; | &#39;datetime&#39; | &#39;duration&#39;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.modalMoreNumberFormats.show(ri, ci, onFormatApplyCallback?)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Opens the &lt;code&gt;Format Cells&lt;/code&gt; dialog for the selected cell.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ri?: number&lt;/code&gt;, &lt;code&gt;ci?: number&lt;/code&gt;, &lt;code&gt;onFormatApplyCallback?: function&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.modalMoreNumberFormats.tabComponent.openTab(index)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Switches the dialog to a specific tab after it is opened.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;index: number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, &#39;formatUpdate&#39;, style)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies the style data used by the Number, Alignment, Font, and Fill tabs. The current implementation checks fields such as &lt;code&gt;custom&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;font&lt;/code&gt;, &lt;code&gt;bgcolor&lt;/code&gt;, &lt;code&gt;align&lt;/code&gt;, &lt;code&gt;valign&lt;/code&gt;, &lt;code&gt;pattern&lt;/code&gt;, &lt;code&gt;pbgcolor&lt;/code&gt;, &lt;code&gt;angle&lt;/code&gt;, &lt;code&gt;textwrap&lt;/code&gt;, &lt;code&gt;indent&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;strike&lt;/code&gt;, and &lt;code&gt;underline&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range: CellRange&lt;/code&gt;, &lt;code&gt;style: object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, &#39;merge&#39;, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies the merge toggle used by the &lt;code&gt;Merge cells&lt;/code&gt; checkbox in the Alignment tab.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range: CellRange&lt;/code&gt;, &lt;code&gt;value: boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, &#39;border&#39;, action)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies one border action such as &lt;code&gt;outside&lt;/code&gt;, &lt;code&gt;inside&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;, &lt;code&gt;right&lt;/code&gt;, &lt;code&gt;all&lt;/code&gt;, &lt;code&gt;horizontal&lt;/code&gt;, &lt;code&gt;vertical&lt;/code&gt;, or &lt;code&gt;none&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range: CellRange&lt;/code&gt;, &lt;code&gt;action: { mode: string, style: string, color: string }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: What is the difference between &lt;code&gt;Format&lt;/code&gt; and &lt;code&gt;More Number Formats&lt;/code&gt;?
A: &lt;code&gt;Format&lt;/code&gt; applies a built-in format key such as &lt;code&gt;number&lt;/code&gt;, &lt;code&gt;usd&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;, or &lt;code&gt;time&lt;/code&gt;. &lt;code&gt;More Number Formats&lt;/code&gt; opens the full &lt;code&gt;Format Cells&lt;/code&gt; dialog and can submit richer tab-based changes.&lt;/p&gt;
&lt;p&gt;Q: How can I open the full format dialog quickly?
A: The current code supports three entry points: the format dropdown item &lt;code&gt;More Number Formats&lt;/code&gt;, the context-menu item &lt;code&gt;Format Cells&lt;/code&gt;, and &lt;code&gt;Ctrl+1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: How many tabs does &lt;code&gt;Format Cells&lt;/code&gt; currently have?
A: The current dialog contains five tabs: &lt;code&gt;Number&lt;/code&gt;, &lt;code&gt;Alignment&lt;/code&gt;, &lt;code&gt;Font&lt;/code&gt;, &lt;code&gt;Border&lt;/code&gt;, and &lt;code&gt;Fill&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Are border changes stored in the same style object as the other tabs?
A: No. In the current implementation, border actions are applied separately through &lt;code&gt;setRangeAttr(range, &#39;border&#39;, action)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Which categories are available in the &lt;code&gt;Number&lt;/code&gt; tab?
A: The current category list is &lt;code&gt;General&lt;/code&gt;, &lt;code&gt;Number&lt;/code&gt;, &lt;code&gt;Currency&lt;/code&gt;, &lt;code&gt;Accounting&lt;/code&gt;, &lt;code&gt;Date&lt;/code&gt;, &lt;code&gt;Time&lt;/code&gt;, &lt;code&gt;Text&lt;/code&gt;, &lt;code&gt;Percentage&lt;/code&gt;, &lt;code&gt;Scientific&lt;/code&gt;, and &lt;code&gt;Custom&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to use Paint format</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-use-paint-format/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-use-paint-format/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs includes a &lt;strong&gt;Paint format&lt;/strong&gt; toolbar button for copying formatting from the current selection and applying it to another target. When the button is turned on, the current selection is copied to the internal clipboard. After you click a target cell or range, GridJs performs a format-only paste, clears the clipboard, and turns the Paint format button off.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select the source cell or range that already has the formatting you want to reuse.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click &lt;strong&gt;Paint format&lt;/strong&gt; on the toolbar to turn it on.
&lt;img src=&#34;paint-format-button.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click the target cell or drag to the target range in the sheet. GridJs applies only the copied formatting to that selection.
&lt;img src=&#34;paint-format-target.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After the format is applied once, the Paint format button is turned off automatically.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you want to cancel before applying the format, click &lt;strong&gt;Paint format&lt;/strong&gt; again to turn it off. GridJs clears the internal clipboard when the button is turned off.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Format paste does not run in read mode, and it also stops when the current target is locked.
&lt;img src=&#34;paint-format-result.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Copy the current selection into the internal clipboard.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Paste only the copied formatting into the current target selection.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pasteFromInternal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Toggle the toolbar button state if needed.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toolbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;paintformatToggle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.copy()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Copies the current selection into the internal clipboard.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.data.pasteFromInternal(what)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pastes from the internal clipboard into the current selection. The Paint format flow uses &lt;code&gt;format&lt;/code&gt; so only formatting is pasted.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;what&lt;/code&gt; (&lt;code&gt;&#39;format&#39;&lt;/code&gt;, &lt;code&gt;&#39;all&#39;&lt;/code&gt;, or other supported paste mode)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Promise&amp;lt;boolean&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.toolbar.paintformatActive()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns whether the Paint format button is currently active.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.toolbar.paintformatToggle()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Toggles the Paint format button state.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The toolbar handler for Paint format first copies the current selection, and the next target selection triggers &lt;code&gt;paste(&#39;format&#39;)&lt;/code&gt;, which internally calls &lt;code&gt;sheet.data.pasteFromInternal(&#39;format&#39;)&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Does Paint format copy cell values too?
A: No. The Paint format flow calls a format-only paste, so it applies formatting without using the normal all-content paste path.&lt;/p&gt;
&lt;p&gt;Q: How many times does Paint format stay active?
A: The code turns the Paint format button off after one format-only paste and clears the clipboard immediately after that paste finishes.&lt;/p&gt;
&lt;p&gt;Q: Can I cancel Paint format before applying it?
A: Yes. Clicking the Paint format button again turns it off and clears the internal clipboard.&lt;/p&gt;
&lt;p&gt;Q: When will Paint format not apply?
A: The paste handler returns immediately in read mode, and it also stops when the current target is locked.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to use Show Formulas</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-show-formulas/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-show-formulas/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Show Formulas is a toolbar toggle that switches worksheet display between normal cell output and formula text. When it is on, a formula cell displays its formula expression in the cell. When it is off, the cell returns to normal rendered value/text display. If &lt;code&gt;showFormulas&lt;/code&gt; is not set in settings, the toolbar state is initialized as off.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open a worksheet with the toolbar visible.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Show Formulas&lt;/strong&gt; in the toolbar.
&lt;img src=&#34;show-formulas-toolbar-button.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Formula cells now display formula text in the grid.
&lt;img src=&#34;show-formulas-enabled.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Show Formulas&lt;/strong&gt; again to switch back to normal display.
&lt;img src=&#34;show-formulas-disabled.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Enable formula text display.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;showFormulas&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reRender&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toolbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Disable formula text display.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;showFormulas&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reRender&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toolbar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;x_spreadsheet(selector, option)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Creates the spreadsheet instance.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;selector&lt;/code&gt; (string), &lt;code&gt;option&lt;/code&gt; (object)&lt;/td&gt;
&lt;td&gt;Spreadsheet instance (&lt;code&gt;xs&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.reRender()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the sheet after changing display settings.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;xs&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.toolbar.reset()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Refreshes toolbar button states from current sheet settings.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;xs.reRender()&lt;/code&gt; updates table/canvas rendering so the Show Formulas effect is visible.
&lt;code&gt;xs.sheet.toolbar.reset()&lt;/code&gt; syncs the toolbar toggle state with &lt;code&gt;data.settings.showFormulas&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why can I not toggle Show Formulas on a protected sheet?
A: The toolbar change handler blocks this action when the sheet is locked.&lt;/p&gt;
&lt;p&gt;Q: Why is the default state off?
A: When &lt;code&gt;data.settings.showFormulas&lt;/code&gt; is undefined, toolbar reset sets the Show Formulas toggle state to false.&lt;/p&gt;
&lt;p&gt;Q: What happens to rich text when Show Formulas is enabled?
A: Rich text rendering is skipped while Show Formulas is on.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Read-only Mode and Edit Mode</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/read-only-mode-and-edit-mode/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/read-only-mode-and-edit-mode/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs mode is configured by &lt;code&gt;options.mode&lt;/code&gt;, with two values: &lt;code&gt;&#39;edit&#39;&lt;/code&gt; and &lt;code&gt;&#39;read&#39;&lt;/code&gt;. The default mode is &lt;code&gt;&#39;edit&#39;&lt;/code&gt; in &lt;code&gt;defaultSettings&lt;/code&gt;. In read mode, GridJs keeps navigation-related interactions, but blocks data-editing paths such as editor input, cell text write, and paste workflows.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Initialize GridJs in edit mode when users need full editing features.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initialize GridJs in read mode when users should browse data without changing cell content.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In read mode, these editing-related features are disabled by code:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Formula bar input and hidden key-input area are set to &lt;code&gt;disabled&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Opening the in-cell editor is blocked.&lt;/li&gt;
&lt;li&gt;Writing cell text is blocked.&lt;/li&gt;
&lt;li&gt;Paste handlers return immediately in read mode (both regular paste and outer-document paste path).&lt;/li&gt;
&lt;li&gt;Autofill by drag does not run .&lt;/li&gt;
&lt;li&gt;GridInput keydown/composition/paste bindings are attached only when mode is not &amp;lsquo;read&amp;rsquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In read mode, sheet-tab management is reduced:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The bottom-bar add button is not rendered.&lt;/li&gt;
&lt;li&gt;Sheet-tab context-menu and double-click rename handlers are not bound.&lt;/li&gt;
&lt;li&gt;Tab click for sheet switching is still bound.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In read mode, the selector is created as readonly (&lt;code&gt;mode !== &#39;edit&#39;&lt;/code&gt;), so the selection corner UI is hidden.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Edit mode (default behavior)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xsEdit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-edit&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;edit&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Read-only mode
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xsRead&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-read&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;read&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function / Location&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Options.mode&lt;/code&gt; (&lt;code&gt;index.d.ts&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Declares supported mode values: &lt;code&gt;&#39;edit&#39; | &#39;read&#39;&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mode&lt;/code&gt;: &lt;code&gt;&#39;edit&#39;&lt;/code&gt; or &lt;code&gt;&#39;read&#39;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;defaultSettings.mode&lt;/code&gt; (&lt;code&gt;core/data_proxy.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Sets default mode to &lt;code&gt;&#39;edit&#39;&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;editorSet(...)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Stops in-cell editing when &lt;code&gt;data.settings.mode === &#39;read&#39;&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;focus&lt;/code&gt;: optional boolean&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;dataSetCellText(...)&lt;/code&gt; (&lt;code&gt;component/sheet.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Stops cell text write in read mode.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;text&lt;/code&gt;, &lt;code&gt;state&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ContextMenu.setMode(...)&lt;/code&gt; (&lt;code&gt;component/contextmenu.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Shrinks menu items in read mode to a minimal copy-first set.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;mode&lt;/code&gt;: row/column/range context&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Bottombar.setItemEvent(...)&lt;/code&gt; (&lt;code&gt;component/bottombar.js&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Binds rename/context-menu handlers only in edit mode.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;item&lt;/code&gt;: tab element&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;No public runtime API for switching mode after initialization was found in &lt;code&gt;index.d.ts&lt;/code&gt; or the inspected &lt;code&gt;Spreadsheet&lt;/code&gt; public methods in &lt;code&gt;index.js&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: What mode is used if I do not pass &lt;code&gt;options.mode&lt;/code&gt;?
A: GridJs uses &lt;code&gt;mode: &#39;edit&#39;&lt;/code&gt; from &lt;code&gt;defaultSettings&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: What is the simplest way to make GridJs read-only?
A: Initialize with &lt;code&gt;{ mode: &#39;read&#39; }&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: In read mode, can users still switch worksheets?
A: Yes. Sheet-tab click is still bound; only add/rename/context-menu management handlers are removed.&lt;/p&gt;
&lt;p&gt;Q: In read mode, why can users not type or paste into cells?
A: Multiple edit paths explicitly return early when &lt;code&gt;data.settings.mode === &#39;read&#39;&lt;/code&gt;, including editor opening, text writing, and paste handlers.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Zoom Levels</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/zoom-levels/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/zoom-levels/</guid>
      <description>
        
        
        &lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;GridJs provides a toolbar item with tag &lt;code&gt;zoom-size&lt;/code&gt; and label &lt;strong&gt;Zoom&lt;/strong&gt;. The dropdown contains seven preset levels: &lt;code&gt;50%&lt;/code&gt;, &lt;code&gt;75%&lt;/code&gt;, &lt;code&gt;100%&lt;/code&gt;, &lt;code&gt;125%&lt;/code&gt;, &lt;code&gt;150%&lt;/code&gt;, &lt;code&gt;175%&lt;/code&gt;, and &lt;code&gt;200%&lt;/code&gt;. Selecting one preset sends the selected object (for example &lt;code&gt;{ text: &amp;quot;150%&amp;quot;, number: 1.5 }&lt;/code&gt;) through the toolbar change pipeline and calls &lt;code&gt;sheet.setzoom(value.number)&lt;/code&gt;. On touch devices, GridJs also handles pinch gestures and clamps pinch zoom to the range &lt;code&gt;0.5&lt;/code&gt; to &lt;code&gt;2&lt;/code&gt; before calling &lt;code&gt;setzoom&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Open GridJs and locate the &lt;strong&gt;Zoom&lt;/strong&gt; control in the toolbar.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;zoom-dropdown.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;Click the Zoom dropdown and select one preset value from &lt;code&gt;50%&lt;/code&gt;, &lt;code&gt;75%&lt;/code&gt;, &lt;code&gt;100%&lt;/code&gt;, &lt;code&gt;125%&lt;/code&gt;, &lt;code&gt;150%&lt;/code&gt;, &lt;code&gt;175%&lt;/code&gt;, or &lt;code&gt;200%&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;After selection, GridJs routes the toolbar event as &lt;code&gt;type === &#39;zoom-size&#39;&lt;/code&gt; and applies &lt;code&gt;this.setzoom(value.number)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you are using a touch device, use a pinch gesture on the sheet area. GridJs reads &lt;code&gt;evt.zoom&lt;/code&gt;, clamps values above &lt;code&gt;2&lt;/code&gt; down to &lt;code&gt;2&lt;/code&gt;, clamps values below &lt;code&gt;0.5&lt;/code&gt; up to &lt;code&gt;0.5&lt;/code&gt;, and then applies &lt;code&gt;setzoom&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In protected-sheet mode, zoom is still allowed because &lt;code&gt;zoom-size&lt;/code&gt; is included in &lt;code&gt;protectSheetAllowOperations&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Programmatically apply zoom.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setZoomLevel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// You can also restore normal scale.
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setZoomLevel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setZoomLevel(v)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Public Spreadsheet method that forwards zoom changes to &lt;code&gt;sheet.setzoom(v)&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v&lt;/code&gt;: zoom factor (for example &lt;code&gt;0.5&lt;/code&gt;, &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;1.25&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sheet.setzoom(v)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Applies zoom to table/data state, updates overlay sizing for zoom &lt;code&gt;&amp;lt; 1&lt;/code&gt; on non-mobile, calls canvas zoom, re-renders via &lt;code&gt;sheetReset&lt;/code&gt;, and updates conditional-image zoom.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;v&lt;/code&gt;: zoom factor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;pinch(evt)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Touch gesture handler that clamps &lt;code&gt;evt.zoom&lt;/code&gt; into &lt;code&gt;[0.5, 2]&lt;/code&gt; before calling &lt;code&gt;setzoom&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;evt.zoom&lt;/code&gt;: gesture zoom factor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;void&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The inspected &lt;code&gt;index.d.ts&lt;/code&gt; file in this repository does not declare &lt;code&gt;setZoomLevel&lt;/code&gt;, but the &lt;code&gt;index.js&lt;/code&gt; implementation exposes and uses this method directly.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: What zoom presets are available in the toolbar?
A: The dropdown defines exactly seven presets: &lt;code&gt;50%&lt;/code&gt;, &lt;code&gt;75%&lt;/code&gt;, &lt;code&gt;100%&lt;/code&gt;, &lt;code&gt;125%&lt;/code&gt;, &lt;code&gt;150%&lt;/code&gt;, &lt;code&gt;175%&lt;/code&gt;, and &lt;code&gt;200%&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: What is the default zoom level when data is initialized?
A: &lt;code&gt;DataProxy&lt;/code&gt; initializes &lt;code&gt;zoomlevel&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Does pinch zoom have limits?
A: Yes. The pinch handler clamps zoom values to a minimum of &lt;code&gt;0.5&lt;/code&gt; and a maximum of &lt;code&gt;2&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Q: Is zoom blocked when the sheet is protected?
A: No. &lt;code&gt;zoom-size&lt;/code&gt; is explicitly included in the allowed operations list for protected sheets.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Set Text Wrap</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/set-text-wrap/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/set-text-wrap/</guid>
      <description>
        
        
        &lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Turning on text wrap makes long text automatically break onto new lines inside a cell, keeping all content visible without widening the column. For example, you can wrap a product description so it stays inside a narrow column while still being fully readable.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;h3 id=&#34;step-by-step-instructions&#34;&gt;Step-by-Step Instructions&lt;/h3&gt;
&lt;h3 id=&#34;method-a-toolbar-buttons-quickest-way&#34;&gt;Method A: Toolbar buttons (quickest way)&lt;/h3&gt;
&lt;h4 id=&#34;step-by-step-instructions-1&#34;&gt;Step-by-Step Instructions&lt;/h4&gt;
&lt;h4 id=&#34;step-1-select-the-cells&#34;&gt;Step 1: Select the cells&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click and drag the mouse over the cells you want to align.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The selected range is highlighted with a blue border.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;select-cells.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-2-enable-wrap-text&#34;&gt;Step 2: Enable Wrap Text&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;Wrap Text&lt;/strong&gt; button in the toolbar (icon looks like a curved arrow around lines).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The selected cells now display wrapped text, breaking long lines into multiple lines within each cell.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;wrap-text-button.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;method-b-format-cells-dialog-full-control&#34;&gt;Method B: Format Cells dialog (full control)&lt;/h3&gt;
&lt;h4 id=&#34;step-1-select-the-cells-you-want-to-wrap&#34;&gt;Step 1: Select the cells you want to wrap&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click and drag to highlight the cell(s) that contain the long text.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The selected cells are outlined with a blue border.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;select-cells.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-2-open-the-format-cells-dialog&#34;&gt;Step 2: Open the Format Cells dialog&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Right‑click the highlighted cells and choose &lt;strong&gt;Format Cells…&lt;/strong&gt; from the context menu&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: A modal window titled “Format Cells” appears with several tabs (Number, Alignment, Font, Border, Fill).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;format-cells-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-3-go-to-the-alignment-tab&#34;&gt;Step 3: Go to the Alignment tab&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;Alignment&lt;/strong&gt; tab inside the dialog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: Options for Horizontal, Vertical, and a “Text control” section appear.&lt;/p&gt;
&lt;h4 id=&#34;step-4-enable-wrap-text&#34;&gt;Step 4: Enable Wrap Text&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Check the &lt;strong&gt;Wrap text&lt;/strong&gt; checkbox in the “Text control” section.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: A check‑mark appears next to “Wrap text”.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;alignment-tab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-5-confirm-the-change&#34;&gt;Step 5: Confirm the change&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;OK&lt;/strong&gt; button at the bottom of the dialog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The dialog closes and the selected cells now display wrapped text (multiple lines within the same cell).&lt;/p&gt;
&lt;h2 id=&#34;for-developers-javascript-api&#34;&gt;For Developers: JavaScript API&lt;/h2&gt;
&lt;h3 id=&#34;quick-example&#34;&gt;Quick Example&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// xs is the GridJs instance
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Set text wrap for the currently selected range
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// the range you have selected
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;textwrap&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                    &lt;span class=&#34;c1&#34;&gt;// property name
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;                           &lt;span class=&#34;c1&#34;&gt;// enable wrap
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;api-reference&#34;&gt;API Reference&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setRangeAttr&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range: Range&lt;/code&gt;, &lt;code&gt;property: string&lt;/code&gt;, &lt;code&gt;value: any&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Updates a visual attribute of the given cell range. Use property &lt;strong&gt;&amp;lsquo;textwrap&amp;rsquo;&lt;/strong&gt; with value &lt;strong&gt;true&lt;/strong&gt; to turn wrapping on (or &lt;strong&gt;false&lt;/strong&gt; to turn it off).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q: Does Wrap text work for merged cells?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Yes, but the merged cell must have enough height; otherwise the text will be clipped.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: I want to turn off Wrap text for many cells at once.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Select the whole range, open the Format Cells dialog, uncheck &lt;strong&gt;Wrap text&lt;/strong&gt;, and click &lt;strong&gt;OK&lt;/strong&gt;. You can also use the API: &lt;code&gt;setRangeAttr(..., &#39;textwrap&#39;, false)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Is Wrap text saved when I export the sheet?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: The wrap setting is stored in the sheet’s style data, so it persists in exported formats that support cell styling (e.g., XLSX, CSV with formatting).&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Text Alignment</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/set-text-alignment/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/set-text-alignment/</guid>
      <description>
        
        
        &lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Changing text alignment decides where the content sits inside a cell – left, center, right for horizontal positioning, and top, middle, bottom for vertical positioning. This helps make reports easier to read and gives a professional look.&lt;br&gt;
For example, you can align column headings to the center while keeping data rows left‑aligned.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;h3 id=&#34;method-a-toolbar-buttons-quickest-way&#34;&gt;Method A: Toolbar buttons (quickest way)&lt;/h3&gt;
&lt;h4 id=&#34;step-by-step-instructions&#34;&gt;Step-by-Step Instructions&lt;/h4&gt;
&lt;h4 id=&#34;step-1-select-the-cells&#34;&gt;Step 1: Select the cells&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click and drag the mouse over the cells you want to align.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The selected range is highlighted with a blue border.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;select-cells.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-2-open-the-horizontal-alignment-menu&#34;&gt;Step 2: Open the horizontal alignment menu&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;Horizontal Align&lt;/strong&gt; button in the toolbar (icon shows three horizontal lines).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: A small dropdown appears with options &lt;strong&gt;Left&lt;/strong&gt;, &lt;strong&gt;Center&lt;/strong&gt;, &lt;strong&gt;Right&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&#34;step-3-choose-a-horizontal-option&#34;&gt;Step 3: Choose a horizontal option&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click &lt;strong&gt;Center&lt;/strong&gt; (or &lt;strong&gt;Left / Right&lt;/strong&gt; as needed).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The text inside the selected cells moves to the chosen horizontal position.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;toolbar-h-align.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-4-open-the-vertical-alignment-menu&#34;&gt;Step 4: Open the vertical alignment menu&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;Vertical Align&lt;/strong&gt; button in the toolbar (icon shows three vertical bars).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: A dropdown with options &lt;strong&gt;Top&lt;/strong&gt;, &lt;strong&gt;Middle&lt;/strong&gt;, &lt;strong&gt;Bottom&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id=&#34;step-5-choose-a-vertical-option&#34;&gt;Step 5: Choose a vertical option&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click &lt;strong&gt;Middle&lt;/strong&gt; (or &lt;strong&gt;Top / Bottom&lt;/strong&gt; as needed).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The text shifts vertically inside each cell to the selected position.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;toolbar-v-align.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;method-b-format-cells-dialog-full-control&#34;&gt;Method B: Format Cells dialog (full control)&lt;/h3&gt;
&lt;h4 id=&#34;step-by-step-instructions-1&#34;&gt;Step-by-Step Instructions&lt;/h4&gt;
&lt;h4 id=&#34;step-1-select-the-cells-1&#34;&gt;Step 1: Select the cells&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click and drag to highlight the range you want to format.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The cells are surrounded by a blue outline.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;select-cells.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-2-open-the-format-cells-dialog&#34;&gt;Step 2: Open the Format Cells dialog&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Right‑click the selection and choose &lt;strong&gt;Format Cells…&lt;/strong&gt; from the context menu, or press &lt;strong&gt;Ctrl + 1&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: A modal window titled &lt;strong&gt;Format Cells&lt;/strong&gt; with several tabs.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;format-cells-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-3-switch-to-the-alignment-tab&#34;&gt;Step 3: Switch to the Alignment tab&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;Alignment&lt;/strong&gt; tab at the top of the dialog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: Sections for &lt;strong&gt;Horizontal&lt;/strong&gt;, &lt;strong&gt;Vertical&lt;/strong&gt;, and additional text‑control options.&lt;/p&gt;
&lt;h4 id=&#34;step-4-set-horizontal-alignment&#34;&gt;Step 4: Set horizontal alignment&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: In the &lt;strong&gt;Horizontal:&lt;/strong&gt; dropdown, pick &lt;strong&gt;Center&lt;/strong&gt; (or &lt;strong&gt;Left / Right / General&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The dropdown shows the chosen value.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;dropdown-h-align.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-5-set-vertical-alignment&#34;&gt;Step 5: Set vertical alignment&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: In the &lt;strong&gt;Vertical:&lt;/strong&gt; dropdown, pick &lt;strong&gt;Middle&lt;/strong&gt; (or &lt;strong&gt;Top / Bottom&lt;/strong&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The dropdown updates to the selected vertical option.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;dropdown-v-align.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;step-6-apply-the-changes&#34;&gt;Step 6: Apply the changes&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;OK&lt;/strong&gt; button at the bottom of the dialog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The selected cells instantly reflect the new alignment settings.&lt;/p&gt;
&lt;h3 id=&#34;-tips--shortcuts&#34;&gt;💡 Tips &amp;amp; Shortcuts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quick tip&lt;/strong&gt;: Press &lt;strong&gt;Alt + H&lt;/strong&gt; then &lt;strong&gt;A&lt;/strong&gt; to jump straight to the Horizontal Align toolbar dropdown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick tip&lt;/strong&gt;: Press &lt;strong&gt;Alt + H&lt;/strong&gt; then &lt;strong&gt;V&lt;/strong&gt; for the Vertical Align toolbar dropdown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out&lt;/strong&gt;: Alignment changes only affect the view; they do not alter the underlying data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro move&lt;/strong&gt;: Use the Format Cells dialog if you also need to adjust text rotation or wrap settings at the same time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;for-developers-javascript-api&#34;&gt;For Developers: JavaScript API&lt;/h2&gt;
&lt;p&gt;You can change alignment programmatically with GridJs’s public API.&lt;/p&gt;
&lt;h3 id=&#34;quick-example&#34;&gt;Quick Example&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// xs is the GridJs instance already attached to the sheet
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Align the currently selected range to center horizontally and middle vertically
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;// Horizontal alignment
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// the range that is currently selected
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;align&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                        &lt;span class=&#34;c1&#34;&gt;// property name for horizontal alignment
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;center&amp;#39;&lt;/span&gt;                        &lt;span class=&#34;c1&#34;&gt;// possible values: &amp;#39;left&amp;#39;, &amp;#39;center&amp;#39;, &amp;#39;right&amp;#39;
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Vertical alignment
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
  &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
  &lt;span class=&#34;s1&#34;&gt;&amp;#39;valign&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;                       &lt;span class=&#34;c1&#34;&gt;// property name for vertical alignment
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;middle&amp;#39;&lt;/span&gt;                        &lt;span class=&#34;c1&#34;&gt;// possible values: &amp;#39;top&amp;#39;, &amp;#39;middle&amp;#39;, &amp;#39;bottom&amp;#39;
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;api-reference&#34;&gt;API Reference&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;setRangeAttr(range, property, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range: object&lt;/code&gt; – the cell range (e.g., &lt;code&gt;xs.sheet.data.selector.range&lt;/code&gt;)&lt;br&gt;&lt;code&gt;property: string&lt;/code&gt; – &lt;code&gt;&#39;align&#39;&lt;/code&gt; or &lt;code&gt;&#39;valign&#39;&lt;/code&gt;&lt;br&gt;&lt;code&gt;value: string&lt;/code&gt; – alignment value (&lt;code&gt;&#39;left&#39;&lt;/code&gt;, &lt;code&gt;&#39;center&#39;&lt;/code&gt;, &lt;code&gt;&#39;right&#39;&lt;/code&gt;, &lt;code&gt;&#39;top&#39;&lt;/code&gt;, &lt;code&gt;&#39;middle&#39;&lt;/code&gt;, &lt;code&gt;&#39;bottom&#39;&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Sets the specified alignment attribute for the given cell range.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.selector.range&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;none&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Returns the currently selected cell range object used in &lt;code&gt;setRangeAttr&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: The API works on any selected range, not just a single cell.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q: My text isn’t aligning the way I selected. Why?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Make sure the cells are still selected when you click the alignment button or OK in the dialog. Changing the selection clears the pending alignment command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Can I align text diagonally or at a custom angle?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: The built‑in alignment options cover only horizontal (left/center/right) and vertical (top/middle/bottom). Diagonal or custom angles are not supported in this version.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Will alignment affect printing?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Yes. Alignment settings are preserved in the printed output, just like they appear on the screen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: I want to align a whole column quickly. Is there a shortcut?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Click the column header to select the entire column, then use the toolbar alignment buttons or the Format Cells dialog as described above.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: How do I reset a cell to the default alignment?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Open the Format Cells dialog → Alignment tab → set &lt;strong&gt;Horizontal&lt;/strong&gt; to &lt;strong&gt;General&lt;/strong&gt; and &lt;strong&gt;Vertical&lt;/strong&gt; to &lt;strong&gt;Bottom&lt;/strong&gt;, then click &lt;strong&gt;OK&lt;/strong&gt;. Or programmatically set &lt;code&gt;&#39;align&#39;&lt;/code&gt; to &lt;code&gt;&#39;general&#39;&lt;/code&gt; and &lt;code&gt;&#39;valign&#39;&lt;/code&gt; to &lt;code&gt;&#39;bottom&#39;&lt;/code&gt;.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to Merge and Unmerge</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-merge-and-unmerge/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-merge-and-unmerge/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

&lt;strong&gt;Cell Merge and Unmerge&lt;/strong&gt; lets you combine a rectangular range of cells into a single larger cell or split a previously merged cell back into its original grid. This is useful for titles, section headers, summary rows, or any layout where a value should span multiple columns or rows.
&lt;/div&gt;

&lt;h2 id=&#34;1-feature-overview&#34;&gt;1. Feature Overview&lt;/h2&gt;
&lt;p&gt;Merging creates one visual cell that spans several columns and/or rows while preserving the value and style of the top‑left cell in the selected range. Un‑merging restores the original individual cells, keeping the data that was stored in the top‑left cell.&lt;/p&gt;
&lt;h3 id=&#34;when-to-use&#34;&gt;When to use&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add a heading that stretches across the worksheet width.&lt;/li&gt;
&lt;li&gt;Combine cells for a total row that should be visually distinct.&lt;/li&gt;
&lt;li&gt;Split a merged area when the layout needs to change.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;2-clientside-usage&#34;&gt;2. Client‑side Usage&lt;/h2&gt;
&lt;h3 id=&#34;21-ui-operations&#34;&gt;2.1 UI Operations&lt;/h3&gt;
&lt;p&gt;Follow these steps directly in the GridJs spreadsheet UI.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select a rectangular range&lt;/strong&gt; – click the first cell, drag to the last cell.&lt;br&gt;
&lt;img src=&#34;select-range.gif&#34; alt=&#34;selection of cell range to merge&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Click &amp;ldquo;Merge&amp;rdquo; icon in the toolbar&lt;/strong&gt; – when the icon is clicked, it toggles to &lt;strong&gt;&amp;ldquo;Un‑merge&amp;rdquo;&lt;/strong&gt; if the selection is already merged.&lt;br&gt;
&lt;img src=&#34;set-merge.gif&#34; alt=&#34;use merge icon to set merge&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Click the &amp;ldquo;Merge&amp;rdquo; icon to un‑merge&lt;/strong&gt; – if the selected range is merged, clicking the icon again will restore the individual cells.&lt;br&gt;
&lt;img src=&#34;set-unmerge.gif&#34; alt=&#34;use merge icon to unmerge&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The spreadsheet automatically redraws the affected area, showing a single merged cell or the restored individual cells.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;22-javascript-api&#34;&gt;2.2 JavaScript API&lt;/h3&gt;
&lt;p&gt;Below is a complete GridJs initialization followed by the exact calls you need to merge or unmerge cells programmatically.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-javascript&#34; data-lang=&#34;javascript&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// ------------------------------------------------------------
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 1️⃣ Initialize the x‑spreadsheet instance
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// ------------------------------------------------------------
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;

&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mergeRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;// Apply the merge
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;merge&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;// Refresh the grid to show changes
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;unmergeRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;merge&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
    &lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// ------------------------------------------------------------
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Example usage
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// ------------------------------------------------------------
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Merge cells A1:B2
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mergeRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sri&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sci&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;eri&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;eci&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;// Later, un‑merge the same area
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;unmergeRange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sri&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sci&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;eri&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;eci&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;api-reference&#34;&gt;API Reference&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, attr, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modifies an attribute of the currently selected range. For merging, set &lt;code&gt;attr&lt;/code&gt; to &lt;code&gt;&#39;merge&#39;&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; (merge) or &lt;code&gt;false&lt;/code&gt; (un‑merge).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt; – &lt;strong&gt;object&lt;/strong&gt; (contains &lt;code&gt;sri&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;eri&lt;/code&gt;, &lt;code&gt;eci&lt;/code&gt; for start/end row and column).&lt;br&gt;&lt;code&gt;attr&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (&lt;code&gt;&#39;merge&#39;&lt;/code&gt; only).&lt;br&gt;&lt;code&gt;value&lt;/code&gt; – &lt;strong&gt;boolean&lt;/strong&gt; (&lt;code&gt;true&lt;/code&gt; to merge, &lt;code&gt;false&lt;/code&gt; to un‑merge).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt; (grid refreshes automatically).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt; – The merge icon is toggleable. If the selected range is already merged, clicking it will un‑merge the cells.&lt;br&gt;
&lt;strong&gt;For live demos and more examples, visit:&lt;/strong&gt; &lt;a href=&#34;https://github.com/aspose-cells/Aspose.Cells.Grid-for-Java/tree/master/Examples.GridJs&#34;&gt;https://github.com/aspose-cells/Aspose.Cells.Grid-for-Java/tree/master/Examples.GridJs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

      </description>
    </item>
    
    <item>
      <title>Java: How to Print</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-print/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/how-to-print/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

GridJs provides a built-in &lt;strong&gt;Print Settings&lt;/strong&gt; modal that allows users to customize the layout and appearance of the worksheet before sending it to the printer or saving it as a PDF. This ensures that large datasets are presented readably on standard paper sizes.
&lt;/div&gt;

&lt;h2 id=&#34;introduction&#34;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Spreadsheets often contain data that exceeds the dimensions of a standard sheet of paper. To produce a professional‑looking document, it is essential to control how the grid data flows across pages, how it is scaled, and what elements are included.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Print Settings&lt;/strong&gt; feature allows you to configure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Page Orientation:&lt;/strong&gt; Switch between Portrait and Landscape.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paper Size:&lt;/strong&gt; Support for standard ISO sizes (A3, A4, etc.).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scaling:&lt;/strong&gt; Options to fit content to a specific page count.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Page Order:&lt;/strong&gt; Control the sequence in which pages are numbered and printed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Visibility:&lt;/strong&gt; Toggle images and shapes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;accessing-print-settings&#34;&gt;&lt;strong&gt;Accessing Print Settings&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;To access the print settings:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click the &lt;strong&gt;Print&lt;/strong&gt; icon on the toolbar (or select Print from the menu).&lt;br&gt;
&lt;img src=&#34;print_icon.png&#34; alt=&#34;Print Icon&#34;&gt;&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Settings&lt;/strong&gt; modal window will appear, presenting various configuration options.&lt;br&gt;
&lt;img src=&#34;print_setting.png&#34; alt=&#34;Print Settings Modal&#34;&gt;&lt;/li&gt;
&lt;li&gt;After adjusting settings, click &lt;strong&gt;OK&lt;/strong&gt; to generate a preview and open the system print dialog.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;configuration-options&#34;&gt;&lt;strong&gt;Configuration Options&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;ModalPrint&lt;/code&gt; class provides the following configurable parameters. Below is a detailed explanation of each option:&lt;/p&gt;
&lt;h3 id=&#34;1-page-orientation&#34;&gt;&lt;strong&gt;1. Page Orientation&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Determines the layout direction of the paper.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Landscape:&lt;/strong&gt; (Default) Orients the paper horizontally. Best for spreadsheets with many columns.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portrait:&lt;/strong&gt; Orients the paper vertically. Best for spreadsheets with many rows but fewer columns.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-paper-size&#34;&gt;&lt;strong&gt;2. Paper Size&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Select the physical paper size for the output. The available options correspond to standard ISO paper sizes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A4:&lt;/strong&gt; (Default) The standard paper size used worldwide (210 × 297 mm).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A3:&lt;/strong&gt; Larger size, suitable for extensive tables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A5:&lt;/strong&gt; Smaller size.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B4, B5:&lt;/strong&gt; Additional standard sizes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-scale&#34;&gt;&lt;strong&gt;3. Scale&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Scaling is critical for fitting spreadsheet data onto physical pages.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No Scaling:&lt;/strong&gt; (Default) Prints the data at 100 % size. Data that doesn&amp;rsquo;t fit will spill over to subsequent pages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fit Sheet on One Page:&lt;/strong&gt; Shrinks the entire worksheet (width and height) to fit on a single sheet of paper. &lt;em&gt;Note: For very large datasets, this may make the text unreadably small.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fit All Columns on One Page:&lt;/strong&gt; Scales the width of the data to fit the page width. Rows will spill over to subsequent pages as needed. This is the most common setting for wide tables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fit All Rows on One Page:&lt;/strong&gt; Scales the height of the data to fit the page height. Columns will spill over to horizontal pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-page-order&#34;&gt;&lt;strong&gt;4. Page Order&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;When a worksheet is too large to fit on a single page (and scaling is not set to fit on one page), it is split into multiple pages. The &lt;strong&gt;Order&lt;/strong&gt; setting determines the sequence in which these pages are printed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Down, then over:&lt;/strong&gt; (Default) Prints pages from top to bottom first, then moves to the right to print the remaining columns (N‑pattern).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Over, then down:&lt;/strong&gt; Prints pages from left to right first, then moves down to print the remaining rows (Z‑pattern).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;5-imagesshapes&#34;&gt;&lt;strong&gt;5. Images/Shapes&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Controls the visibility of floating objects like charts, inserted images, and shapes during printing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Show:&lt;/strong&gt; (Default) All images and shapes are included in the print output.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hide:&lt;/strong&gt; Images and shapes are excluded, printing only the cell data and grid styles. This is useful for saving ink or producing data‑only reports.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;&lt;strong&gt;How it Works&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;When the user confirms the settings in the &lt;code&gt;ModalPrint&lt;/code&gt; dialog, the following internal process occurs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Configuration Capture:&lt;/strong&gt; The selected options (Orientation, Size, Scale, Order, ImageShow) are captured from the UI form fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview Generation:&lt;/strong&gt; The application calculates the page breaks based on the selected &lt;strong&gt;Paper Size&lt;/strong&gt; and &lt;strong&gt;Scale&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rendering:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;If &lt;strong&gt;Scale&lt;/strong&gt; is set to &lt;code&gt;fitsheet&lt;/code&gt;, &lt;code&gt;fitcolumns&lt;/code&gt;, or &lt;code&gt;fitrows&lt;/code&gt;, a transformation matrix is applied to the canvas to reduce the content size.&lt;/li&gt;
&lt;li&gt;If &lt;strong&gt;Images/Shapes&lt;/strong&gt; is set to &lt;code&gt;hide&lt;/code&gt;, the rendering loop skips drawing the &lt;code&gt;fabObjects&lt;/code&gt; (fabric.js objects) on the canvas.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Print:&lt;/strong&gt; The component triggers the browser&amp;rsquo;s native &lt;code&gt;window.print()&lt;/code&gt; method or opens a new window with the generated canvas image, allowing the user to select their physical printer or “Save as PDF”.&lt;/li&gt;
&lt;/ol&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Cell Background Color Settings</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/cell-background-color-settings/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/cell-background-color-settings/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

The GridJS component applies background‑color changes instantly on the client. No additional confirmation step is required unless you open the &lt;strong&gt;More Number Formats&lt;/strong&gt; modal, where you can preview the fill before committing.
&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Cell background colour (fill) enhances readability and visual grouping in a spreadsheet. GridJS provides several entry points—including a toolbar split‑button, context‑menu items, a dedicated modal, and a status‑bar indicator—to let users pick a colour or pattern and see the result immediately.&lt;/p&gt;
&lt;h2 id=&#34;ui-operations&#34;&gt;UI Operations&lt;/h2&gt;
&lt;h3 id=&#34;1-toolbar--fill-color-button&#34;&gt;1. Toolbar – Fill Color button&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;How to start&lt;/strong&gt; – Click the &lt;strong&gt;Background Color (bgcolor)&lt;/strong&gt; icon on the toolbar. The icon’s bottom border always shows the currently active fill colour (default &lt;code&gt;#ffff00&lt;/code&gt; yellow).
&lt;img src=&#34;fill_color_toolbar_icon.png&#34; alt=&#34;&#34;&gt;
&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click the icon to expand the split‑button dropdown anchored to the toolbar.&lt;/li&gt;
&lt;li&gt;Choose a colour swatch (theme palette, recent custom colour, or &lt;strong&gt;No Color&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;The selected cells are filled instantly and the icon border updates to the new colour.
&lt;img src=&#34;fill_color_toolbar_dropdown.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;2-table-selection-area&#34;&gt;2. Table selection area&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;How to start&lt;/strong&gt; – Select a cell or drag to highlight a range (merged cells count as a single unit).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click or drag to create the selection rectangle.&lt;br&gt;
&lt;img src=&#34;table-select_cells.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;With the range selected, press the &lt;strong&gt;Background Color&lt;/strong&gt; toolbar button again (or use the shortcut).&lt;/li&gt;
&lt;li&gt;Pick a colour from the same palette; the entire selection, including any merged region, receives the colour immediately.&lt;br&gt;
&lt;img src=&#34;table-apply_background.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;3-modal--more-number-formats--fill-tab&#34;&gt;3. Modal – “More Number Formats” → Fill tab&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;How to start&lt;/strong&gt; –&lt;br&gt;
a right‑click context menu
&lt;img src=&#34;contextmenu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;choose &lt;strong&gt;Formats Cells&lt;/strong&gt; and then the &lt;strong&gt;Fill&lt;/strong&gt; tab.
&lt;img src=&#34;modal_open_fillTab.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steps&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The modal displays two colour pickers: &lt;strong&gt;Background Color&lt;/strong&gt; and, when a pattern other than &lt;em&gt;Solid&lt;/em&gt; is chosen, &lt;strong&gt;Pattern Color&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select the desired background colour (and pattern colour if applicable).&lt;/li&gt;
&lt;li&gt;A live preview canvas updates in real time to show the combined effect.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt; (or &lt;strong&gt;Apply&lt;/strong&gt;) to commit the fill style to the currently selected cells and close the modal.
&lt;img src=&#34;modal_fillTab_preview.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;5-other-entry-points&#34;&gt;5. Other entry points&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Path to colour picker&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Menubar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Format → Fill → Background Color&lt;/em&gt; (opens the same dropdown as the toolbar)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context menu&lt;/strong&gt; (right‑click on a cell)&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Fill → Background Color&lt;/em&gt; (shows the palette at the cursor)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Toggle&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No dedicated toggle; colour changes are applied immediately upon selection.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Programmatic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;See the JavaScript API section.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;options--alerts&#34;&gt;Options &amp;amp; Alerts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Immediate application&lt;/strong&gt; – All UI actions (toolbar, modal &lt;strong&gt;OK&lt;/strong&gt;, status‑bar click) update the cell style instantly on the client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pattern fills&lt;/strong&gt; – When a pattern other than &lt;em&gt;Solid&lt;/em&gt; is chosen in the modal, you can also set a &lt;strong&gt;Pattern Color&lt;/strong&gt; to define the secondary colour of the fill.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No colour&lt;/strong&gt; – Selecting &lt;strong&gt;No Color&lt;/strong&gt; removes any existing background fill from the target cells.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;background colour changes can be achieved by setting the &lt;code&gt;bgcolor&lt;/code&gt; attribute on a cell or range using the &lt;code&gt;setRangeAttr&lt;/code&gt; method of the &lt;code&gt;data&lt;/code&gt; object. After updating the attribute, call the &lt;code&gt;render&lt;/code&gt; method to apply the changes visually.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Assume xs is your x_spreadsheet instance
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Define the cell range (row/col indices)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Set the background color of a specific cell or range
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bgcolor&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;// Render the changes to update the UI
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, attr, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modifies an attribute of the currently selected range. For background color, set &lt;code&gt;attr&lt;/code&gt; to &lt;code&gt;&#39;bgcolor&#39;&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; to &lt;code&gt;red&lt;/code&gt; (color name) or &lt;code&gt;#FF0000&lt;/code&gt; (hex code).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt; – &lt;strong&gt;object&lt;/strong&gt; (contains &lt;code&gt;sri&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;eri&lt;/code&gt;, &lt;code&gt;eci&lt;/code&gt; for start/end row/column).&lt;br&gt;&lt;code&gt;attr&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (&lt;code&gt;&#39;bgcolor&#39;&lt;/code&gt; only).&lt;br&gt;&lt;code&gt;value&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (color name or hex code).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt; (grid refreshes automatically).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.table.render()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the table UI to reflect any data or style changes.&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;tips--best-practices&#34;&gt;Tips &amp;amp; Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consistent palette&lt;/strong&gt; – Use the toolbar colour picker for quick, consistent fills across the sheet; the modal is ideal when you need pattern fills or want to preview the effect first.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Batch updates&lt;/strong&gt; – When applying the same colour to many separate ranges, select each range and use the toolbar picker; the component batches style updates to reduce rendering overhead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt; – The &lt;code&gt;getStylePreview&lt;/code&gt; call involves a server round‑trip. Use it sparingly (e.g., only when a modal preview is required) to avoid unnecessary latency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Merged cells&lt;/strong&gt; – Selecting any part of a merged region will apply the fill to the whole merged block. Ensure the intended area is selected before picking a colour.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Change Font Family</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/change-font-family/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/change-font-family/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

The GridJs component ships with a &lt;strong&gt;Font&lt;/strong&gt; dropdown in the default toolbar. Selecting a font from this list updates the &lt;strong&gt;font‑family&lt;/strong&gt; of the currently selected cells in the browser.
&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Changing the font family improves readability and lets you align the spreadsheet’s visual style with your application’s design language. This guide covers both the interactive UI workflow and the JavaScript API that can be used to set fonts from code.&lt;/p&gt;
&lt;h2 id=&#34;ui-operations&#34;&gt;UI Operations&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Open the Toolbar&lt;/strong&gt; – The toolbar is displayed at the top of the spreadsheet by default.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Locate the Font dropdown&lt;/strong&gt; – It is shows the current font name.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Click the dropdown&lt;/strong&gt; to reveal the list of available fonts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select a font&lt;/strong&gt; from the list. The selected font is applied immediately to any cells that are highlighted in the grid.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify the change&lt;/strong&gt; – The cells should now display text in the chosen font family.
&lt;img src=&#34;toolbar-font-family.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;menubar-font-family.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;options--alerts&#34;&gt;Options &amp;amp; Alerts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supported Fonts&lt;/strong&gt; – Only fonts recognized by the browser’s CSS engine are listed. If a desired font does not appear, ensure it is loaded on the page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple Selection&lt;/strong&gt; – When multiple cells are selected, the dropdown shows the font of the first cell in the range. Changing the font updates all selected cells.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resetting Font&lt;/strong&gt; – Choose the default (usually “Arial”) to revert cells to the component’s base font.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;text font family changes can be achieved by setting the &lt;code&gt;font-name&lt;/code&gt; attribute on a cell or range using the &lt;code&gt;setRangeAttr&lt;/code&gt; method of the &lt;code&gt;data&lt;/code&gt; object. After updating the attribute, call the &lt;code&gt;render&lt;/code&gt; method to apply the changes visually.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Define the cell range (row/col indices)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Set the text font name of a specific cell or range
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;font-name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Arial&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;// Render the changes to update the UI
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, attr, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modifies an attribute of the currently selected range. For font name, set &lt;code&gt;attr&lt;/code&gt; to &lt;code&gt;&#39;font-name&#39;&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; to the desired font family (e.g., &lt;code&gt;&amp;quot;Arial&amp;quot;&lt;/code&gt;).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt; – &lt;strong&gt;object&lt;/strong&gt; (contains &lt;code&gt;sri&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;eri&lt;/code&gt;, &lt;code&gt;eci&lt;/code&gt; for start/end row/column).&lt;br&gt;&lt;code&gt;attr&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (&lt;code&gt;&#39;font-name&#39;&lt;/code&gt; only).&lt;br&gt;&lt;code&gt;value&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (font family name).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt; (grid refreshes automatically).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.table.render()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the table UI to reflect any data or style changes.&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;internal-logic&#34;&gt;Internal Logic&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The method updates the cell’s data proxy, which subsequently triggers a re‑render of the cell with the new CSS &lt;code&gt;font-family&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If the provided font name is unavailable, the browser falls back to its default font.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tips--best-practices&#34;&gt;Tips &amp;amp; Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Batch Styling&lt;/strong&gt; – For large ranges, loop over cells and call &lt;code&gt;setCellStyle&lt;/code&gt; once per cell, or extend the API with a helper that applies the same style to a range.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refresh After Styling&lt;/strong&gt; – In rare cases where the UI does not immediately reflect the change, call &lt;code&gt;render()&lt;/code&gt; to force a redraw.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt; – Keep the font list in sync with your design system to avoid mixing unsupported fonts.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Java: font bold setting</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/font-bold-setting/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/font-bold-setting/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

The &lt;strong&gt;Bold&lt;/strong&gt; button toggles the &lt;code&gt;font.bold&lt;/code&gt; attribute of the currently selected cell(s). It is accessible via the toolbar, menubar, context‑menu, status bar and the &lt;strong&gt;Ctrl + B&lt;/strong&gt; keyboard shortcut. All UI elements stay synchronized automatically.
&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Bold formatting makes the text in a cell appear thicker. In GridJs the bold state is represented by the &lt;code&gt;font.bold&lt;/code&gt; property of a cell’s style. Users can toggle this property through several entry points; developers can also control it programmatically via the public JavaScript API.&lt;/p&gt;
&lt;h2 id=&#34;ui-operations&#34;&gt;UI Operations&lt;/h2&gt;
&lt;h3 id=&#34;toolbar&#34;&gt;Toolbar&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Hover over the &lt;strong&gt;B&lt;/strong&gt; icon on the toolbar. A tooltip &lt;strong&gt;Bold&lt;/strong&gt; appears.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;toolbar%E2%80%94bold-icon.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Click the &lt;strong&gt;B&lt;/strong&gt; icon (or press &lt;strong&gt;Ctrl + B&lt;/strong&gt;) to toggle bold on the selected cell(s).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;toolbar-bold-click.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;The button shows a pressed state while bold is active and returns to normal when it is not.&lt;/li&gt;
&lt;li&gt;Selecting a different cell or range automatically updates the button’s appearance to match the cell’s &lt;code&gt;font.bold&lt;/code&gt; value.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;menubar&#34;&gt;Menubar&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;Format&lt;/strong&gt; → &lt;strong&gt;Text&lt;/strong&gt; → &lt;strong&gt;Font Bold&lt;/strong&gt; (or use &lt;strong&gt;Ctrl + B&lt;/strong&gt;).&lt;br&gt;
&lt;img src=&#34;menubar-format-text.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;The same toggle logic runs as the toolbar button, updating the cell style and the toolbar’s bold button state.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;font colour changes can be achieved by setting the &lt;code&gt;font-bold&lt;/code&gt; attribute on a cell or range using the &lt;code&gt;setRangeAttr&lt;/code&gt; method of the &lt;code&gt;data&lt;/code&gt; object. After updating the attribute, call the &lt;code&gt;render&lt;/code&gt; method to apply the changes visually.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Assume xs is your x_spreadsheet instance
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Define the cell range (row/col indices)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Set the font color of a specific cell or range
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;font-bold&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;// Render the changes to update the UI
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, attr, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modifies an attribute of the currently selected range. For font bold, set &lt;code&gt;attr&lt;/code&gt; to &lt;code&gt;&#39;font-bold&#39;&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt; – &lt;strong&gt;object&lt;/strong&gt; (contains &lt;code&gt;sri&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;eri&lt;/code&gt;, &lt;code&gt;eci&lt;/code&gt; for start/end row/column).&lt;br&gt;&lt;code&gt;attr&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (&lt;code&gt;&#39;font-bold&#39;&lt;/code&gt; only).&lt;br&gt;&lt;code&gt;value&lt;/code&gt; – &lt;strong&gt;boolean&lt;/strong&gt; (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt; (grid refreshes automatically).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.table.render()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the table UI to reflect any data or style changes.&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Set Font Size</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/set-font-size/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/set-font-size/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

The &lt;strong&gt;Set Font Size&lt;/strong&gt; feature lets end‑users change the text size of the selected cells directly in the browser. The component’s toolbar and menubar expose a ready‑made dropdown that lists common point sizes (e.g., 8 pt, 9 pt, 10 pt …). Selecting a size instantly updates the style of the active cell range.
&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Changing font size is a core formatting operation. GridJs provides a &lt;strong&gt;Font Size&lt;/strong&gt; dropdown in both the &lt;strong&gt;Toolbar&lt;/strong&gt; (quick access) and the &lt;strong&gt;Text&lt;/strong&gt; menu of the &lt;strong&gt;Menubar&lt;/strong&gt; (menu‑driven access). The UI reflects the current cell’s font size, so the dropdown title always shows the active size.&lt;/p&gt;
&lt;h2 id=&#34;ui-operations&#34;&gt;UI Operations&lt;/h2&gt;
&lt;h3 id=&#34;using-the-toolbar&#34;&gt;Using the Toolbar&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Locate the &lt;strong&gt;Font Size&lt;/strong&gt; dropdown in the toolbar – it displays the current size (e.g., &lt;em&gt;11 pt&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;Click the dropdown arrow to reveal the list of predefined sizes.&lt;/li&gt;
&lt;li&gt;Click the desired size (e.g., &lt;em&gt;14 pt&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;The selected size is applied immediately to the currently selected cell or range, and the dropdown title updates to the new size.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;toolbar-font-size.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;using-the-menubar&#34;&gt;Using the Menubar&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;Text&lt;/strong&gt; menu on the menubar.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Font Size&lt;/strong&gt; from the submenu – this opens the same size list as the toolbar dropdown.&lt;/li&gt;
&lt;li&gt;Pick the required size.&lt;/li&gt;
&lt;li&gt;The change is applied instantly, and the menubar entry shows the new size.
&lt;img src=&#34;menubar-font-size.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;synchronisation-with-cell-selection&#34;&gt;Synchronisation with Cell Selection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;When you move the selection to a different cell, the dropdown’s title automatically changes to reflect that cell’s font size.&lt;/li&gt;
&lt;li&gt;If the selected range contains mixed sizes, the title shows a placeholder (e.g., &lt;em&gt;Multiple&lt;/em&gt;), indicating that applying a new size will override the existing values.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;text font changes can be achieved by setting the &lt;code&gt;font-size&lt;/code&gt; attribute on a cell or range using the &lt;code&gt;setRangeAttr&lt;/code&gt; method of the &lt;code&gt;data&lt;/code&gt; object. After updating the attribute, call the &lt;code&gt;render&lt;/code&gt; method to apply the changes visually.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Define the cell range (row/col indices)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Set the text font size of a specific cell or range
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;font-size&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;14&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;// Render the changes to update the UI
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, attr, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modifies an attribute of the currently selected range. For font size, set &lt;code&gt;attr&lt;/code&gt; to &lt;code&gt;&#39;font-size&#39;&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; to the desired size in points (e.g., &lt;code&gt;&amp;quot;14&amp;quot;&lt;/code&gt;).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt; – &lt;strong&gt;object&lt;/strong&gt; (contains &lt;code&gt;sri&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;eri&lt;/code&gt;, &lt;code&gt;eci&lt;/code&gt; for start/end row/column).&lt;br&gt;&lt;code&gt;attr&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (&lt;code&gt;&#39;font-size&#39;&lt;/code&gt; only).&lt;br&gt;&lt;code&gt;value&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (size in points).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt; (grid refreshes automatically).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.table.render()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the table UI to reflect any data or style changes.&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;tips&#34;&gt;Tips&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consistent Formatting&lt;/strong&gt; – Choose sizes from the dropdown to keep formatting uniform across the workbook.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Batch Apply&lt;/strong&gt; – Select multiple cells before choosing a size to apply the same font size to the entire range in one step.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Responsive Rendering&lt;/strong&gt; – The component automatically converts the selected point size to pixels, ensuring that the visual appearance matches the printed output.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Text Rotate Setting</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/text-rotate-setting/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/text-rotate-setting/</guid>
      <description>
        
        
        &lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Aspose.Cells GridJs provides a &lt;strong&gt;Text Rotate&lt;/strong&gt; button on the toolbar. Through its dropdown you can choose common rotation styles or specify a custom angle. The chosen rotation is applied immediately to the currently selected cell or range.&lt;/p&gt;
&lt;h2 id=&#34;ui-operations&#34;&gt;UI Operations&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open the rotation menu&lt;/strong&gt;&lt;br&gt;
Click the &lt;strong&gt;Text Rotate&lt;/strong&gt; button on the toolbar. The dropdown opens, showing a list of rotation options.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Select a predefined rotation&lt;/strong&gt;&lt;br&gt;
Choose one of the following options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vertical Text&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Angle‑Clockwise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Angle‑Counter‑Clockwise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rotate Text Up&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rotate Text Down&lt;/strong&gt;&lt;br&gt;
The dropdown title updates to reflect the selection and then closes. The rotation is applied to the selected cells.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;toolbar-text-rotate-dropdown.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apply a custom angle&lt;/strong&gt;&lt;br&gt;
Choose &lt;strong&gt;Other Angle&lt;/strong&gt;. A modal dialog appears where you can type any angle between &lt;strong&gt;‑90° and 90°&lt;/strong&gt;. Click &lt;strong&gt;OK&lt;/strong&gt; to apply or &lt;strong&gt;Cancel&lt;/strong&gt; to dismiss.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;format-cell-alignment.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;options--alerts&#34;&gt;Options &amp;amp; Alerts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Predefined angles&lt;/strong&gt; give quick access to the most common orientations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom angle&lt;/strong&gt; lets you fine‑tune the rotation; entering a value outside the ‑90 → 90 range will be rejected by the UI.&lt;/li&gt;
&lt;li&gt;The selected rotation remains active in the toolbar dropdown, so subsequent cell selections will use the same orientation until you change it again.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;text rotation changes can be achieved by setting the &lt;code&gt;textRotate&lt;/code&gt; attribute on a cell or range using the &lt;code&gt;setRangeAttr&lt;/code&gt; method of the &lt;code&gt;data&lt;/code&gt; object. After updating the attribute, call the &lt;code&gt;render&lt;/code&gt; method to apply the changes visually.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Assume xs is your x_spreadsheet instance
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Define the cell range (row/col indices)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Set the text rotation of a specific cell or range
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;textRotate&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;45&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;// Render the changes to update the UI
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, attr, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modifies an attribute of the currently selected range. For text rotation, set &lt;code&gt;attr&lt;/code&gt; to &lt;code&gt;&#39;textRotate&#39;&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; to the desired angle in degrees (e.g., &lt;code&gt;&amp;quot;45&amp;quot;&lt;/code&gt;).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt; – &lt;strong&gt;object&lt;/strong&gt; (contains &lt;code&gt;sri&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;eri&lt;/code&gt;, &lt;code&gt;eci&lt;/code&gt; for start/end row/column).&lt;br&gt;&lt;code&gt;attr&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (&lt;code&gt;&#39;textRotate&#39;&lt;/code&gt; only).&lt;br&gt;&lt;code&gt;value&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (angle in degrees).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt; (grid refreshes automatically).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.table.render()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the table UI to reflect any data or style changes.&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;tips&#34;&gt;Tips&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Select cells first&lt;/strong&gt; – Rotation always applies to the active cell or range, so make your selection before opening the dropdown.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep the dropdown open&lt;/strong&gt; – After applying a rotation, the dropdown stays in the chosen state, allowing rapid changes across multiple selections.&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Font Color Settings</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/font-color-settings/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/font-color-settings/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

The GridJs spreadsheet component provides a &lt;strong&gt;Font Color&lt;/strong&gt; button on the toolbar that lets users apply preset or custom colours instantly to the selected cells. Changes are applied immediately without an extra “apply” step.
&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;Font colour determines the colour of the text displayed in a cell. GridJs implements this feature exclusively through a toolbar button with an attached colour‑picker dropdown. The button reflects the colour of the current selection, and the last used colour is remembered for quick re‑use.&lt;/p&gt;
&lt;h2 id=&#34;accessing-font-color&#34;&gt;Accessing Font Color&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Locate the toolbar&lt;/strong&gt; at the top of the spreadsheet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Find the Font‑Color button&lt;/strong&gt; – an &lt;strong&gt;A&lt;/strong&gt; character with a coloured bottom border indicating the active colour.&lt;br&gt;
&lt;em&gt;Hover the mouse to see the tooltip “Font Color”.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;ui-operations&#34;&gt;UI Operations&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Apply the last used colour&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select one or more cells.
&lt;img src=&#34;table_select_cells_with_content.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Click the coloured Font‑Color button.
&lt;img src=&#34;font_color_toolbar_icon.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;The stored colour is instantly written to the selected cell(s).
&lt;img src=&#34;table_fontcolor_applied.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Open the colour‑picker&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Click the small ▼ arrow next to the Font‑Color button.&lt;/li&gt;
&lt;li&gt;The colour‑palette dropdown appears below the button.
&lt;img src=&#34;font_color_toolbar_dropdown.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Choose a preset swatch&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the opened palette, click any colour swatch &lt;strong&gt;or&lt;/strong&gt; the &lt;strong&gt;Automatic&lt;/strong&gt; entry.&lt;/li&gt;
&lt;li&gt;The button’s border updates to the chosen hue.&lt;/li&gt;
&lt;li&gt;The colour is applied immediately to the current selection.&lt;/li&gt;
&lt;li&gt;The palette closes automatically.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;options--behaviour&#34;&gt;Options &amp;amp; Behaviour&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic&lt;/strong&gt; – restores the default colour (usually black) defined by the spreadsheet theme.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preset swatches&lt;/strong&gt; – a set of frequently used colours displayed as square tiles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Last used colour&lt;/strong&gt; – remembered across toolbar re‑renders; clicking the main button re‑applies this colour without opening the palette.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Immediate application&lt;/strong&gt; – no “OK” button is required; the colour is applied as soon as a swatch or custom colour is chosen.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;font colour changes can be achieved by setting the &lt;code&gt;color&lt;/code&gt; attribute on a cell or range using the &lt;code&gt;setRangeAttr&lt;/code&gt; method of the &lt;code&gt;data&lt;/code&gt; object. After updating the attribute, call the &lt;code&gt;render&lt;/code&gt; method to apply the changes visually.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Assume xs is your x_spreadsheet instance
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;x_spreadsheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#gridjs-demo-uid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eri&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;eci&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// Define the cell range (row/col indices)
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Set the font color of a specific cell or range
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;setRangeAttr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;color&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;// Render the changes to update the UI
&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;xs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sheet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.data.setRangeAttr(range, attr, value)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Modifies an attribute of the currently selected range. For font color, set &lt;code&gt;attr&lt;/code&gt; to &lt;code&gt;&#39;color&#39;&lt;/code&gt; and &lt;code&gt;value&lt;/code&gt; to &lt;code&gt;red&lt;/code&gt; (color name) or &lt;code&gt;#FF0000&lt;/code&gt; (hex code).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;range&lt;/code&gt; – &lt;strong&gt;object&lt;/strong&gt; (contains &lt;code&gt;sri&lt;/code&gt;, &lt;code&gt;sci&lt;/code&gt;, &lt;code&gt;eri&lt;/code&gt;, &lt;code&gt;eci&lt;/code&gt; for start/end row/column).&lt;br&gt;&lt;code&gt;attr&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (&lt;code&gt;&#39;color&#39;&lt;/code&gt; only).&lt;br&gt;&lt;code&gt;value&lt;/code&gt; – &lt;strong&gt;string&lt;/strong&gt; (color name or hex code).&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt; (grid refreshes automatically).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;xs.sheet.table.render()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Re-renders the table UI to reflect any data or style changes.&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;td&gt;&lt;code&gt;undefined&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;tips--best-practices&#34;&gt;Tips &amp;amp; Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quick reuse:&lt;/strong&gt; After selecting a custom colour, the button’s border updates, allowing you to re‑apply the same colour with a single click.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistent UI updates:&lt;/strong&gt; Switching cells automatically refreshes the toolbar state, ensuring you always see the correct current colour.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Protected ranges:&lt;/strong&gt; When the selection includes read‑only cells, the button is disabled – attempt to change colour only on writable cells.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Colour changes are sent to the back‑end as part of a generic &lt;em&gt;style‑update&lt;/em&gt; request, so they are lightweight and do not require a separate “apply” action.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessibility:&lt;/strong&gt; The tooltip “Font Color” remains visible even when the button is disabled, helping users understand the purpose of the control.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Insert Image</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/insert-image/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/insert-image/</guid>
      <description>
        
        
        &lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;You can place a picture inside any cell so that your data looks richer and easier to understand.&lt;br&gt;
For example, you can insert a product photo next to its price or add a company logo to the header row.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;h4 id=&#34;step-by-step-instructions&#34;&gt;Step-by-Step Instructions&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Step 1: Open the Insert Image menu&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Action&lt;/strong&gt;: Click the &lt;strong&gt;Insert Image&lt;/strong&gt; dropdown button (it looks like a small picture icon) on the &lt;strong&gt;Toolbar&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: A small menu appears with options such as &lt;strong&gt;Upload Image&lt;/strong&gt; and &lt;strong&gt;From URL&lt;/strong&gt;.&lt;br&gt;
&lt;img src=&#34;step1-toolbar.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step 2: Choose the source&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Action&lt;/strong&gt;: Select &lt;strong&gt;From Local&lt;/strong&gt; to pick a file from your computer &lt;strong&gt;or&lt;/strong&gt; select &lt;strong&gt;From URL&lt;/strong&gt; to paste a web address.&lt;br&gt;
&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For &lt;strong&gt;From Local&lt;/strong&gt; – a file‑picker dialog opens.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;From URL&lt;/strong&gt; – a small &lt;strong&gt;Insert Image URL&lt;/strong&gt; modal appears.&lt;br&gt;
&lt;img src=&#34;step2-source.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 3: Provide the image&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;From Local&lt;/strong&gt;: In the file‑picker, navigate to the picture file, click &lt;strong&gt;Open&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From URL&lt;/strong&gt;: In the modal, paste the image URL into the text field.&lt;br&gt;
&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The selected file name or the entered URL displayed in the dialog.&lt;br&gt;
&lt;img src=&#34;step3-provide.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Confirm insertion&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Action&lt;/strong&gt;: Click &lt;strong&gt;Insert&lt;/strong&gt; (or &lt;strong&gt;OK&lt;/strong&gt;) in the dialog.&lt;br&gt;
&lt;strong&gt;You&amp;rsquo;ll see&lt;/strong&gt;: The image appears inside the currently selected cell, scaled to fit the cell size.&lt;/p&gt;
&lt;h3 id=&#34;-tips--shortcuts&#34;&gt;💡 Tips &amp;amp; Shortcuts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quick tip&lt;/strong&gt;: After inserting, drag the cell’s corner to resize the image together with the cell.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch out&lt;/strong&gt;: Only direct image URLs (ending with &lt;code&gt;.png&lt;/code&gt;, &lt;code&gt;.jpg&lt;/code&gt;, &lt;code&gt;.gif&lt;/code&gt;, etc.) work in the &lt;strong&gt;From URL&lt;/strong&gt; option.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro move&lt;/strong&gt;: Use &lt;strong&gt;Upload Image&lt;/strong&gt; for high‑resolution pictures; the sheet automatically compresses them for faster loading.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Q: My picture looks stretched inside the cell.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: The image scales to fit the cell dimensions. Resize the cell (drag the column/row borders) to adjust the picture’s aspect ratio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Why does the image disappear after I save and reopen the file?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Images are stored as embedded data. Ensure you save the workbook using the &lt;strong&gt;Save&lt;/strong&gt; button; the picture will be retained.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Is there a limit to the image size?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: Images larger than 5 MB may be loading by long time. Resize large pictures before uploading.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Q: Where can I find the Insert Image button if I don’t see it?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;A&lt;/strong&gt;: It’s on the main &lt;strong&gt;Toolbar&lt;/strong&gt; near the &lt;strong&gt;Fill Color&lt;/strong&gt; and &lt;strong&gt;Border&lt;/strong&gt; icons. If the toolbar is collapsed, click the &lt;strong&gt;≫&lt;/strong&gt; arrow to expand it.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: Validation Input Settings</title>
      <link>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/validation-input-settings/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/aspose-cells-gridjs/user-guide/validation-input-settings/</guid>
      <description>
        
        
        

&lt;div class=&#34;alert alert-primary&#34; role=&#34;alert&#34;&gt;

Data validation helps ensure that users enter only allowed values in cells. GridJs provides a full‑featured modal dialog where you can define the rule type, specify the target range, and customize helpful messages and error alerts.
&lt;/div&gt;

&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Validation Input Settings&lt;/strong&gt; feature is accessed entirely in the browser. A dedicated &lt;strong&gt;Data Validation&lt;/strong&gt; button on the toolbar (or the context/menubar) opens a modal dialog with three tabs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Criteria&lt;/strong&gt; – Choose the rule type and define the allowed values/ranges.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Input Message&lt;/strong&gt; – Optional tip shown when the cell is selected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Error Alert&lt;/strong&gt; – Message displayed when a user tries to enter an invalid value.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All configuration is stored in the sheet model, and the component validates edits automatically.&lt;/p&gt;
&lt;h2 id=&#34;ui-operations&#34;&gt;UI Operations&lt;/h2&gt;
&lt;h3 id=&#34;opening-the-validation-dialog&#34;&gt;Opening the Validation Dialog&lt;/h3&gt;
&lt;p&gt;right‑click a cell (or a selected range) and choose &lt;strong&gt;Data Validation…&lt;/strong&gt;, or use &lt;strong&gt;Data → Validation&lt;/strong&gt; from the menubar.&lt;br&gt;
&lt;img src=&#34;contextmenu.png&#34; alt=&#34;&#34;&gt;
&lt;img src=&#34;menubar_data.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;criteria-tab&#34;&gt;Criteria Tab&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;In the &lt;strong&gt;Allow&lt;/strong&gt; dropdown, select the rule type (e.g., &lt;em&gt;Whole Number&lt;/em&gt;, &lt;em&gt;Decimal&lt;/em&gt;, &lt;em&gt;List&lt;/em&gt;, &lt;em&gt;Date&lt;/em&gt;, etc.).&lt;/li&gt;
&lt;li&gt;Based on the chosen type, the dialog shows the relevant fields:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Value1&lt;/strong&gt; and &lt;strong&gt;Value2&lt;/strong&gt; inputs (each ~70 % width).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operator&lt;/strong&gt; dropdown (e.g., &lt;em&gt;between&lt;/em&gt;, &lt;em&gt;equal to&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;List&lt;/strong&gt;, toggle &lt;strong&gt;In‑cell dropdown&lt;/strong&gt; to display a drop‑down list directly in the grid.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;To define the target cell range, click the range‑select icon next to &lt;strong&gt;Value2&lt;/strong&gt;.&lt;br&gt;
&lt;img src=&#34;modal_criteriaTab.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;rangeselection-page&#34;&gt;Range‑Selection Page&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;The spreadsheet UI (sheet tabs, footer, context menu) is temporarily hidden and the background is masked.&lt;/li&gt;
&lt;li&gt;The validation modal moves to the top‑right corner.&lt;/li&gt;
&lt;li&gt;An input box shows the current range (e.g., &lt;code&gt;A1:B10&lt;/code&gt;). Edit it manually or click cells in the grid to pick a range.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Return&lt;/strong&gt; (back‑arrow) button to confirm the selection or cancel to keep the previous range.&lt;br&gt;
&lt;img src=&#34;modal_rangeSelection.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;input-message-tab&#34;&gt;Input Message Tab&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Switch &lt;strong&gt;Show Input Message&lt;/strong&gt; on/off.&lt;/li&gt;
&lt;li&gt;Fill &lt;strong&gt;Title&lt;/strong&gt; and &lt;strong&gt;Message&lt;/strong&gt; fields with the text you want users to see when the cell becomes active.&lt;/li&gt;
&lt;li&gt;Choose an icon (Stop, Warning, Information) that appears alongside the message.&lt;br&gt;
&lt;img src=&#34;modal_inputMessage.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;error-alert-tab&#34;&gt;Error Alert Tab&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Switch &lt;strong&gt;Show Error Alert&lt;/strong&gt; on/off.&lt;/li&gt;
&lt;li&gt;Pick an &lt;strong&gt;Alert Style&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stop&lt;/strong&gt; – red “X” (blocks the entry).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Warning&lt;/strong&gt; – yellow “!” (allows entry after confirmation).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Information&lt;/strong&gt; – blue “i” (informational only).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Provide &lt;strong&gt;Title&lt;/strong&gt; and &lt;strong&gt;Error Text&lt;/strong&gt; that will be displayed when a user violates the rule.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Apply&lt;/strong&gt; to save the rule, or &lt;strong&gt;Cancel&lt;/strong&gt; to discard changes.&lt;br&gt;
&lt;img src=&#34;modal_errorAlert.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;saving--applying&#34;&gt;Saving &amp;amp; Applying&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Press &lt;strong&gt;Apply&lt;/strong&gt; on any tab to commit the validation rule to the selected range.&lt;/li&gt;
&lt;li&gt;The rule is now active; any subsequent edit to cells in that range triggers automatic validation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tips--best-practices&#34;&gt;Tips &amp;amp; Best Practices&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Choose the narrowest rule needed.&lt;/strong&gt; Using &lt;em&gt;Whole Number&lt;/em&gt; with a &lt;em&gt;between&lt;/em&gt; operator reduces the chance of accidental invalid entries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable In‑cell dropdowns&lt;/strong&gt; for list‑type rules to give users a visual selection list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provide a helpful Input Message&lt;/strong&gt; – it appears before the user types, reducing validation errors.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select the appropriate Error Alert style:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Stop&lt;/em&gt; for critical data (e.g., IDs).&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Warning&lt;/em&gt; when you want to allow the entry after user confirmation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

      </description>
    </item>
    
    <item>
      <title>Java: </title>
      <link>https://docs.aspose.com/cells/java/ui-components/aspose-cells-gridjs/user-guide/how-to-comment/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/ui-components/aspose-cells-gridjs/user-guide/how-to-comment/</guid>
      <description>
        
        
        &lt;p&gt;———
title: How to use Comment
description: Add, edit, remove, and navigate cell comments, with a marker on the cell and a hover tip showing the note.
keywords: Comment, Edit comment, Remove comment, Previous comment, Next comment, insertComment, newComment, comments
type: docs
weight: 1
url: /java/aspose-cells-gridjs/user-guide/how-to-comment/
aliases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-use-comment&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-add-comment&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-edit-comment&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-remove-comment&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-navigate-comments
———&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Comments are stored per cell and rendered as an indicator on the cell&amp;rsquo;s top-right corner. Hovering a commented cell shows a
comment tip with the note content, and opening Comment displays an inline editor prefilled with the existing note.
Previous/Next comment moves to the nearest earlier or later comment by row and column order. In collaborative mode, comment
changes are sent to the server.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Select a cell, right-click to open the context menu, then choose Comment.
&lt;img src=&#34;comment-contextmenu.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Or open the Insert menu and click Comment to start editing the selected cell.
&lt;img src=&#34;comment-menubar-insert.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Enter text in the editor (placeholder: &amp;ldquo;Please enter text&amp;rdquo;), then click outside the editor to save. The cell shows a
comment marker after saving.
&lt;img src=&#34;comment-editor.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;li&gt;Open the Review menu to use Edit comment, Remove comment, Previous comment, or Next comment.&lt;/li&gt;
&lt;li&gt;Hover a commented cell to display the comment tip.
&lt;img src=&#34;comment-tip.png&#34; alt=&#34;&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;xs = x_spreadsheet(&#39;#gridjs-demo-uid&#39;, option);&lt;/p&gt;
&lt;p&gt;// Add or update a comment.
xs.sheet.setComment(ri, ci, &amp;lsquo;Aspose&amp;rsquo;, &amp;lsquo;Comment text&amp;rsquo;);&lt;/p&gt;
&lt;p&gt;// Remove a comment.
xs.sheet.removeComment(ri, ci);&lt;/p&gt;
&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sheet.setComment(ri, ci, author, note)&lt;/td&gt;
&lt;td&gt;Add or update a comment on the target cell. If note is empty (or empty HTML), the comment is removed. If note is non-empty and not wrapped in a &lt;font&gt; tag, the note is sanitized and wrapped with a default font style.&lt;/td&gt;
&lt;td&gt;ri (row index), ci (column index), author (string), note (HTML string)&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sheet.removeComment(ri, ci)&lt;/td&gt;
&lt;td&gt;Remove the comment from the target cell.&lt;/td&gt;
&lt;td&gt;ri (row index), ci (column index)&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;sheet.setComment(&amp;hellip;) updates the comment entry for the target cell, and removes it when the note is empty.
sheet.removeComment(&amp;hellip;) clears the comment for the target cell.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why did my comment disappear after saving?
A: If the note is empty or considered empty HTML, the comment is removed.&lt;/p&gt;
&lt;p&gt;Q: How do Previous comment and Next comment choose the target?
A: Comments are sorted by row and column; Previous chooses the nearest earlier comment and Next chooses the nearest later
comment.&lt;/p&gt;
&lt;p&gt;Q: Where do comments show in the UI?
A: A marker is drawn on the cell&amp;rsquo;s top-right corner, and hovering the cell shows a comment tip.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: </title>
      <link>https://docs.aspose.com/cells/java/ui-components/aspose-cells-gridjs/user-guide/how-to-insert-sort-and-autofilter/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/ui-components/aspose-cells-gridjs/user-guide/how-to-insert-sort-and-autofilter/</guid>
      <description>
        
        
        &lt;p&gt;———
title: How to use AutoFilter and Sort
description: Enable AutoFilter on a selected range to apply per-column sort and filtering, or open the Sort dialog to run
multi-level sorting on the selection.
keywords: AutoFilter, Sort, SortFilter, Sort A -&amp;gt; Z, Sort Z -&amp;gt; A, Filter results visible to me only
type: docs
weight: 1
url: /java/aspose-cells-gridjs/user-guide/how-to-insert-sort-and-autoFilter/
aliases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-use-autofilter&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-use-sort&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-sort-and-filter&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-autofilter-sort&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-apply-autofilter
———&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;AutoFilter lets you toggle filtering for the current selection range and provides a per-column Sort/Filter panel from the
header row. The Sort/Filter panel includes “Sort A -&amp;gt; Z”, “Sort Z -&amp;gt; A”, and a selectable value list, plus a “Filter
results visible to me only” option in collaborative mode. The Sort button opens a dedicated Sort dialog that supports
multiple sort levels, different sort-on types, and orientation options.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Select a range that includes the header row, then click AutoFilter on the toolbar or in the Edit menu to toggle filtering on the range.
&lt;img src=&#34;autofilter-toggle.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click the filter dropdown in a header cell to open the Sort/Filter panel.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the panel, choose Sort A -&amp;gt; Z or Sort Z -&amp;gt; A, select the values to keep, and (in collaborative mode) toggle Filter results visible to me only if needed. Click OK to apply.
&lt;img src=&#34;sort-filter-panel.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For multi-level sorting, select a range and click Sort on the toolbar or in the Edit menu to open the Sort dialog.
&lt;img src=&#34;sort-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the Sort dialog, confirm the range, choose Sort by, Sort on, and Order, optionally add more levels, set Orientation and My data has headers, then click OK.
&lt;img src=&#34;sort-dialog-multilevel.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;xs = x_spreadsheet(&#39;#gridjs-demo-uid&#39;, option);&lt;/p&gt;
&lt;p&gt;// Toggle AutoFilter for the current selection.
xs.sheet.data.autofilter();&lt;/p&gt;
&lt;p&gt;// Apply a filter and optional sort to a column in the current AutoFilter range.
xs.sheet.data.setAutoFilter(ci, order, operator, values, unfilterValueSet, unfilterRecheck, showFilterResultForMeOnly);&lt;/p&gt;
&lt;p&gt;// Run a sort operation on the current selection (or a provided range).
xs.sheet.data.doSortOpr(ci, order, isHeader, sortOn, colorValues, positionValues, orientation, range);&lt;/p&gt;
&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;data.autofilter()&lt;/td&gt;
&lt;td&gt;Toggle AutoFilter on the current selection range.&lt;/td&gt;
&lt;td&gt;None.&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;data.setAutoFilter(ci, order, operator, values, unfilterValueSet, unfilterRecheck, showFilterResultForMeOnly)&lt;/td&gt;
&lt;td&gt;Apply&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;filter values and optional sort order for one column in the active AutoFilter range.&lt;/td&gt;
&lt;td&gt;ci (column index), order (&amp;lsquo;asc&amp;rsquo; or&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lsquo;desc&amp;rsquo; or null), operator (e.g., &amp;lsquo;in&amp;rsquo; or &amp;lsquo;all&amp;rsquo;), values (array of filter keys), unfilterValueSet (Set), unfilterRecheck&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(Set), showFilterResultForMeOnly (boolean).&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;data.doSortOpr(ci, order, isHeader, sortOn, colorValues, positionValues, orientation, range)&lt;/td&gt;
&lt;td&gt;Execute a sort operation&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;for the current selection or the provided range, with support for multi-level sorting.&lt;/td&gt;
&lt;td&gt;ci (array of column indices),&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;order (array of &amp;lsquo;asc&amp;rsquo;/&amp;lsquo;desc&amp;rsquo;), isHeader (boolean), sortOn (array of &amp;lsquo;cellvalue&amp;rsquo;/&amp;lsquo;cellcolour&amp;rsquo;/&amp;lsquo;fontcolour&amp;rsquo;), colorValues&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(array), positionValues (array), orientation (&amp;lsquo;top2bottom&amp;rsquo; or &amp;lsquo;left2right&amp;rsquo;), range (optional CellRange).&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;data.autofilter() toggles the AutoFilter state for the current selection.
data.setAutoFilter(&amp;hellip;) updates filter values and sort order for a specific column in the active AutoFilter and then
refreshes the filtered result.
data.doSortOpr(&amp;hellip;) sends a sort operation using the provided sort levels, orientation, and optional range.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: Why can’t I enable AutoFilter on my selection?
A: If the selection overlaps an existing table AutoFilter, the UI shows “there is already table autofilter in the
selected range” and AutoFilter is not activated.&lt;/p&gt;
&lt;p&gt;Q: Does AutoFilter sorting include the header row?
A: No. When AutoFilter applies sorting, it sorts starting from the row below the header.&lt;/p&gt;
&lt;p&gt;Q: Why does the Sort dialog show an error about merged areas?
A: If the selected range contains merged areas, sorting is blocked and the UI shows “The select range has merge areas,we
do not support sort on merge areas”.&lt;/p&gt;
&lt;p&gt;Q: When is “Filter results visible to me only” available, and what does it do?
A: It appears only when collaborative mode is enabled. If you uncheck it, the filter operation is sent to the server so
others can see it; if checked, it stays local.&lt;/p&gt;

      </description>
    </item>
    
    <item>
      <title>Java: </title>
      <link>https://docs.aspose.com/cells/java/ui-components/aspose-cells-gridjs/user-guide/how-to-search/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>https://docs.aspose.com/cells/java/ui-components/aspose-cells-gridjs/user-guide/how-to-search/</guid>
      <description>
        
        
        &lt;p&gt;———
title: How to use Search
description: Open the Search dialog to find values, formulas, or comments, then navigate or replace matches.
keywords: Search, Find what, Replace, Replace All, Look in, Match entire contents, Case Sensitive, Values, Formulas,
Comments
type: docs
weight: 1
url: /java/aspose-cells-gridjs/user-guide/how-to-search/
aliases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-find&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-replace&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-replace-all&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-search-comments&lt;/li&gt;
&lt;li&gt;/java/aspose-cells-gridjs/how-to-search-formulas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;———&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Search opens a dialog that lets you find text across Values, Formulas, or Comments, with options like Case Sensitive and
Match entire contents. You can move through matches with Next and Previous, and the current match is highlighted in the
grid. A separate Find &amp;amp; Replace view lets you replace a single match or all matches.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use&#34;&gt;How to use&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open Search from the toolbar or the Edit menu, or press Ctrl + F.
&lt;img src=&#34;search-button.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In Find what, enter your text, then choose Look in (Values, Formulas, or Comments).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optionally toggle Case Sensitive and Match entire contents, then click Next or Previous to navigate matches.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To replace, press Ctrl + H to open Find &amp;amp; Replace, enter Replace with, then use Replace or Replace All.
&lt;img src=&#34;search-dialog.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;javascript-api&#34;&gt;JavaScript API&lt;/h2&gt;
&lt;p&gt;xs = x_spreadsheet(&#39;#gridjs-demo-uid&#39;, option);&lt;/p&gt;
&lt;p&gt;// Open Search (Find) dialog.
xs.sheet.modalSearch.show();&lt;/p&gt;
&lt;p&gt;// Open Find &amp;amp; Replace dialog.
xs.sheet.modalSearch.show(true);&lt;/p&gt;
&lt;h3 id=&#34;relevant-functions&#34;&gt;Relevant functions&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Function&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Parameters&lt;/th&gt;
&lt;th&gt;Returns&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sheet.modalSearch.show(showReplace)&lt;/td&gt;
&lt;td&gt;Show the Search dialog; when showReplace is true, the Replace fields are shown&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;and Look in is hidden.&lt;/td&gt;
&lt;td&gt;showReplace (boolean)&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sheet.modalSearch.hide()&lt;/td&gt;
&lt;td&gt;Close the Search dialog.&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;void&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;sheet.modalSearch.show(showReplace) displays the Search UI and optionally the Replace UI based on the boolean parameter.
sheet.modalSearch.hide() closes the dialog and clears the current search highlight.&lt;/p&gt;
&lt;h2 id=&#34;common-questions&#34;&gt;Common Questions&lt;/h2&gt;
&lt;p&gt;Q: What can I search in?
A: The Search dialog supports Values, Formulas, and Comments via the Look in dropdown.&lt;/p&gt;
&lt;p&gt;Q: How do I open Replace?
A: Use Ctrl + H (or call sheet.modalSearch.show(true)); the Replace fields appear and Look in is hidden.&lt;/p&gt;
&lt;p&gt;Q: What happens if no matches are found?
A: The UI shows an info message indicating that nothing was found.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
