I want to implement richer front-end features, such as adding business validation and preventing row insertion.
I need a method that can prevent row insertion. What should I do?
Alternatively, can I obtain the front-end source code developed by you based on X-SPREADSHEET
@feng.qun.zhu.avaryholding.com
you can remove the insert row context menu,assume the div id of GridJs is “gridjs-divid”
//get context menus parent dom
const menus=document.querySelector("#gridjs-divid > div > div.x-spreadsheet-sheet > div.x-spreadsheet-contextmenu");
var childs = menus.childNodes;
for (var i = childs.length - 1; i >= 0; i--)
{
// check the item text
if(childs[i].childNodes[0]?.textContent==="Insert row")
{
menus.removeChild(childs[i]);
}
}
for customize toolbar and menus,please refer to :
for validations ,we have supported it like in MS-Excel.
for the front-end source code we are sorry it is not opened publicly yet.
If you want more features in GridJs,we will envaluate your scenario and do enhancement for you by adding more APIs/features and so on.
Thank you,
I need a function that can be executed before all operations are executed, which can prevent the original operation from continuing, such as blocking the insertion of rows instead of blocking all buttons.
In other scenarios, such as disabling specific rows, columns, and cell editing based on the logged in user.
According to the filling, if the associated business data is not verified correctly, it will be displayed in red.
Can I implement it based on the existing version
@feng.qun.zhu.avaryholding.com
I think you can update the related workbook in server side first then you can load it in GridJs.
for example you don’t want insert rows. you can delete the unwanted rows first.
you want protect some range for editing . you can protect the worksheet and apply protect range.
We have a lot of front-end requirements to do. If we open up paid consultation, what can you provide
@feng.qun.zhu.avaryholding.com
for example in our demo we use LocalFileCache in startup.cs,
LocalFileCache mwc = new LocalFileCache();
GridJsWorkbook.CacheImp = mwc;
first it generate a uid in Uidtml method in Controller
then in DetailStreamJsonWithUid method in Controller
1.it will load the workbook file from file original path first time.
here you can do your server side business for the first load of the file.
and then when you open the same url,which include the uid
2.it will load the workbook file from cache path by the uid, then you can do your server side business here
3.in such way ,you can control the workbook file either first time load from file orginal path or load from cache and apply your bussiness logic in server side ,before user open the file.
4.same way for java version.
@feng.qun.zhu.avaryholding.com
Can you provide your requirements in detail.
we will envaluate the requirement one by one.
if it is a general helpful scenario ,we will implment the features in our side.
if it is a special requirement and not so general ,we will provide apis and workaround and so on.
@feng.qun.zhu.avaryholding.com,
If you purchase Paid Consulting, we can work together with you on your project and develop a part or complete application accordingly. This is valuable if you need new features in the existing Aspose product. See the policies and FAQs on paid consulting for your reference.
We currently have an urgent project to implement online editing using Grid. We have some requirements and would like to ask the original factory to assist us in development. We will pay to implement it
- Eliminate specific rows and columns in business scenarios, which cannot be deleted or inserted.
- By locking cells or headers.
- By incremental addition, modification, deletion, and writing to the database. Batch cutting and pasting of regions to obtain all modified items and interact with data
- Mandatory field verification, business verification, real-time interaction with the backend, prompting users (displayed in red font), etc
- Aspose AI functionality
- Record historical changes in data and restore historical versions
- Comparison of V2V data between two historical versions
- Add buttons in Excel spreadsheets to achieve data filtering, data drilling, jump links, etc
- Other bug fixes (protecting cells can be deleted using backspace; protecting columns can be cut; cutting and pasting from the previous row to the next row with data does not overwrite the original value, and the bottom hidden row becomes displayed; inserting rows and columns, the front-end formula does not refresh)
- Performance design (multiple users simultaneously, memory optimization; cache file cleaning; slow response to complex Excel modifications)
I hope to receive a specific cooperation method and cost quotation in response
中文在哪里沟通?我们可以详细谈一下需要做的事情
您可以提供一个钉钉号码?我将您拉入我们的专属企业钉钉群
需要国家码+手机号,邀请您进入我们企业的专属钉钉
好的,。。。。。。。。 已加入
aspose顾问您好,以下使我们谈后,所需的优化与BUG,请排期支持,谢谢
优化(按优先级排序)
1、By行增量新增、修改、删除,并写入数据库。
增加刪除行列的通知接口,告知坐标等信息
增加批量複製、剪切的事件,可获取所有修改项与坐标
2、必填项校验、业务性校验,实时与后台交互,提示用户(红色字体显示)等
前後端接口,編輯、批量操作,增加自定義校驗接口,校驗不通過可以阻止設置值,或者標紅。
3、根绝业务场景特定行列,不能删除、不能插入。
提供插入、删除行列执行前事件,可以阻止插入
4、By人锁定单元格或者锁定表头(已有接口)。
请提供前端api,调用demo
5、Aspose AI功能
集成國內(阿里千問)
6、EXCEL表格中,增加按钮,实现数据筛选、数据下钻,跳转链接等
增加控件點擊事件自定義js,
7、多人在線編輯
BUG
1、保护单元格、行列可以使用backspace删除,可以被剪切;
2、从前一行剪切粘贴到后一有数据的行,没有覆盖原值,并且最下面隐藏行变成了显示
@feng.qun.zhu.avaryholding.com
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-1371,CELLSGRIDJS-1370,CELLSGRIDJS-1369,CELLSGRIDJS-1368,CELLSGRIDJS-1367,CELLSGRIDJS-1366,CELLSGRIDJS-1365
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.
假设xs是js里gridjs的对象实例,可以参考使用下面的方法进行区域范围的编辑锁定
function updateEditableRange(Range,iseditable)
{
//record old selector range
const sri=xs.sheet.selector.range.sri;
const sci=xs.sheet.selector.range.sci;
const eri=xs.sheet.selector.range.eri;
const eci=xs.sheet.selector.range.eci;
//set selector range to target Range
xs.sheet.selector.range.sri=Range.sri;
xs.sheet.selector.range.sci=Range.sci;
xs.sheet.selector.range.eri=Range.eri;
xs.sheet.selector.range.eci=Range.eci;
xs.sheet.data.setSelectedCellAttr("editable",iseditable);
//restore old selector range
xs.sheet.selector.range.sri=sri;
xs.sheet.selector.range.sci=sci;
xs.sheet.selector.range.eri=eri;
xs.sheet.selector.range.eci=eci;
}
//usage example
const range={};
range.sri=1;
range.sci=1;
range.eri=2;
range.eci=2;
//disable edit range
updateEditableRange(range,false);
//enable edit range
updateEditableRange(range,true);