找回密码
 立即注册

QQ登录

只需一步,快速开始

樱花飞舞

注册会员

10

主题

25

帖子

83

积分

注册会员

积分
83
樱花飞舞
注册会员   /  发表于:2023-12-5 14:13  /   查看:814  /  回复:9
2金币
本帖最后由 樱花飞舞 于 2023-12-5 14:14 编辑

image.png661349181.png


问题一:如图,接口中返回的duration字段为“1 day”但页面显示的数据却是“1天”,请问在哪里配置。


问题二:在表格中手动编辑后的数据通过什么方法可以获取到,整个更新后的源数据。

最佳答案

查看完整内容

您好,我这边加了一个按钮,在修改完毕后点击按钮输出信息到控制台就可以看见更改的数据了: 代码如下:

9 个回复

倒序浏览
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-5 14:13:54
来自 8#
您好,我这边加了一个按钮,在修改完毕后点击按钮输出信息到控制台就可以看见更改的数据了:

image.png894951476.png

代码如下:

  1. import "./App.css";
  2. import React, { useState, useRef } from "react";
  3. import * as GC from "@grapecity/spread-sheets";
  4. import { SpreadSheets, Worksheet } from "@grapecity/spread-sheets-react";
  5. import "@grapecity/spread-sheets-tablesheet";
  6. import "@grapecity/spread-sheets-ganttsheet";
  7. import "../node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css";
  8. import "@grapecity/spread-sheets-resources-zh";
  9. GC.Spread.Common.CultureManager.culture("zh-cn");

  10. function App() {
  11.   // state
  12.   const [spreadVal, setSpreadVal] = useState<any>(null);

  13.   // init
  14.   let initSpread = function (value: any) {
  15.     let spread = value;
  16.     setSpreadVal(spread);
  17.     initGanttSheetWithChildrenData(spread);
  18.   };

  19.   // function getBaseApiUrl() {
  20.   //   return "https://developer.mescius.com/spreadjs/demos/server/api"
  21.   // }

  22.   function initGanttSheetWithChildrenData(spread: any) {
  23.     // var tableName = "Gantt_Children";
  24.     // var baseApiUrl = getBaseApiUrl();
  25.     // var apiUrl = baseApiUrl + "/" + tableName;
  26.     var dataManager = spread.dataManager();
  27.     var myTable1 = dataManager?.addTable("myTable1", {
  28.       batch: true,
  29.       // remote: {
  30.       //   read: {
  31.       //     url: apiUrl
  32.       //   }
  33.       // },
  34.       data: [
  35.         {
  36.           id: 1,
  37.           parentId: null,
  38.           taskNumber: 1,
  39.           name: "Plan for Project Server 2013 deployment",
  40.           duration: "1 day",
  41.           predecessors: "",
  42.           level: 1,
  43.           resource: 1,
  44.           cost: 100,
  45.         },
  46.       ],
  47.       schema: {
  48.         hierarchy: {
  49.           type: "ChildrenPath",
  50.           column: "children",
  51.         },
  52.       },
  53.     });
  54.     var ganttSheet = spread.addSheetTab(
  55.       2,
  56.       "GanttSheet3",
  57.       GC.Spread.Sheets.SheetType.ganttSheet
  58.     );
  59.     var view = myTable1?.addView("myView1", [
  60.       { value: "taskNumber", caption: "NO.", width: 60 },
  61.       { value: "name", caption: "Task Name", width: 200 },
  62.       { value: "duration", caption: "Duration", width: 90 },
  63.       { value: "predecessors", caption: "Predecessors", width: 120 },
  64.     ]);
  65.     view?.fetch().then(function () {
  66.       ganttSheet.bindGanttView(view);
  67.     });
  68.   }

  69.   function click() {
  70.     let spread = spreadVal;
  71.     console.log(spread.dataManager().tables.myTable1.getChanges(), "<<<<");
  72.   }

  73.   return (
  74.     <div className="sample-tutorial">
  75.       <div className="sample-spreadsheets">
  76.         <SpreadSheets
  77.           workbookInitialized={(spread) => initSpread(spread)}
  78.         ></SpreadSheets>
  79.         <button onClick={click}>Click</button>
  80.       </div>
  81.     </div>
  82.   );
  83. }

  84. export default App;
