找回密码
 立即注册

QQ登录

只需一步,快速开始

jiqimao 讲师达人认证
金牌服务用户   /  发表于:2023-4-6 21:19  /   查看:1633  /  回复:5
如下图,如果通过 GcExcel 实现 分页预览 的功能呢 ?


image.png756880798.png

5 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-7 10:05:34
沙发
gcexcel是一个服务端组件,没有UI界面可以显示分页效果,但是也提供接口来获取分页结果,你可以通过下面的代码获取,其中pagelist即是最终分页结果List,每个结果中getRange得到的就是单元格范围

  1. PrintManager printManager=new PrintManager();
  2.             List<PageInfo> pagelist= printManager.paginate(workbook);
  3.             for(PageInfo info : pagelist){
  4.                   info.getPageContent().getRange();
  5.             }
复制代码


回复 使用道具 举报
jiqimao讲师达人认证
金牌服务用户   /  发表于:2023-4-7 13:51:05
板凳
但是这个获取到的结果和UI界面上面分页的效果不一致呢.  是不是还需要中间做一些逻辑处理呢 ?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-7 18:29:12
地板
是的这个是目前两个产品的功能限制,没有办法完全做到分页结果的完全一致。

让分页保持一致的一些建议,
1.通过自适应尽量避免横向分页(前后端都有提供自适应宽度打印到一页的接口)
2.拿到spreadjs纵向分页的信息,在gcexcel打印时,手动强制分页,思路是把需要分页的sheet直接按照你需要纵向区域,分割成多个sheet来打印(每个sheet打印时再设置宽高自适应保证打印到一页)
https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=97252
回复 使用道具 举报
jiqimao讲师达人认证
金牌服务用户   /  发表于:2023-4-7 21:22:56
5#
image.png588023681.png

你发的帖子的链接, 我打不开
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-10 11:09:21
6#
不好意思,这是客户发的帖加了权限,相关代码我复制出来,仅供你参考思路,因为是C#代码,java的话相关接口得稍作修改

  1. //根据证书编号分页,复制内页并删除多余部分,每一页为一个sheet
  2.             var innersheet = CoverDescWorkbook.Worksheets[2];
  3.             int usedrow = innersheet.UsedRange.LastRow;
  4.             IRange startrange = innersheet.Range["A1"];
  5.             IRange endrange = innersheet.Range["A1"];

  6.             while (true)
  7.             {
  8.                 startrange = endrange;
  9.                 endrange=innersheet.UsedRange.Find("证书编号", endrange);
  10.                 if (endrange == null)
  11.                 {
  12.                     var lastsheet=innersheet.Copy();
  13.                     lastsheet.Range[7, 0, startrange.Row-7, 1].EntireRow.Delete();
  14.                     lastsheet.PageSetup.FitToPagesTall = 1;
  15.                     lastsheet.PageSetup.FitToPagesWide = 1;
  16.                     break;
  17.                 }
  18.                
  19.                
  20.                 if (startrange.Row != 0)
  21.                 {
  22.                     var lastsheet = innersheet.Copy();
  23.                     lastsheet.Range[endrange.Row, 0, usedrow - endrange.Row, 1].EntireRow.Delete();
  24.                     if(startrange.Row - 7>0)
  25.                         lastsheet.Range[7, 0, startrange.Row - 7, 1].EntireRow.Delete();
  26.                     lastsheet.PageSetup.IsPercentScale = false;
  27.                     lastsheet.PageSetup.FitToPagesTall = 1;
  28.                     lastsheet.PageSetup.FitToPagesWide = 1;
  29.                 }

  30.             }
  31.             innersheet.Delete();
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部