找回密码
 立即注册

QQ登录

只需一步,快速开始

linxiang19

初级会员

25

主题

65

帖子

242

积分

初级会员

积分
242
linxiang19
初级会员   /  发表于:2018-5-16 10:39  /   查看:7551  /  回复:11
我自定义控件根据 图片URL repaint 在EXCEL格子上..现在客户要求导出的EXCEL 上要把REPAIN的图片也导出到EXCEL上..要跟在系统上显示的一样...
这怎么搞..

11 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-16 14:47:20
沙发
您把图片转换成base64位图,这样导出时候是能够导出到Excel中的,url不行。
回复 使用道具 举报
linxiang19
初级会员   /  发表于:2018-5-16 15:24:05
板凳
ClarkPan 发表于 2018-5-16 14:47
您把图片转换成base64位图,这样导出时候是能够导出到Excel中的,url不行。

您意思是图片转成BASE64 位.然后赋值到这格子的VALUE? 如果是  是单纯base64 赋值.还是需要把IMAGE标签?您能写个简单例子? 我这边是自定义控件画了个图上去.不是一般的INSERT 图片进去而已...那自定义控件有根据格子高度 宽度什么的做了些比例缩放啥的.
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-16 16:37:48
地板
  1. window.onload = function () {
  2. var spread = new GC.Spread.Sheets.Workbook(document.getElementById('ss'), { sheetCount: 2});
  3. var sheet = spread.getActiveSheet();
  4. var img = new Image();
  5. img.src = 'data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAIAAABK/LdUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAKWSURBVFhH7ZX7T5JRGMf9v1przZZdt66T1DDnWlNnkYvyMkHUZvNCmoWJiOQQoeUFzVJwEVoaLi+zqExns5qXFBTLJATXkzyzt+flvGOzH/zh/ez7C+f5fs/Le97znBMjIiKy6/nlDwy9cNdXdZRkG65frE6XlF5LrSqW62vLW/vso77lH+jbOcGNYJvpefIx1Yk9cpYksXmNmi7fCvOpP9f8MA/+EGBs6OOlMyVkdpYS4xS2Dhcmt1hdWXN0D6tVpqRDiqoiM46ycPaMkBmj0UND77c5b3/vWGVhc0Jc/vZ4fGwuzhuR8deT21auTu/LVlyuLVc2Fcn1SYeVpCosV99bnJ2P5EAecYNMuh7Pog8dW18FFvDs/hxiY6ks34hJgrneRqygNyNTWP6XhVnv+SPRvihmCAkH/657WNZmJ9YiAX+F+PnKz7xv0dsxwGXCPUOsF44XYo1NbrqGpECn9t7ISbvX3T44P+tBHx+njW5L2NBYY/O0dYCklDLt4sIylgWAc4Qka8pasMYG+oykjNpurLH4NDkL3SOTqkkyL6MGHWweaLpIqqG6E2uEqQ9fWoyOK9IKEuBq2bOKbgb8LQYdjDUu0LzEF1HCr1h3u5344SjAGqHgah2xslShbFr7vo4xDvCdiBNkNfdhmTDqmiBWAUFfP2p8Bof4zPS8e2z6ScvLzMRy4gHJktU4O59gMAS3CQmkniy+c9OSlVJJxqMRnMsCF9MfVFm6sFV6tEBf3Tk8+D4UCsH4Zmgz+tUOK+Nc6dzXpfC0TCbffdaq22CV/OsBHOLQanTwFyCiDHcfBwIbGNsJ3iWfpcHO78uw0uJv6Sqt0FTo/o/AVeDqd8MdBDvFZn014BiHjYM1ERGR3U1MzG/dmjY5fcSQGwAAAABJRU5ErkJggg==';
  6. img.onload = function(){
  7. sheet.repaint();
  8. }

  9. sheet.getCell(1, 1).value(22).cellType(new WarningCellType(img)).hAlign(0);
  10. sheet.getCell(2, 1).cellType(new IconCellType(img, 3));
  11. };
  12. var WarningCellType = function(icon){
  13. this.icon = icon
  14. }
  15. WarningCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
  16. WarningCellType.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
  17. GC.Spread.Sheets.CellTypes.Text.prototype.paint.call(this, ctx, value, x, y, w, h, style, context);
  18. ctx.drawImage(this.icon, x + w - h + 3, y + 3, h - 6, h - 6);
  19. }

  20. var IconCellType = function(icon, count){
  21. this.icon = icon;
  22. this.count = count;
  23. }
  24. IconCellType.prototype = new GC.Spread.Sheets.CellTypes.Base();
  25. IconCellType.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
  26. GC.Spread.Sheets.CellTypes.Text.prototype.paint.call(this, ctx, value, x, y, w, h, style, context);
  27. for(var i = 1; i <= this.count; i++){
  28. ctx.drawImage(this.icon, x + w - (h - 3) * i, y + 3, h - 6, h - 6);
  29. }
  30. }
复制代码
回复 使用道具 举报
linxiang19
初级会员   /  发表于:2018-5-18 11:16:22
5#

图1系统显示
111.png 图2导出的EXCEL:
22222.png
图3代码
33333.png


如上3图,我之前是读取URL的图片.结果导出的EXCEL 不会包含.按照您的例子.直接用BASE64 一样的结果..
自定义控件包含的图片是否不能被导出.还是只能用浮动层的图片去设置(这样好麻烦.).帮我再看下到底为啥?
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-18 14:52:18
6#
帮您问了一下,是这样的,上面给您提供的方法输入自定义单元格的写法,这种写法是没有办法导出到Excel中的,如果需要将图片导出到Excel中,目前支持的方法是通过picture来进行设置
http://demo.grapecity.com.cn/Spr ... ple/#/demos/picture
picture的src设置成base64格式的图片即可被导出。
回复 使用道具 举报
linxiang19
初级会员   /  发表于:2018-5-23 15:50:10
7#
ClarkPan 发表于 2018-5-18 14:52
帮您问了一下,是这样的,上面给您提供的方法输入自定义单元格的写法,这种写法是没有办法导出到Excel中的 ...

你好,今天有时间测试了你上次回复的方法.发现有点奇怪的问题,想问下怎么解决.
图1 是我在导出的时候去动态加载的图片.X,Y ,W,H 都设置的是正确的.图1就是我取得sheet.pictures.get(name)的参数.您帮忙看下有什么问题.
图2 是我导出出现的问题.图片原本参数是宽 高都37,可实际导出的时候.宽被拉伸了. 不明白是什么导致的.
PS:我后来设置了 pictureStretch  设置了 allowResize等 好像结果都一样.不知道是哪个东西有问题.
TIM截图20180523153343.png TIM截图20180523153434.png

回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-23 18:19:14
8#
好的,我需要详细的看一下代码实现,能否提供个demo呢?
回复 使用道具 举报
linxiang19
初级会员   /  发表于:2018-5-23 19:09:47
9#
ClarkPan 发表于 2018-5-23 18:19
好的,我需要详细的看一下代码实现,能否提供个demo呢?

您好:虽然我想提供.可是提供不了.
我们公司都在虚拟机开发的.代码拿不出.只能老板能动
而且里面有许多我们个性化处理的逻辑.涉及服务端客户端,如果要能跑得动..代码太多..我没办法一个一个代码敲几万行代码..
我想说 你能提供个例子.. 里面塞个BASE64的图片到指定位置.然后有个按钮导出EXCEL不..如果你们可以.我拿来对比下我到底有什么不一样.
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-24 14:16:21
10#
附件是demo,您看一下,我试了一下没发现问题

picture.html

2.62 KB, 下载次数: 1526

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