组长要求实现 Excel 导入时,不管 Excel 的标题位置顺序和数量怎么变化,都能插入到对应的数据库字段里面,这种需求怎么实现? 后端用 java
1
imn1 2021-07-31 16:19:41 +08:00
先排序再导入啰
|
2
potatowish 2021-07-31 16:29:00 +08:00 via iPhone
就算这个需求再怎么奇葩,你还不是要开发,除非你走?
一个可行的做法是,标题做成可配置的,配置了什么标题,就可以导入这个标题。后台做一个标题名称和字段名的映射就可以了 |
3
Suigintou 2021-07-31 16:38:55 +08:00 via iPhone
这个类型需求我遇到跟奇特的,就是 Excel 内好几个类别的数值,没有特点和规律,要它们自己分类到相应名称排序下,我想了一宿没有想明白。
|
4
Kiriya 2021-07-31 16:45:24 +08:00
很明显是用来导报表给领导看用的🐶
|
5
yitingbai 2021-07-31 16:52:37 +08:00
这样不算奇葩需求, 这个需求很有必要, 能够提升易用性, 否则导入的时候还得担心字段顺序问题, 处理也很简单啊,读到内存中, 自己排一下序呗
|
6
eric96 2021-07-31 17:02:00 +08:00
excel 标题映射到实体或 map 的 key 这个,你是需要实现这个吧
easyexcel,阿里的类库可以用 |
7
512357301 2021-07-31 18:03:22 +08:00 via Android
这不是组长要求的,这是需求方要求的,我是需求方我也这么要求,这种导入方式才是最符合认知的,但也是最增加开发工作量的。。。,一般这种需求在产品调研阶段就被产品经理怼回去了,压根不会到研发,现在只能说明需求方比较强势😂
导入的字段数量介于必选字段数量和总字段数量之间,且对字段顺序不做要求 你想象一下前端小弟有没有在调用 web 接口传参的也跟你商量这样来传参呢,每次只传需要的参数,参数顺序不按照你规定的来,而是随机排列😉 |
8
zoharSoul 2021-07-31 18:13:14 +08:00
|
9
zzzzzzc 2021-07-31 18:15:58 +08:00 via iPhone
这不是个很正常的需求吗
|
10
overthemoon OP @zoharSoul 有相关 api 吗,我研究研究
|
11
overthemoon OP @512357301 你是如何实现的~
|
12
overthemoon OP @eric96 好的谢谢,我回头看下~
|
13
pengtdyd 2021-07-31 19:20:22 +08:00
说实话这个需求我觉的简单,但是侧面反映了你们公司的产品是个垃圾,没有话语权。
|
14
harde 2021-07-31 19:24:59 +08:00
很正常的需求吧,做映射表就可以。
|
15
wangkun025 2021-07-31 19:28:13 +08:00
header = array1
rows = rows array row record = [header, row].transpose insert(record) 大概这么个思路,别闲麻烦。 |
16
wangkun025 2021-07-31 19:29:50 +08:00
http://railscasts.com/episodes/396-importing-csv-and-excel
上面链接是 Ruby on Rails 的实现。估计你用不上。 |
17
gBurnX 2021-07-31 20:59:08 +08:00 1
这种活,在业界称为 ETL,有专用的工具。
如果你要自己处理,大致流程如下: 1.访问数据表,获取该表所有业务字段,以及每个业务字段的类型。 2.访问 Excel 表,获取该表所有业务字段,以及每个字段的类型。 3.遍历 1 的数据集,在 2 里找对应的,建立 1 与 2 的对应关系。此时注意异常的处理,比如找到 1 对多的情况,比如 1 有但 2 没有的缺失情况。 4.根据 3 的对应关系,开始从 2,分批往数据库导入数据。此时注意异常的处理,比如类型转换失败,比如长度超过限制,比如 2 的某个 row 是 empty 或 null 。 5.输出处理情况以及错误信息。 ps.这种活,自己写,一点都不难,只是非常麻烦,非常容易写错。第一次写,一定要用小批量数据,做好调试与测试。 |
18
jack778 2021-07-31 21:06:17 +08:00
easypoi 能满足这个需求,前提是必填项不能没有
|
19
xuanbg 2021-07-31 22:37:51 +08:00
这个需求最正常不过了,人家就算不提,咱也得替人家想到不是?具体实现我的 GitHub 里面有,自己找一下吧。
|
20
overthemoon OP @xuanbg
@jack778 @gBurnX @wangkun025 @wangkun025 @harde @pengtdyd @zhengxu5511 @zoharSoul @512357301 @eric96 是根据 Excel 的中文标题找到数据库对应的字段,并插入数据,兄弟萌你们确定知道我想说的是啥吗,我想知道有啥现成的 java 框架可以实现 |
21
hobbitlhy 2021-07-31 23:27:17 +08:00
@overthemoon 中文标题和数据库注释对应吗?
|
22
liuzhaowei55 2021-07-31 23:35:55 +08:00 via Android
正常应该就是前端或者后端读出来一点数据响应到前段让用户选择首行是否是标题行,每一列对应模型的数据,数据量不大还可以再检验一下行列数据格式。
|
23
liuzhaowei55 2021-07-31 23:38:07 +08:00 via Android
@liuzhaowei55 不要让提需求的人,讲数据方案,就讲需求好了,可能要的并不是一匹跑得更快的🐴
|
24
gBurnX 2021-07-31 23:50:40 +08:00
|
25
overthemoon OP @hobbitlhy 和数据库英文字段一一映射
|
26
overthemoon OP @gBurnX 算是第三个把
|
27
koast 2021-08-01 00:52:43 +08:00 via Android
感觉楼上各位没有答非所问呀...需求就是写起来有点麻烦,但是也算正常需求吧,处理好各种意外情况就好,那种表经过一堆人以后结构一定会变得乱乱的...
|
28
harde 2021-08-01 01:19:31 +08:00
映射表
name , column 1 、编号, id 2 、名称, name 读取 excel 、获取列名,通过映射表转换出字段。 不是这个需求么???? |
29
jiayong2793 2021-08-01 02:11:12 +08:00
实现这个需求这么麻烦吗?我见公司的.net 几行代码就可以实现导入导出了
|
30
gBurnX 2021-08-01 04:57:47 +08:00
|
31
BraveChi 2021-08-01 07:51:36 +08:00
非常正常的需求,甚至我觉着大部分的导入都是这样的,另外我遇到的系统都是这样的,难道你是按照顺序指定数据库字段导入的? 不太可能吧? 设置按照顺序指定数据库字段反而麻烦吧?
|
32
rekulas 2021-08-01 09:04:56 +08:00
如果想吐槽就安心吐槽
如果想咨询大家就详细描述下具体场景,这样起了个标题就想大家给出思路的,谁做得到呢 就你这个标题,瞬间能想出几十种可能 |
33
niub 2021-08-01 10:17:47 +08:00
|
34
loopinfor 2021-08-01 10:28:31 +08:00
应该还要实现标题对不上的时候可以让用户从标题列表里面手动指定 Excel 列和数据库字段的对应关系
|
35
gamexg 2021-08-01 11:37:33 +08:00
根据标题行决定当前列属于哪个字段
这个应该是常规需求吧? 当然如果标题可能有错别字、别名等,还要求自动识别出来,那么会是大麻烦。 否则仅仅的大小写错误、空格等并不麻烦。 读取标题行,根据标题行生成一个字典,key 为字段名,value 为列索引值。 然后需要什么字段时,那字段名去查询下字典,得到列索引值,读取对应列即可。 或者是我理解错需求了? |
36
LowBi 2021-08-01 12:48:47 +08:00 via Android
其实还是按照后台生成一个模板,再把内容录入进行导入,这也算是一种标准化吧,不然你那样后面随便乱来,找的还是你,吃力不讨好
|
37
no1xsyzy 2021-08-01 12:57:52 +08:00
告诉你个消息,我自己做的 hack 都是 csv.DictReader 然后 func(**dct) 传参的。
根据 key 来确定对应关系不合理?你难道要求 json 序列化出来有序吗? 大不了 if else if else if 啊? 建议从编程第二堂课开始回炉 |
38
Mountain 2021-08-01 14:52:55 +08:00
这么多人都解释不明白的,能让你如此强烈的感到奇葩的需求,是不是各个目标字段不在同一张表甚至不在同一个库里啊?
|
39
DinnyXu 2021-08-01 16:17:25 +08:00
正常的操作不是会提供一个 excel 导入的模板吗,填写的时候对应着模板里面约定好的字段顺序就好了
|
40
hytex 2021-08-02 09:47:15 +08:00
easypoi 呀,有对应的文档
|
41
LouisGuo 2021-08-03 09:04:34 +08:00
这个需求挺好的啊,产品还帮你考虑了实现的细节了
|