请选择
进入手机版
|
继续访问电脑版
学习路径
视频资源
开发者学堂
悬赏
活动
招聘
登录
/
注册
用户名
Email
自动登录
找回密码
密码
登录
立即注册
只需一步,快速开始
搜索
AI搜索
SpreadJS
活字格
Wyn
GcExcel Java
公开课
新手入门
新手训练营
技术认证
好友
帖子
收藏
勋章
设置
我的收藏
退出
首页
›
SpreadJS & GcExcel专区
›
求助中心
›
查看内容
发新帖
miaoyj
注册会员
3
主题
7
帖子
46
积分
注册会员
注册会员, 积分 46, 距离下一级还需 154 积分
注册会员, 积分 46, 距离下一级还需 154 积分
积分
46
133
金币
3
主题
7
帖子
最新发帖
【8.2.3】输出公式计算后的数据
[已处理]
GcExcel 8.2.3 Table绑定数据源后getDataSource结果存在null
miaoyj
注册会员
/ 发表于:
2025-11-21 14:03
/
查看:
94
/ 回复:
4
1
金币
本帖最后由 Wilson.Zhang 于 2025-11-26 09:57 编辑
产品:GcExcel
版本:8.2.3
调研编号:GCEXCEL-11855
Last Review:2025-11-26
当前进展:对Table列设置列公式,并对数据源中该字段不设置值,绑定数据源后遍历该列的各单元格访问值。
定义record1.city = "=B3 & C3";
结果输出的文件ExpandBoundRows.xlsx和控制台打印的worksheet.getDataSource():中City是=B3 & C3,并没有执行公式计算
@Data
@NoArgsConstructor
static class SalesData {
private List<SalesRecord> sales;
}
@Data
@NoArgsConstructor
static class SalesRecord {
private String area;
private String city;
private String category;
private String name;
private double revenue;
}
public static void main(String[] args) {
Workbook workbook = new Workbook();
SalesData datasource = new SalesData();
datasource.sales = new ArrayList<>();
SalesRecord record1 = new SalesRecord();
record1.area = "North America";
record1.city = "=B3 & C3";
record1.category = "Consumer Electronics";
record1.name = "Bose 785593-0050";
record1.revenue = 92800;
datasource.sales.add(record1);
SalesRecord record2 = new SalesRecord();
record2.area = "North America";
record2.city = "New York";
record2.category = "Consumer Electronics";
record2.name = "Bose 785593-0050";
record2.revenue = 92800;
datasource.sales.add(record2);
SalesRecord record3 = new SalesRecord();
record3.area = "South America";
record3.city = "Santiago";
record3.category = "Consumer Electronics";
record3.name = "Bose 785593-0050";
record3.revenue = 19550;
datasource.sales.add(record3);
//#endregion
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Add a table
ITable table = worksheet.getTables().add(worksheet.getRange("B2:F4"), true);
// Set table column data field
table.getColumns().get(0).setDataField("area");
table.getColumns().get(1).setDataField("city");
table.getColumns().get(2).setDataField("category");
table.getColumns().get(3).setDataField("name");
table.getColumns().get(4).setDataField("revenue");
// Set ExpandBoundRows to true
table.setExpandBoundRows(true);
// Binding data to table
table.setBindingPath("sales");
// Set data source
worksheet.setDataSource(datasource);
// Save to an excel file
workbook.calculate();
workbook.save("ExpandBoundRows.xlsx");
System.out.println("worksheet.getDataSource(): " + worksheet.getDataSource());
}
复制代码
最佳答案
Wilson.Zhang
查看完整内容
您好!经调研,了解到GcExcel的数据绑定并非双向绑定,即绑定数据源后修改数据源不会将修改后的数据同步至Worksheet中。 对于您需要对city字段设置公式的需求,可以绑定数据源中各数据对象的city不设置具体值,对该字段所在列设置列公式,这样整列均可根据公式执行计算。然而,因为数据源中不包含该字段的显式值,所以Worksheet:getDataSource()返回值中该字段的值是null。可以通过Table访问指定字段City所在列的数据区域,即IT ...
收藏
回复
4
个回复
最佳答案
Wilson.Zhang
超级版主
/
发表于:2025-11-21 14:03:12
|
显示全部楼层
来自 4
#
您好!经调研,了解到GcExcel的数据绑定并非双向绑定,即绑定数据源后修改数据源不会将修改后的数据同步至Worksheet中。
对于您需要对city字段设置公式的需求,可以绑定数据源中各数据对象的city不设置具体值,对该字段所在列设置列公式,这样整列均可根据公式执行计算。然而,因为数据源中不包含该字段的显式值,所以Worksheet:getDataSource()返回值中该字段的值是null。可以通过Table访问指定字段City所在列的数据区域,即
ITableColumn:getDataBodyRange()
,之后对遍历该区域访问每个单元格中的数据,即city的计算结果,如下代码所示:
IRange range = table.getColumns().get("City").getDataBodyRange();
// 遍历Table City列区域,可以获取到列公式计算结果
for (int i = range.getRow(); i < range.getRow() + range.getRowCount(); i++) {
System.out.println("formula: " + worksheet.getRange(i, range.getColumn()).getFormula());
System.out.println("value: " + worksheet.getRange(i, range.getColumn()).getValue());
}
复制代码
请您知悉。
回复
使用道具
举报
Wilson.Zhang
超级版主
/
发表于:2025-11-21 17:39:33
|
显示全部楼层
2
#
您好!收到反馈,调研后给您同步结论,请耐心等候。
回复
使用道具
举报
Wilson.Zhang
超级版主
/
发表于:2025-11-24 11:22:43
|
显示全部楼层
3
#
您好!您提供的代码片段中,record.1city = "=B3 & C3",如下图所示,这一句代码为数据对象的city设置的值并非公式,而会被当作字符串处理,无法对其运算:
GcExcel不支持数据绑定公式,您使用了Table数据绑定,可以对Table的某列设置列公式,如下代码所示:
table.getColumns().get("City").getDataBodyRange().setFormula("=[@Category] & [@Area]");
复制代码
这样可以确保数据绑定后Table列公式字段中的数据为公式计算结果,访问单元格getValue()结果也是计算结果。然而,由于数据源中设置了列公式的字段其值为null,所以getDataSource的返回结果中该字段值也是null。
关于这一点,我正在调研,调研编号为GCEXCEL-11855,待有结论向您同步。在此之前,您可以针对指定单元格getValue以访问其中的实际数据。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
立即注册
x
回复
使用道具
举报
Wilson.Zhang
超级版主
/
发表于:2025-12-4 12:29:15
|
显示全部楼层
5
#
您好!由于您较长时间未回复,已向您提供解决方案,那就结贴了。如果遇到新问题,欢迎发新帖交流。
回复
使用道具
举报
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
发表回复
返回顶部