奇葩的需求

2021-07-31 16:17:28 +08:00
 overthemoon

组长要求实现 Excel 导入时,不管 Excel 的标题位置顺序和数量怎么变化,都能插入到对应的数据库字段里面,这种需求怎么实现? 后端用 java

5890 次点击
所在节点    程序员
41 条回复
imn1
2021-07-31 16:19:41 +08:00
先排序再导入啰
potatowish
2021-07-31 16:29:00 +08:00
就算这个需求再怎么奇葩,你还不是要开发,除非你走?
一个可行的做法是,标题做成可配置的,配置了什么标题,就可以导入这个标题。后台做一个标题名称和字段名的映射就可以了
Suigintou
2021-07-31 16:38:55 +08:00
这个类型需求我遇到跟奇特的,就是 Excel 内好几个类别的数值,没有特点和规律,要它们自己分类到相应名称排序下,我想了一宿没有想明白。
Kiriya
2021-07-31 16:45:24 +08:00
很明显是用来导报表给领导看用的🐶
yitingbai
2021-07-31 16:52:37 +08:00
这样不算奇葩需求, 这个需求很有必要, 能够提升易用性, 否则导入的时候还得担心字段顺序问题, 处理也很简单啊,读到内存中, 自己排一下序呗
eric96
2021-07-31 17:02:00 +08:00
excel 标题映射到实体或 map 的 key 这个,你是需要实现这个吧
easyexcel,阿里的类库可以用
512357301
2021-07-31 18:03:22 +08:00
这不是组长要求的,这是需求方要求的,我是需求方我也这么要求,这种导入方式才是最符合认知的,但也是最增加开发工作量的。。。,一般这种需求在产品调研阶段就被产品经理怼回去了,压根不会到研发,现在只能说明需求方比较强势😂
导入的字段数量介于必选字段数量和总字段数量之间,且对字段顺序不做要求
你想象一下前端小弟有没有在调用 web 接口传参的也跟你商量这样来传参呢,每次只传需要的参数,参数顺序不按照你规定的来,而是随机排列😉
zoharSoul
2021-07-31 18:13:14 +08:00
@512357301 #7
easyexcel 直接映射不就可以吗
这很简单啊,

再说前端 web 接口传参顺序随机排列咋了, 他排出花也没关系啊
zzzzzzc
2021-07-31 18:15:58 +08:00
这不是个很正常的需求吗
overthemoon
2021-07-31 19:16:06 +08:00
@zoharSoul 有相关 api 吗,我研究研究
overthemoon
2021-07-31 19:16:20 +08:00
@512357301 你是如何实现的~
overthemoon
2021-07-31 19:16:43 +08:00
@eric96 好的谢谢,我回头看下~
pengtdyd
2021-07-31 19:20:22 +08:00
说实话这个需求我觉的简单,但是侧面反映了你们公司的产品是个垃圾,没有话语权。
harde
2021-07-31 19:24:59 +08:00
很正常的需求吧,做映射表就可以。
wangkun025
2021-07-31 19:28:13 +08:00
header = array1
rows = rows array
row
record = [header, row].transpose
insert(record)

大概这么个思路,别闲麻烦。
wangkun025
2021-07-31 19:29:50 +08:00
http://railscasts.com/episodes/396-importing-csv-and-excel
上面链接是 Ruby on Rails 的实现。估计你用不上。
gBurnX
2021-07-31 20:59:08 +08:00
这种活,在业界称为 ETL,有专用的工具。

如果你要自己处理,大致流程如下:

1.访问数据表,获取该表所有业务字段,以及每个业务字段的类型。

2.访问 Excel 表,获取该表所有业务字段,以及每个字段的类型。

3.遍历 1 的数据集,在 2 里找对应的,建立 1 与 2 的对应关系。此时注意异常的处理,比如找到 1 对多的情况,比如 1 有但 2 没有的缺失情况。

4.根据 3 的对应关系,开始从 2,分批往数据库导入数据。此时注意异常的处理,比如类型转换失败,比如长度超过限制,比如 2 的某个 row 是 empty 或 null 。

5.输出处理情况以及错误信息。

ps.这种活,自己写,一点都不难,只是非常麻烦,非常容易写错。第一次写,一定要用小批量数据,做好调试与测试。
jack778
2021-07-31 21:06:17 +08:00
easypoi 能满足这个需求,前提是必填项不能没有
xuanbg
2021-07-31 22:37:51 +08:00
这个需求最正常不过了,人家就算不提,咱也得替人家想到不是?具体实现我的 GitHub 里面有,自己找一下吧。
overthemoon
2021-07-31 23:07:27 +08:00
@xuanbg
@jack778
@gBurnX
@wangkun025
@wangkun025
@harde
@pengtdyd
@zhengxu5511
@zoharSoul
@512357301
@eric96
是根据 Excel 的中文标题找到数据库对应的字段,并插入数据,兄弟萌你们确定知道我想说的是啥吗,我想知道有啥现成的 java 框架可以实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/792876

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX