sunqinhui 发表于 2024-11-25 11:47:07

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

本帖最后由 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.options.schema.columns;
            let columns = spread.dataManager().tables.columns;

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


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

    });
});

Joestar.Xu 发表于 2024-11-25 12:24:56

您好,要实现这个需求需要调整内部对象,这会给您的项目带来一定的风险,请酌情慎重考虑后再使用:

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

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

spread.dataManager().tables["表1"].columns = null;
spread.dataManager().tables["表1"].options.schema.columns = null;
spread
.dataManager()
.tables["表1"].fetch(true)
.then(() => {
    let table = spread.dataManager().tables["表1"];
    for (const key in map) {
      let ifSet = false;
      if (table.columns) {
      ifSet = true;
      }

      delete table.options.schema.columns;
      delete table.columns;
      delete table._dataSource._data;

      if (ifSet) {
      table.options.schema.columns] = schemaColumns];
      table.columns] = columns];
      table._dataSource._data] = _data];
      }
    }
    designer.refresh();
});

sunqinhui 发表于 2024-11-25 13:45:02

Joestar.Xu 发表于 2024-11-25 12:24
您好,要实现这个需求需要调整内部对象,这会给您的项目带来一定的风险,请酌情慎重考虑后再使用:

没有用, 还是没有数据

Joestar.Xu 发表于 2024-11-25 13:56:06

我这边本地是可以的:

sunqinhui 发表于 2024-11-26 14:41:57

Joestar.Xu 发表于 2024-11-25 13:56
我这边本地是可以的:

那我请问上面的代码要放在哪里运行 我上面已经说明了 在加载文件的回调处做的确实不能用而且还是使用单个数据源操作 没使用上述代码数据是在的 加了后数据反而没了

Joestar.Xu 发表于 2024-11-26 17:28:32

您好,按照您的描述,我在导入的时候执行该代码,仍然能够正常显示数据,我本地无法复现出您的问题,请您提供一个可以复现此问题的Demo,这边复现后帮您调研看看。
页: [1]
查看完整版本: spreadjs v17.1.9 数据源字段保留了中文,但是数据没了