找回密码
 立即注册

QQ登录

只需一步,快速开始

zch

初级会员

28

主题

53

帖子

237

积分

初级会员

积分
237
QQ
zch
初级会员   /  发表于:2021-3-31 14:05  /   查看:2996  /  回复:3
您好!目前要处理一些比较大的xml文件(大概好几十M),有很多sheet,为便于处理,想把这个比较大的xml文件按sheet拆成几个xml文件(每个xml文件至多3个sheet),到处理时,再到内存中加载所有拆开的xml文件,并合并成内存中一个完整的xml文件,请问该怎么实现?(希望能提供样例代码或者关键代码,谢谢!)

3 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-31 15:20:15
沙发
按照3个sheet分割代码如下,仅作参考,注意实际代码还需要考虑总sheet数不是3的倍数,加以判断

  1.         void segmentationWorkbooke(string filename)
  2.         {
  3.             FpSpread fpSpread = new FpSpread();
  4.             fpSpread.Open(filename);
  5.             int pagesize = 3;
  6.             for (int i = 0; i < fpSpread.Sheets.Count; i += pagesize)
  7.             {
  8.                 FpSpread fp = new FpSpread();
  9.                 fp.Sheets.Add(fpSpread.Sheets[i].Clone());
  10.                 fp.Sheets.Add(fpSpread.Sheets[i + 1].Clone());
  11.                 fp.Sheets.Add(fpSpread.Sheets[i + 2].Clone());
  12.                 fp.Save(filename.Substring(0, filename.Length - 4) + "_" + i.ToString() + ".xml", false);
  13.             }
  14.         }
复制代码


合并的话也是类似的操作就行,循环去加载多个文件
  1.         void openXmls(string[] files) {
  2.             fpSpread1.Sheets.Clear();
  3.             foreach(string file in files)
  4.             {
  5.                 FpSpread fp = new FpSpread();
  6.                 fp.Open(file);

  7.                 fpSpread1.Sheets.AddRange(fp.Sheets);
  8.             }
  9.         }
复制代码




回复 使用道具 举报
zch
初级会员   /  发表于:2021-3-31 15:55:37
板凳
Richard.Ma 发表于 2021-3-31 15:20
按照3个sheet分割代码如下,仅作参考,注意实际代码还需要考虑总sheet数不是3的倍数,加以判断

您好!按照你给的样例拆分是可以的,不过在合并时,使用AddRange报异常:System.NullReferenceException.
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-31 16:13:42
地板
本帖最后由 Richard.Ma 于 2021-3-31 17:36 编辑

你这边是在SpreadDesigner中使用时才报错的,在Spread控件中使用不会有问题
SpreadDesigner中封装了Spread控件,有可能重写了其中一些方法,这个我会在继续跟踪验证一下问题原因。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部