找回密码
 立即注册

QQ登录

只需一步,快速开始

sunqinhui

初级会员

24

主题

91

帖子

229

积分

初级会员

积分
229
sunqinhui
初级会员   /  发表于:2024-11-25 11:47  /   查看:39  /  回复:5
1金币
本帖最后由 sunqinhui 于 2024-11-25 11:51 编辑

spreadjs v17.1.9 数据源字段保留了中文 但是数据没了

这里是fetch在获取文件 spread.open() 中的回调函数中刷新字段
fetch(CONTENT_PATH, { mode: 'cors' }).then(res => res.blob()).then(blob => {
    spread.open(blob, function () {

        // 刷新字段
        for (const t in spread.dataManager().tables) {

            let schemaColumns =
                spread.dataManager().tables[t].options.schema.columns;
            let columns = spread.dataManager().tables[t].columns;

            let map = {};
            for (const key in schemaColumns) {
                if (schemaColumns[key].dataName) {
                    map[schemaColumns[key].dataName] = key;
                }
            }


            spread.dataManager().tables[t].columns = null;
            spread.dataManager().tables[t].options.schema.columns = null;
            spread
                .dataManager()
                .tables[t].fetch(true)
                .then(() => {
                    let option = spread.dataManager().tables[t].options;
                    for (const key in map) {
                        let ifSet = false;
                        if (spread.dataManager().tables[t].columns[key]) {
                            ifSet = true;
                        }
                        delete option.schema.columns[key];
                        delete spread.dataManager().tables[t].columns[key];
                        if (ifSet) {
                            option.schema.columns[map[key]] = schemaColumns[map[key]];
                            spread.dataManager().tables[t].columns[map[key]] =
                                columns[map[key]];
                        }
                    }
                    designer.refresh();
                });
        }

    });
});

5 个回复

倒序浏览
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:3 天前
沙发
您好,要实现这个需求需要调整内部对象,这会给您的项目带来一定的风险,请酌情慎重考虑后再使用:

  1. let schemaColumns =
  2.   spread.dataManager().tables["表1"].options.schema.columns;
  3. let columns = spread.dataManager().tables["表1"].columns;
  4. let _data = spread.dataManager().tables["表1"]._dataSource._data;

  5. let map = {};
  6. for (const key in schemaColumns) {
  7.   if (schemaColumns[key].dataName) {
  8.     map[schemaColumns[key].dataName] = key;
  9.   }
  10. }

  11. spread.dataManager().tables["表1"].columns = null;
  12. spread.dataManager().tables["表1"].options.schema.columns = null;
  13. spread
  14.   .dataManager()
  15.   .tables["表1"].fetch(true)
  16.   .then(() => {
  17.     let table = spread.dataManager().tables["表1"];
  18.     for (const key in map) {
  19.       let ifSet = false;
  20.       if (table.columns[key]) {
  21.         ifSet = true;
  22.       }

  23.       delete table.options.schema.columns[key];
  24.       delete table.columns[key];
  25.       delete table._dataSource._data[key];

  26.       if (ifSet) {
  27.         table.options.schema.columns[map[key]] = schemaColumns[map[key]];
  28.         table.columns[map[key]] = columns[map[key]];
  29.         table._dataSource._data[map[key]] = _data[map[key]];
  30.       }
  31.     }
  32.     designer.refresh();
  33.   });
复制代码
回复 使用道具 举报
sunqinhui
初级会员   /  发表于:3 天前
板凳
Joestar.Xu 发表于 2024-11-25 12:24
您好,要实现这个需求需要调整内部对象,这会给您的项目带来一定的风险,请酌情慎重考虑后再使用:

没有用, 还是没有数据
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:3 天前
地板
我这边本地是可以的:

动画 (2).gif333695678.png
回复 使用道具 举报
sunqinhui
初级会员   /  发表于:前天 14:41
5#
Joestar.Xu 发表于 2024-11-25 13:56
我这边本地是可以的:

那我请问上面的代码要放在哪里运行 我上面已经说明了 在加载文件的回调处做的  确实不能用而且还是使用单个数据源操作 没使用上述代码数据是在的 加了后数据反而没了
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:前天 17:28
6#
您好,按照您的描述,我在导入的时候执行该代码,仍然能够正常显示数据,我本地无法复现出您的问题,请您提供一个可以复现此问题的Demo,这边复现后帮您调研看看。

2024-11-26 17-17-45.zip

6.92 MB, 下载次数: 1

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