Issue Description
In our implementation using Aspose.Cells GridJS, the “Add Row” and “Add Column” toolbar buttons are not behaving as expected:
- The “Add Row” button always inserts the new row above the currently selected row.
- The “Add Column” button always inserts the new column in front of (i.e., to the left of) the currently selected column.
** Another Issue Description**
We are using the freeze/unfreeze pane feature in Aspose GridJS, and observed an issue specifically with unfreezing cells:
-
Freeze operation works correctly. When we freeze rows or columns and save using the mergeExcelFileFromJson()
method, the saved file reflects the frozen state properly.
-
However, when we unfreeze the cells on the UI and try to save the updated workbook by merging the new JSON, the saved copy still has the original frozen state — the unfreeze is not applied.
Steps to Reproduce
-
Freeze a few rows or columns in the GridJS UI.
-
Save the file via mergeExcelFileFromJson()
→
freeze works as expected in saved copy.
-
Unfreeze the same cells in GridJS UI.
-
Save again via mergeExcelFileFromJson()
using updated JSON.
-
Open the saved file — the freeze state is still active, unfreeze change is not saved.
Backend Code:
GridJsWorkbook wb = new GridJsWorkbook();
wb.mergeExcelFileFromJson(uid, jsonStream);
wb.saveToCacheWithFileName(uid, filename, password);
JSON Format:
var jsondata = {
sheetname: xs.sheet.data.name,
actrow: xs.sheet.data.selector.ri,
actcol: xs.sheet.data.selector.ci,
datas: xs.getUpdateDatas(),
};
Request
Please confirm if this is the default behavior or a known issue, and advise if:
-
There is any configuration or method to override this behavior.
-
A patch or update is available to align the insert logic with expected behavior.
-
There’s any additional step or flag required to capture the unfreeze operation.
-
A fix or workaround is available for this.
@chirags
Cause
The behavior you’re experiencing with the “Add Row” and “Add Column” actions in Aspose.Cells GridJS, where new rows are inserted above the selected row and new columns to the left of the selected column, is not the expected functionality. This issue may stem from a configuration error or a limitation in the current implementation of the GridJS component.
Additionally, the unfreeze operation not being reflected in the saved copy after using the mergeExcelFileFromJson()
method indicates that the unfreeze state is not being properly captured or saved in the JSON data.
Solution
-
Row and Column Insertion:
- Review the settings or properties in your GridJS configuration that dictate the insertion behavior. You may need to implement custom logic to adjust the insertion point according to your requirements.
-
Unfreeze Operation:
- Ensure that you are calling the
UnfreezePanes()
method on the WebWorksheet
before saving the workbook. This method is essential for updating the freeze state in the worksheet.
Code
Here’s an example of how you might adjust your code to include the unfreeze operation:
GridJsWorkbook wb = new GridJsWorkbook();
// Unfreeze panes before saving
var worksheet = wb.Worksheets[0]; // Assuming you're working with the first worksheet
worksheet.UnfreezePanes();
wb.mergeExcelFileFromJson(uid, jsonStream);
wb.saveToCacheWithFileName(uid, filename, password);
Next Steps
- Test the modified code to confirm that the unfreeze operation is now reflected in the saved file.
- If the row and column insertion behavior remains unchanged, reach out to Aspose support for further assistance or check for any updates or patches that may resolve this issue.
Please implement these changes and let me know if you need further assistance!
Thank you for the detailed response and suggested solutions regarding the row/column insertion behavior and unfreeze pane issue in Aspose.Cells GridJS.
1. Row and Column Insertion Behavior
You mentioned that this may be due to configuration or the need for custom logic.
-
Is there a built-in method or client-side property in GridJS where we can override the default behavior of:
"Add Row"
inserting above (we want it to insert below),
"Add Column"
inserting to the left (we want it to insert to the right)?
-
If not available natively, can you suggest:
- A JavaScript-level override or extension of the default toolbar behavior?
- A hook or callback that we can use to intercept and adjust insertion index dynamically?
2. Unfreeze Pane Client-Side Control
You’ve suggested calling worksheet.UnfreezePanes()
on the server side before saving, which is clear and helpful.
-
Is there a way to explicitly trigger or detect the unfreeze action from the GridJS client-side, so it gets included in xs.getUpdateDatas()
?
-
If not captured by default, can we manually include unfreeze metadata into the JSON structure sent to the server (e.g., a flag in datas
)?
We appreciate your continued guidance on this. Looking forward to your response.
@chirags
Please update to latest v25.7 version for both serverside and client side js.
We only have insert row/column menu
QQ图片20250717135223.png (17.0 KB)
QQ图片20250717135306.png (53.5 KB)
we have insert rows/columns js api :
xs.sheet.insertRows(start, size) / xs.sheet.insertColumns(start, size)
document is here:
https://docs.aspose.com/cells/net/aspose-cells-gridjs/how-to-use-gridjs-client-api/
@chirags
we can not reproduce the freezepane issue.
in my side,it works as expected.
after do freeze,freeze is C6
QQ图片20250717140113.png (19.4 KB)
QQ图片20250717140139.png (9.0 KB)
after unfreeze,freeze is A1 which is the default value.
QQ截图20250717140322.png (37.4 KB)
QQ图片20250717140415.png (8.5 KB)
Thank you for checking and confirming that the freeze/unfreeze functionality works fine on the client-side.
However, the issue we’re facing is not with the client-side behavior, but rather with saving and persisting the changes made on the client UI — specifically when using mergeExcelFileFromJson()
to save updates back to the server.
Problem Recap:
-
Freeze panes: If we freeze a cell and call mergeExcelFileFromJson()
on the server with the updated JSON, it saves correctly.
-
Unfreeze panes: Although unfreezing works on the UI (resets to A1), this change is not persisted when we save the file using mergeExcelFileFromJson()
— the resulting file still has the original freeze.
-
The same issue happens with hide/unhide row/column — UI reflects the change, but the saved file keeps the previous hidden state.
Additional Context:
We are saving via:
GridJsWorkbook wb = new GridJsWorkbook();
wb.mergeExcelFileFromJson(uid, jsonStream);
wb.saveToCacheWithFileName(uid, filename, password);
The issue appears to be that some UI operations are not translated into JSON diffs, and thus, not captured during mergeExcelFileFromJson()
.
Please advise if this is a known limitation or if a patch or configuration change is required.
Thanks again for your support.
@chirags
Actually,when you click the download file button.
the save process is:
//in client side
//using getUpdateDatas to get the UI data for update
string jsonDataForUpdate=xs.getUpdateDatas();
//in server side
GridJsWorkbook wb = new GridJsWorkbook();
//merge the update data with the existed spreadsheet file with uid
wb.MergeExcelFileFromJson(uid, jsonDataForUpdate);
wb.SaveToCacheWithFileName(uid, filename, password);
So it works fine through UI operation. the update in UI will merge to server side spreadsheet file.
Thank you for your clarification and confirming that the save flow using xs.getUpdateDatas()
works as expected on your side.
However, I would like to emphasize that in my implementation, I am also using the exact same method:
var jsonDataForUpdate = xs.getUpdateDatas();
And passing it to the server like this:
GridJsWorkbook wb = new GridJsWorkbook();
wb.MergeExcelFileFromJson(jsonDataForUpdate, uid);
wb.SaveToCacheWithFileName(uid, filename, password);
Working as Expected:
All these operations are working perfectly and reflected correctly in the saved Excel file.
Not Working:
Even though the UI updates correctly, these two actions are not reflected when I download the file after saving.
This leads me to believe that:
-
xs.getUpdateDatas()
may not be capturing these particular state changes (unfreeze, unhide).
-
Or, they require additional flags or client-side logic to include them in the JSON.
@chirags
first you can check the freeze property in the xs.getUpdateDatas api,
just as my screen snapshot,check whether it is become A1 after you do unfreeze.
if this is ok, there maybe issue in server side merge api.
what is the version you use,
can you update to the latest v25.7 version.
image.png (12.7 KB)
image.png (1.7 KB)
Thank you for your continued support.
As per your suggestion, I checked the xs.getUpdateDatas()
output after performing the unfreeze operation.
Yes — the freeze value correctly changes to "A1"
, exactly as shown in your screenshot.
So the client-side data is updating properly.
However, the issue still persists:
-
Even with "freeze": "A1"
present in the JSON,
-
When I pass this data to the backend and call MergeExcelFileFromJson(...)
,
-
The freeze is not removed in the saved Excel file — it still retains the previous frozen state.
Server-Side Details:
I’m using the latest version:
Aspose.Cells v25.7
Backend code:
GridJsWorkbook wb = new GridJsWorkbook();
wb.MergeExcelFileFromJson(uid,jsonDataForUpdate);
wb.SaveToCacheWithFileName(uid, filename, password);
@chirags
We are sorry,
We can reproduce this issue now.
the steps are:
freeze the worksheet in the spreadsheet file.
then load the spreadsheet file in GridJs , do unfreeze,then do save.
we can see the download file still has freezepane in the worksheet.
thank you for your feedback and patience.
@chirags
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.
Issue ID(s): CELLSGRIDJS-1787 Unfreeze does not work as expected
You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.
Thank you again for confirming the issue with Unfreeze Panes.
I’d also like to clarify that the problem extends further — currently, both hide and unhide operations for rows and columns are not being saved correctly.
Summary of Issues:
-
Hide Rows – Not saved in the downloaded file
-
Hide Columns – Not saved
-
Unhide Rows – Not saved
-
Unhide Columns – Not saved
-
Unfreeze Panes – Not saved
All of these actions appear to work fine on the GridJS UI, but they are not being reflected when we call xs.getUpdateDatas()
and use that JSON with mergeExcelFileFromJson()
on the server.
Meanwhile, other operations such as formatting, merging cells, and value editing are working perfectly and are saved correctly.
@chirags
We can reproduce the issue for hide/unhide row/column .
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.
Issue ID(s): CELLSGRIDJS-1789 Hide and unhide operations for rows and columns are not being saved correctly.
You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.
@chirags,
We are pleased to inform you that your issue (Ticket ID: “CELLSGRIDJS-1787”) regarding the unfreeze functionality not working as expected, has been resolved. The fix/enhancement will be incorporated into the upcoming release of Aspose.Cells.GridJs (v25.8), which is scheduled for the first half of August 2025. You will be notified when the new version is published.
I’m currently using the Paint Format tool from the GridJS toolbar to copy formatting from one cell to another. However, it doesn’t seem to be working as expected. Either:
-
The formatting is not applied to the target cell, or
-
It applies unexpected styles, sometimes to previously selected cells.
I’m not sure if I’m using the tool incorrectly or if there’s a bug in its current implementation.
Details:
-
Using the Paint Format tool after selecting a cell with bold, background color, or border
-
Then clicking another cell where I want to apply the same formatting
-
But the format is not consistently copied or applied
Request:
Could you please confirm:
-
The correct usage steps for the Paint Format tool?
-
If there are any known limitations or issues with this tool?
-
And whether this issue is reproducible on your side?
Thanks for your support!
@chirags
The paint format tool is not currently available in the UI. However, we have created a ticket to address this request: CELLSGRIDJS-1780 - Support Format Painter.
Similar to the issue we faced earlier with Unfreeze Panes, we’ve observed the same behavior with the Unfilter operation.
Steps to Reproduce:
-
Apply a filter to a column using the toolbar → it saves correctly via getUpdateDatas()
and mergeJsonData
server call.
-
Then, clear or remove the filter (Unfilter) from the UI → it works fine visually on the client side.
-
Save the file using the standard method:
GridJsWorkbook wb = new GridJsWorkbook();
wb.MergeExcelFileFromJson(uid, jsonStream);
wb.SaveToCacheWithFileName(uid, filename, password);
-
When downloading the saved file, the filter still appears – indicating the unfilter action was not saved.
Summary of Issue:
Applying filter: Works fine and saved properly
Removing filter (Unfilter): Works visually in UI, not persisted in server-generated file
Request:
Please confirm if this is a known issue and whether the unfilter state is currently captured by getUpdateDatas()
.
If not, could you guide us on how to explicitly remove filters so the change is persisted correctly in the merged workbook?
Thanks again for your support and previous help with the Unfreeze issue.
@chirags
We have opened the following new ticket(s) in our internal issue tracking system and will deliver their fixes according to the terms mentioned in Free Support Policies.
Issue ID(s): CELLSGRIDJS-1790 Unfilter does not work as expected
You can obtain Paid Support Services if you need support on a priority basis, along with the direct access to our Paid Support management team.