找回密码
 立即注册

QQ登录

只需一步,快速开始

yitong

金牌服务用户

10

主题

53

帖子

376

积分

金牌服务用户

积分
376

[已处理] V10前端excel导出

yitong
金牌服务用户   /  发表于:2017-1-11 18:14  /   查看:4415  /  回复:5
我用V10前端excel导出,报Object {errorCode: 1, errorMessage: "Incorrect file format."}错误。
这是我的代码:

引入js:<script src='lib/SpreadJS10/Spread.Sheets.All.10.0.1/scripts/interop/gc.spread.excelio.10.0.1.min.js' type='text/javascript'></script>
               var fileName = "report.xlsx";
           var json = spread.toJSON();
           // here is excel IO API
           excelIo.save(json, function (blob) {
               saveAs(blob, fileName);
           }, function (e) {
               // process error
               console.log(e);
           });




5 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-12 09:41:57
沙发
您还需要引用一个FileSaver.js。这个是个开源组件,保存文件用的,在示例有。
\samples\TutorialSample\external\FileSaver.js
或者您去giithub下载 https://github.com/eligrey/FileSaver.js/
回复 使用道具 举报
yitong
金牌服务用户   /  发表于:2017-1-16 15:49:47
板凳
blob973926696.png
表单级绑定数据,导出excel,没有表头。
blob699990844.png
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-16 16:10:26
地板
excel 本身没有表头的概念,所以导出后是没有的,

您可以在导出前,给sheet 插入行设置复制行头

[code]            var tempSpread = new GC.Spread.Sheets.Workbook();
            tempSpread.fromJSON(json);
            var hearderStyle = new GC.Spread.Sheets.Style();
            hearderStyle.borderLeft =new GC.Spread.Sheets.LineBorder("black",GC.Spread.Sheets.LineStyle.medium);
            hearderStyle.borderTop = new GC.Spread.Sheets.LineBorder("black",GC.Spread.Sheets.LineStyle.medium);
            hearderStyle.borderRight = new GC.Spread.Sheets.LineBorder("black",GC.Spread.Sheets.LineStyle.medium);
            hearderStyle.borderBottom = new GC.Spread.Sheets.LineBorder("black",GC.Spread.Sheets.LineStyle.medium);

            for(var sheetPro in tempSpread.sheets){
                var sheet = tempSpread.sheets[sheetPro]

                if(!(sheet instanceof GC.Spread.Sheets.Worksheet)){
                    continue;
                }

                var headerRowCount = sheet.getRowCount(GC.Spread.Sheets.SheetArea.colHeader)
                var colCount = sheet.getColumnCount();
                //判断是否需要导出列头
                if(headerRowCount > 1 || sheet.getText(0, 0, GC.Spread.Sheets.SheetArea.colHeader) !== "A"){
                    sheet.addRows(0, headerRowCount);
                    for(var row = 0; row < headerRowCount; row++){
                        sheet.setStyle(row, -1, hearderStyle);
                        for(var col = 0; col < sheet.getColumnCount(); col++){
                            sheet.setValue(row, col, sheet.getText(row, col, GC.Spread.Sheets.SheetArea.colHeader));
                            var span = sheet.getSpan(row, col, GC.Spread.Sheets.SheetArea.colHeader)
                            if(span && span.row === row && span.col ===col && (span.rowCount > 1 || span.colCount > 1) && span.rowCount <= headerRowCount -  span.row && span.colCount <= colCount - span.col){
                                sheet.addSpan(span.row, span.col, span.rowCount, span.colCount)
                            }
                        }
                    }
                }
            }
            var newJSON = tempSpread.toJSON(options);
  
回复 使用道具 举报
yitong
金牌服务用户   /  发表于:2017-1-16 16:38:08
5#
blob90757750.png
表单级绑定,可以像这样设置多表头吗?
我这是通过一个格子一个格子循环,sheet.setValue实现的。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-1-16 17:07:37
6#
列头可以设置合并,也是需要通过代码循环设置。

addSpan(0,1,4,4, GC.Spread.Sheets.SheetArea.colHeader)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部