找回密码
 立即注册

QQ登录

只需一步,快速开始

yuzchengmin

初级会员

21

主题

50

帖子

217

积分

初级会员

积分
217

[处理中] 添加列报错

yuzchengmin
初级会员   /  发表于:2021-12-6 17:20  /   查看:1695  /  回复:6
{System.IndexOutOfRangeException: Invalid index specified: 1831\n(current length is 1830)   在 ag.e(Int32 A_0, Int32 A_1)   在 FarPoint.Win.Spread.FilterBar.a(Int32 A_0, Int32 A_1)   在 FarPoint.Win.Spread.SheetView.OnAddColumns(Int32 column, Int32 count)   在 FarPoint.Win.Spread.SheetView.OnDataModelChanged(Object sender, SheetDataModelEventArgs e)   在 FarPoint.Win.Spread.Model.SheetDataModelEventHandler.Invoke(Object sender, SheetDataModelEventArgs e)   在 FarPoint.Win.Spread.Model.BaseSheetDataModel.OnChanged(SheetDataModelEventArgs e)   在 FarPoint.Win.Spread.Model.DefaultSheetDataModel.OnChanged(SheetDataModelEventArgs e)   在 FarPoint.Win.Spread.Model.BaseSheetDataModel.FireChanged(Int32 row, Int32 column, Int32 rowCount, Int32 columnCount, SheetDataModelEventType type)   在 FarPoint.Win.Spread.Model.DefaultSheetDataModel.FireChanged(Int32 row, Int32 column, Int32 rowCount, Int32 columnCount, SheetDataModelEventType type)   在 FarPoint.Win.Spread.Model.DefaultSheetDataModel.AddColumns(Int32 column, Int32 count)   在 FarPoint.Win.Spread.SheetView.AddColumns(Int32 column, Int32 count)}


这个是报错的信息
调用SheetView.AddColumns报错,在某个临界值会报错


帮忙分析一下原因

6 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-6 18:16:12
沙发
IndexOutOfRangeException错误是由于指定的索引超出了范围,你提到了某个临界值,具体是在这两个参数是多少的时候会报错呢

image.png102389525.png
回复 使用道具 举报
yuzchengmin
初级会员   /  发表于:2021-12-7 14:04:12
板凳
Richard.Ma 发表于 2021-12-6 18:16
IndexOutOfRangeException错误是由于指定的索引超出了范围,你提到了某个临界值,具体是在这两个参数是多少 ...

我原来的报表有10列,然后我在第2n列,插入了20列,这个sheet的列数增加,我循环调用AddColumns, 每次增加20列,当这个循环次数达到70次的时候,就会报上面那个错误,不知道是什么原因,一直就提示错误的索引
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-7 14:31:10
地板
你说的2n列是什么意思,如果你是每次添加2倍于前一次添加的列数,这个肯定是有上限的,这个和spread无关,spread能支持的添加列数是一个int类型的正整数,int类型本身也是有长度限制的
(int)Math.Pow(2, i),当i>31时,得到的就是一个负数了,作为列数传入其中自然会报错

最重要的是,你这边是在验证什么需求呢?需要加这么多列
回复 使用道具 举报
yuzchengmin
初级会员   /  发表于:2021-12-7 14:45:25
5#
意思就是比如说我原来有个报表模板,我现在要在原来的报表模板填充列,就是新加列,打个比方,报表模板有10列,我需要从第5列开始,5,6,7,8,9,10,每一列添加20列,意思就是第一次循环添加的时候,是在第5列调用AddColumns添加了20列,第二次循环就是,5+20+1列添加20列,然后第三次就是5+20*2+1.依次类推,当循环达到70就会报错。
回复 使用道具 举报
yuzchengmin
初级会员   /  发表于:2021-12-7 14:47:00
6#
这个不是验证什么需求,我这个是客户的真实场景,因为我们需要根据报表模板根据特定的条件扩充列
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-12-7 15:36:18
7#
最方便的是你输出一下报错时给AddColumns中加的两个参数,看看到底是否符合需求,至少第一个参数要小于总列数吧,第二个参数得是一个正整数吧,很容易就能判断出来

如果你那边无法排查出问题的话,请上传一个重现问题的demo,我来给你验证
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部