找回密码
 立即注册

QQ登录

只需一步,快速开始

刘大青

注册会员

6

主题

23

帖子

71

积分

注册会员

积分
71
刘大青
注册会员   /  发表于:2023-12-12 11:13  /   查看:3673  /  回复:17
1金币
本帖最后由 Clark.Pan 于 2023-12-19 10:16 编辑

导出页面内容+样式到excel,打开文件后出现文件格式已损坏 另外如何去除打开文件时的密码

var sheet = NB.getSheet;

var tables = sheet.tables;


// 获取表格的范围
var tableRange = sheet.tables.all()[0].range();

// 获取表格范围内的数据和样式
var tableData = sheet.getArray(tableRange.row, tableRange.col, tableRange.rowCount, tableRange.colCount);
var tableStyles = sheet.getActualStyle(tableRange.row, tableRange.col, GC.Spread.Sheets.SheetArea.viewport);

// 将数据和样式保存为 Excel 文件
var excelJson = {
    sheets: [
        {
            name: "Sheet1",
            data: tableData,
            styles: tableStyles
        }
    ]
};
var excelIO = new GC.Spread.Excel.IO();
    excelIO.save(excelJson, function (blob) {
   //saveAs(blob, fileName); //saveAs is from FileSaver.
             funDownload(blob,"test.xlsx")
}, function (e) {
   console.log(e);
}, {
   password: "password",
   xlsxStrictMode: false
});
                            var funDownload = function (content, filename) {
            var eleLink = document.createElement('a');
            eleLink.download = filename;
            eleLink.style.display = 'none';
            // 字符内容转变成blob地址
            var blob = new Blob([content]);
            eleLink.href = URL.createObjectURL(blob);
            // 触发点击
            document.body.appendChild(eleLink);
            eleLink.click();
            // 然后移除
            document.body.removeChild(eleLink);
        };
image.png782591552.png image.png208676757.png
打不开文件 另外需要去掉密码

最佳答案

查看完整内容

您这个Demo里面还是没有把includeAutoMergedCells置为true,只有置为true之后导出才可以。 请参考附件中的Demo。

17 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-12 11:13:22
来自 19#
您这个Demo里面还是没有把includeAutoMergedCells置为true,只有置为true之后导出才可以。

image.png965588073.png

请参考附件中的Demo。

demo copy.html

31.56 KB, 下载次数: 243

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-12 14:09:11
2#
您好,SpreadJS的JSON只用于持久化数据,不能以任何方式自行创建,您这样的创建方式无法得到正确的结果。

image.png410525817.png

正确的获取方式请参考:https://demo.grapecity.com.cn/sp ... alization#timestamp

如果要去掉密码,移除下图红圈中的代码即可:

image.png954681396.png
回复 使用道具 举报
刘大青
注册会员   /  发表于:2023-12-12 14:42:47
3#

                                    var serializationOption = {
                        ignoreFormula: true,
                        ignoreStyle: false,
                        rowHeadersAsFrozenColumns: true,
                        columnHeadersAsFrozenRows: true
                };
                //ToJson
                var spread1 = GC.Spread.Sheets.findControl(document.getElementById('ss'));
                var jsonStr = JSON.stringify(spread1.toJSON(serializationOption));
                            var excelIo = new GC.Spread.Excel.IO();
            excelIo.save(jsonStr, function (blob) {
                // saveAs(blob, fileName);
                funDownload(blob,"test.xlsx")
            }, function (e) {
                console.log(e);
            }, {password: ''});
var funDownload = function (content, filename) {
            var eleLink = document.createElement('a');
            eleLink.download = filename;
            eleLink.style.display = 'none';
            // 字符内容转变成blob地址
            var blob = new Blob([content]);
            eleLink.href = URL.createObjectURL(blob);
            // 触发点击
            document.body.appendChild(eleLink);
            eleLink.click();
            // 然后移除
            document.body.removeChild(eleLink);
        };   按照示例写的代码 能实现数据导出 但是没有帮我合并单元格
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-12 14:56:29
4#
您好,您的意思是说spread1对象中存在合并单元格,但是在导出来合并单元格丢失了吗?
回复 使用道具 举报
刘大青
注册会员   /  发表于:2023-12-12 15:17:46
5#
Joestar.Xu 发表于 2023-12-12 14:56
您好,您的意思是说spread1对象中存在合并单元格,但是在导出来合并单元格丢失了吗?

是的 导出后 合并单元格的样式丢失了,参考您发的技术文件做的
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-12 15:21:19
6#
了解了,您在导出的时候要将这个选项置为True才行,这样才能将合并单元格的信息保存下来。

image.png510468444.png
回复 使用道具 举报
刘大青
注册会员   /  发表于:2023-12-12 15:47:42
8#
Joestar.Xu 发表于 2023-12-12 15:21
了解了,您在导出的时候要将这个选项置为True才行,这样才能将合并单元格的信息保存下来。

按照您说的参数配置了 还是没有合并单元格            
        var serializationOption = {
                         includeBindingSource: true, //将工作簿转换为json时包含绑定源,默认为false
       ignoreStyle: false, //将工作簿转换为json时忽略样式,默认值为false
       ignoreFormula: false, //工作簿转换为json时忽略公式,默认值为false
       saveAsView: false, //包含工作簿转换为json时格式化字符串的结果,默认为false
       rowHeadersAsFrozenColumns: false, //将工作簿转换为json时将行头视为冻结列,默认值为false
       columnHeadersAsFrozenRows: false, //将工作簿转换为json时将列标题视为冻结行,默认值为false
       includeAutoMergedCells: true //将工作簿转换为json时,将自动合并的单元格包含为实际合并的单元格。
                                                   };
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-12 17:00:26
9#
您好,我这边试了一下没有重现您的问题:


image.png22719420.png

我的测试Demo如下。

demo.zip

1.72 KB, 下载次数: 1

回复 使用道具 举报
刘大青
注册会员   /  发表于:2023-12-12 17:21:50
10#
Joestar.Xu 发表于 2023-12-12 17:00
您好,我这边试了一下没有重现您的问题:

我这边用的是 下面这种方式合并的 是不是不支持导出合并单元格呢
var table = _sheet.tables.findByName('tableRecords')
        var tableRange = table.dataRange()
        //获取数据区域的前两列
        var range = new GC.Spread.Sheets.Range(tableRange.row, tableRange.col, tableRange.rowCount, 14);

        //数据区域列方向上自动合并显示

        _sheet.autoMerge(range, GC.Spread.Sheets.AutoMerge.AutoMergeDirection.none);
        _sheet.autoMerge(range, GC.Spread.Sheets.AutoMerge.AutoMergeDirection.column, GC.Spread.Sheets.AutoMerge.AutoMergeMode.restricted);
        NB.getSpread.resumePaint();
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部