复制代码
SpreadJS 17.0.10 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-5 16:50:35
2#
您好,

问题一:不确定您想要配置的是什么,是想将1天显示为1 Day吗?

问题二:甘特图依赖于集算表,所以需要结合集算表相关的API才能实现,以官网的例子为例:

image.png616725463.png

添加上图的代码到指定位置后,修改任意项的数据,执行submitChanges接口即可获取修改的数据项:

image.png887035827.png

将这个数据项与之前获取的数据源结合后即可获取到更新后的数据。
SpreadJS 17.0.10 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
樱花飞舞
注册会员   /  发表于:2023-12-5 17:15:18
3#
Joestar.Xu 发表于 2023-12-5 16:50
您好,

问题一:不确定您想要配置的是什么,是想将1天显示为1 Day吗?

感谢回复!

关于问题一我想要实现的效果是,将接口返回的“1Day”字段渲染到页面上显示为“1天";

问题二我是使用data字段将数据传入到table中,而非使用remote属性直接写api接口的形式,请问该怎么获取我在页面上修改某个单元格后的数据呢?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-5 18:07:36
4#
您好,

问题一:我没太明白,也就是说现在您的接口返回的是:1 day,渲染到页面上的也是1 day吗?如果是这样的话您确认一下您SpreadJS的语言是否为中文,如果为中文无误的话,您提供一个可以复现这个问题的Demo,我们这边调研一下看看是什么原因导致的。

问题二:您参考下面这行代码试试看能否满足您的需求:

spread.dataManager().tables.myTable.getChanges();
SpreadJS 17.0.10 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
樱花飞舞
注册会员   /  发表于:2023-12-5 22:55:52
5#
Joestar.Xu 发表于 2023-12-5 18:07
您好,

问题一:我没太明白,也就是说现在您的接口返回的是:1 day,渲染到页面上的也是1 day吗?如果是 ...

您好,问题一已解决,麻烦您看一下问题二,谢谢

gantt_demo.zip

181.14 KB, 下载次数: 34

甘特图demo

回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-6 10:24:14
6#
您好,抱歉之前没有解释清楚,我上面提供的代码只是一个示例,需要您根据您代码中的实际table名称去更改,如下图:

image.png541073607.png

此处的myTable应该改为myTable1。

另外,我这边尝试运行您的Demo报错了:

image.png256351927.png

您试试看将myTable改掉后能否解决您的问题,如仍不能解决您这边再描述一下错误的情况,这边调研一下。
SpreadJS 17.0.10 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
樱花飞舞
注册会员   /  发表于:2023-12-6 11:38:54
7#
本帖最后由 樱花飞舞 于 2023-12-6 11:41 编辑
Joestar.Xu 发表于 2023-12-6 10:24
您好,抱歉之前没有解释清楚,我上面提供的代码只是一个示例,需要您根据您代码中的实际table名称去更改, ...

您好!

我按照您的方法我修改的代码如下:

企业微信截图_17018336997820.png59548338.png

在页面上聚焦单元格,手动修改数据后,没有执行console,您看我这样写是对的吗?谢谢

image.png314782714.png

另:demo中的setCalcService方法报错,代码中并未使用此方法,报错的原因未知
回复 使用道具 举报
樱花飞舞
注册会员   /  发表于:2023-12-6 12:51:25
9#
Joestar.Xu 发表于 2023-12-6 12:24
您好,我这边加了一个按钮,在修改完毕后点击按钮输出信息到控制台就可以看见更改的数据了:

可以了,谢谢你
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-6 13:33:11
10#
不客气哈,那就先结贴了,后续有其他问题的话随时开新帖提问哈。
SpreadJS 17.0.10 | GcExcel 7.1.2 已发布~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部