V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hackingwu
V2EX  ›  程序员

有必要导出一个 100W 数据的 Excel

  •  3
     
  •   hackingwu ·
    hackingwu · 2020-10-20 08:41:25 +08:00 · 9715 次点击
    这是一个创建于 1527 天前的主题,其中的信息可能已经有所发展或是发生改变。

    产品想要导出数据到 Excel,想要导出的数据量最多可能会到 100w 的数据量。Excel 文件估计会有 200MB 。 我觉得这个需求是很不合理和没用。请问大家有类似的需求吗 ,使用过程中有遇到什么问题吗?

    87 条回复    2020-10-21 17:14:42 +08:00
    woahishui
        1
    woahishui  
       2020-10-20 08:45:39 +08:00 via Android
    导出呗,又不是很不好做,有现成的几分钟就搞定了
    hbolive
        2
    hbolive  
       2020-10-20 08:46:08 +08:00
    2007 以上版本,单页最大行数是 1048576 行,别超了就行
    liuzhaowei55
        3
    liuzhaowei55  
       2020-10-20 08:46:49 +08:00 via Android
    可以确认下数据导出后如何使用,数据毕竟还是拿来用的,除非对方准备跑路了。
    Leigg
        4
    Leigg  
       2020-10-20 08:51:44 +08:00 via Android   ❤️ 3
    100w 的数据他怎么看,打开都卡死他电脑,还想统计?一个数据库的数据怎么可能直接导出到一个 excel,那还要数据库干嘛,说到这里最主要我不是吐槽产品,他是不懂这个数据量级已经大到一种程度,没办法用 excel 查看了,你作为技术,先把这个情况告知他,如果他还觉得 ok,那行你先做。
    这种需求是无脑的,你最好问他有什么数据统计需求,直接用 SQL 查出来给他就行了。
    XDy0
        5
    XDy0  
       2020-10-20 08:52:34 +08:00   ❤️ 14
    别问,问就让你分页导,条件查询导,百分比导,前后导。。。。。。。
    weizhen199
        6
    weizhen199  
       2020-10-20 08:53:34 +08:00
    搞成破真 excel(csv
    xuanbg
        7
    xuanbg  
       2020-10-20 08:53:56 +08:00
    有,但我不会去实现这种需求,而是告诉用户可以分批导出。其实一般智商在线的,自己就找到办法了,根本不会来找我。
    CheckTime
        8
    CheckTime  
       2020-10-20 09:00:14 +08:00   ❤️ 2
    把英国那个新冠病例丢失的报道给上面看
    pizalo
        9
    pizalo  
       2020-10-20 09:01:15 +08:00
    也不算离谱吧,只不过超 100w 的数据就只能拆分下
    xiangyuecn
        10
    xiangyuecn  
       2020-10-20 09:02:58 +08:00   ❤️ 4
    随便啦,导个 csv 就 ok 啦,这种人会以为 csv 和 xls(x)是同样的东西,反正默认都是显示的 excel 的图标。
    nutting
        11
    nutting  
       2020-10-20 09:04:39 +08:00
    是在页面下载导出?用的人多吗,考虑带宽,对服务器影响。另外就是导出后到底能不能打开和流畅查看。
    guisheng
        12
    guisheng  
       2020-10-20 09:10:46 +08:00
    先给他生成一个 100w 数据的 excel 发给他 玩玩。
    zyxbcde
        13
    zyxbcde  
       2020-10-20 09:14:08 +08:00 via Android
    让导就导呗,也不麻烦,100 多万还不至于卡死,最多慢点,wps 好像把 100 万放开了。虽然可能觉得不够高大上,但是不动脑子方面 excel 完胜。
    palmers
        14
    palmers  
       2020-10-20 09:17:01 +08:00
    100w 数据给他了 机器差一点 打开都需要好久 甚至打不开 所以也就失去了导出查看的意义 如果是导出然后二次加工, 我建议可以使用其他途径比如 直接通过大数据抽数 或者提供查询接口 ; 或者导出多个 excel 或者一个 excel 多个 sheet 页
    clf
        15
    clf  
       2020-10-20 09:18:51 +08:00   ❤️ 1
    导出到 csv 吧。导出其实还好,导入的坑比较多。

    导出的时候可以考虑做个限制,同时同用户只允许创建一个导出任务,当然不做限制也无所谓~记得做好前端的交互,数据量大的时候下载文件的 API 接口响应时间长,可能会超时。避免用户以为没反应点击按钮多次(点击一次后就限制,刷新后点击提示已经有导出任务在运行)
    考虑做进度条的形式,后端最好是做成判断完条件+条件下导出数据不为空就直接返回开始导出的任务 ID,然后在异步任务里实时显示导出进度,完成后前端下载。
    raymanr
        16
    raymanr  
       2020-10-20 09:20:47 +08:00   ❤️ 2
    我来安慰下楼主吧, 我遇到过之前的人给其他部门做的 vba 查询导出 excel , 导出了 100 万行, 90 列, 表格里面充斥着数据透视表, 整个表 1 个多 G

    i5 + 16G 电脑需要十多分钟才可以打开, 后来数据量继续增加

    终于 vba 的 copyFromRecord 撑不住了, 我试着改成 openpyxl 生成, 通宵都没运行完, 后头直接给他生成了个 csv, 他嫌里面不能包含数据透视表, 有自己琢磨去了

    看到还有和你家产品经理差不多的**, 心里有没有好受一点?
    raymanr
        17
    raymanr  
       2020-10-20 09:22:06 +08:00
    根据我和这种**打交道的经验, 别和他争, 白痴只会把你拉到和他同样的层次, 然后用丰富的经验打败你

    反正公司给钱, 做就行了
    GeruzoniAnsasu
        18
    GeruzoniAnsasu  
       2020-10-20 09:24:56 +08:00 via Android
    需求是有取舍的
    就算一个需求 10%的情况下没法用,70%的情况下不好用,20%实验室环境能用

    但假如甲方客户只需要满足 1%情况下的需求,售后能麻烦自己替客户搞定 80%情况下不好用但能实现的需求,那为什么不做呢

    在前场看来这可能是一个一下覆盖了客户 90%场景的好 feature,只有写代码的才会在 10%的瓶颈上心力交瘁。对于想要这个 feature 的客户来说,到达那 10%的瓶颈是后面加钱才考虑的事
    li02
        19
    li02  
       2020-10-20 09:33:52 +08:00
    200MB 的 EXCEL,一个 sheet 100w 行
    levelworm
        20
    levelworm  
       2020-10-20 09:33:56 +08:00 via Android
    导 csv 不就行了,太大了让他用 power query 导入,一千万行都行。
    wakzz
        21
    wakzz  
       2020-10-20 09:37:40 +08:00
    这种海量数据,坚决不用 excel,坑太多了。楼主要怼回去,最多搞 csv 导出,海量数据用 excel 简直是想屁吃
    opengps
        22
    opengps  
       2020-10-20 09:45:47 +08:00 via Android
    只是行数据的话,用 csv,真需要套用公式样式,那就手动把 csv 转 xls
    GeruzoniAnsasu
        23
    GeruzoniAnsasu  
       2020-10-20 09:45:56 +08:00 via Android   ❤️ 1
    因为导出 excel 这个需求在做产品的时候实在太常见了,所以想围绕 excel 再说一些以前写代码从来没有观察到的有意思的事

    为啥客户非得要把你产品平台的数据导成 excel ?
    因为这是他的 kpi 。总有文章强调不要把管理当成工作本身 /管理即工作,但这恰恰是管理即工作广泛性的体现。你的产品不给他做一个展现自己工作成果的功能,他老板怎么知道他到底有没有用到这个花钱买来的玩意?他怎么证明自己做了“管理”这件事情?

    好,那为啥非得 excel 不可?——很简单,因为很可能他们有一个 oa,月报就是上传一个 excel 文件,并且其它格式不支持。或者干脆办公电脑是瘦终端
    没法查看其它文件也无法与外界交换其它文件。并且拿到这个报告的中层很可能工作就是把各个小弟交上来的 excel 复制粘贴一下变成自己的报告。

    好,那,一个文件打开要半小时根本没法看怎么办
    ——如果你是领导,你不能让下面人交给你之前先整理过吗?
    ——如果你是销售,你不也是站在领导立场的吗,你不会建议领导交给小弟处理吗?
    ——如果你就是小弟,蛤蛤,领导让你加班 12 小时明天上线你有得选吗


    所以你看,用这个功能的人根本没资格说它不好用,并且用的人还依赖它给自己生产 kpi,懂我意思不咯



    看过这一圈回头想自己写过的那些 bug 就都释然了:bug 是产品的一部分,不服别买,要修加钱
    yujs777
        24
    yujs777  
       2020-10-20 09:46:46 +08:00
    我这边数据部门有一个 50W 的数据导出 excl 的需求,其实这种需求本来就不合理,但是人家给钱给时间,做也就做了。

    主要还是注意内存溢出问题。然后响应时间比较长,注意调整一些代理或路由的默认超时时间。尽量用 csv 。比较吃服务器资源可以考虑做个限流。
    ylsc633
        25
    ylsc633  
       2020-10-20 09:50:30 +08:00
    单个 excel 差不多 限制 一百万左右

    有需求就做呗 只要不影响性能
    zarte
        26
    zarte  
       2020-10-20 09:53:08 +08:00
    凭啥说不合理?数据量大能 csv 就用这个要不然处理起来麻烦。
    raymanr
        27
    raymanr  
       2020-10-20 09:55:07 +08:00
    @GeruzoniAnsasu 这个问题我倒是了解过,问了让我帮导出 100W*90 数据的人

    他要把数据连接到数据透视表发给大领导

    为何不能用 csv + powerQuery? 因为大领导用得 mac, 不支持 powerQuery

    为何不用拖拽类的 olap 分析工具? 因为数据库是 mysql,对于复杂查询能查几个小时

    为何不能换 olap 数据库? 因为小领导觉得 mysql 是天下第一好的数据库,同时很多数据抽取程序和 mysql 耦合太高

    所以这 TM,我只能说你们爱咋咋地吧,什么工具什么结果你们都定好了,然后让我摸一下代码就能 xlsx 文件变小,程序速度变快吗?
    KennyMcCormick
        28
    KennyMcCormick  
       2020-10-20 09:59:13 +08:00
    问就导呗,别人要怎么用不管你的事。
    GeruzoniAnsasu
        29
    GeruzoniAnsasu  
       2020-10-20 10:05:58 +08:00 via Android
    @raymanr

    hhh 产品:哥们就吃了这碗屎吧,就恶心一下大家都好过,没人会怪你的,瞎整都行,能有就行,吃吧


    屎山都是这么来的
    fhsan
        30
    fhsan  
       2020-10-20 10:10:55 +08:00
    合理,我以前经常导
    fhsan
        31
    fhsan  
       2020-10-20 10:12:31 +08:00
    100w 的数据 200m,电脑好点,几分钟打开,他们这些人都习惯了,除非他们先不打开了才不会让你导出
    realpg
        32
    realpg  
       2020-10-20 10:13:46 +08:00
    100 行数据 硬盘稍微快点 很快就能解决啊
    先导出 CSV 这类不需要逻辑的
    然后变成 CSV 以后,无论搞啥都不会拖累数据库服务器了
    爱转啥格式有啥需求就转啥
    甚至可以用 VB6+EXCEL COM 弄个通用的转格式,然后把这个程序和 CSV 丢给跟你提出需求的人让他在自己机器上跑还能看见进度……省的在你机器上跑半天他们还催你
    WytheHuang
        33
    WytheHuang  
       2020-10-20 10:16:09 +08:00
    很正常的,我司系统必备导出 excel 功能。几乎每个模块都有,复杂 excel 表格也有。
    geektony
        34
    geektony  
       2020-10-20 10:22:00 +08:00   ❤️ 2
    面对 B 端用户,所有需求都「合理」
    princelai
        35
    princelai  
       2020-10-20 10:26:36 +08:00
    导 CSV,
    CSV 优点:存储速度快,打开速度快,没有行数限制

    XLSX 优点:体积比 CSV 小

    XLSX 存储和打开可能比 CSV 慢一倍
    chengfeng
        36
    chengfeng  
       2020-10-20 10:27:33 +08:00
    你们这算什么,我们现在是导出 100W 已经实现了,下一步是 1000W 哈哈哈哈
    chaosjohn
        37
    chaosjohn  
       2020-10-20 10:32:12 +08:00
    让给导 excel 数据,我都是反手一个 CSV 过去,想要 xls/xlsx,自己另存为吧
    seanseek
        38
    seanseek  
       2020-10-20 10:38:49 +08:00
    之前导过很多这种,xls 有行数限制,建议 csv,整个后台任务,倒完邮件发他
    Cloutain
        39
    Cloutain  
       2020-10-20 11:10:39 +08:00
    绝大部分产品就是屎山堆积,做就完了,管那么多干啥呢,哈哈哈
    galileo1214
        40
    galileo1214  
       2020-10-20 11:30:27 +08:00
    我 1600w 的数据都随便导,postgre,直接 csv
    Obrigado0815
        41
    Obrigado0815  
       2020-10-20 11:38:13 +08:00
    我只知道,用浏览器导出会卡死。
    lifeintools
        42
    lifeintools  
       2020-10-20 11:38:23 +08:00
    建议 CSV....
    zjuster
        43
    zjuster  
       2020-10-20 11:57:57 +08:00
    CSV 啊。
    100M 的 Excel 是什么电脑才能打开的?大部分产品经理配置的电脑是打不开的,还可能丢数据。

    我们之前处理这种数据,是用 google 的 openrefine 部署到服务器上,比 Excel CSV 都方便。
    rund11
        44
    rund11  
       2020-10-20 12:06:52 +08:00 via Android
    导出过 30 万,感觉挺好。只要肯请吃饭,说啥都好办
    rund11
        45
    rund11  
       2020-10-20 12:07:51 +08:00 via Android
    @Leigg #4 用 wps 似乎不会卡死,最近试过
    Vincentcow
        46
    Vincentcow  
       2020-10-20 12:29:00 +08:00
    恐怕没有多少办公电脑能跑得动这种表格
    现在 Office 要拼配置才能正常运转了吗
    ho121
        47
    ho121  
       2020-10-20 12:34:20 +08:00
    100W 数据应该不是最终需求,而是用来汇总成各种报表的。

    如果不想给 100W 的源数据,那么接到的需求可能是各种报表需求,比 100W 数据还要麻烦
    PanJiaChen
        48
    PanJiaChen  
       2020-10-20 13:11:13 +08:00
    可以将 excel 拆成多个,然后压缩成一个 zip 导出,压缩率还是很高的。单个拆解后的 excel 打开也不会很卡。
    hotsun168
        49
    hotsun168  
       2020-10-20 13:24:23 +08:00
    CSV 格式有的场景无法完全替代 Excel,我这边的场景下,导出时很多字段有前导 0,或者超过 15 位的整数,以及时间戳要用 yyyy-MM-dd 的形式标识。
    这些字段在 CSV 用 Excel 打开的时候,前导 0 会因为数值类型不显示,很大的整数会被用科学技术法表示,时间戳是斜杠分隔。
    业务那边的要求,一般是直接打开不作任何处理的情况下要完整显示。
    Angzk3348
        50
    Angzk3348  
       2020-10-20 13:41:53 +08:00
    大佬出现了, 这个是 vue-element-admin 的 PanJiaChen 吗 #48
    isnullstring
        51
    isnullstring  
       2020-10-20 13:50:51 +08:00
    垃圾需求
    kajweb
        52
    kajweb  
       2020-10-20 14:04:43 +08:00
    @hotsun168 导出 tabel 头的 html 格式试试。
    icchux
        53
    icchux  
       2020-10-20 14:10:14 +08:00
    @XDy0 哈哈哈,兄弟,内行啊~~~~
    rocksolid
        54
    rocksolid  
       2020-10-20 14:12:36 +08:00
    杠一下,csv 图标和 excel 是不一样的 哈哈
    yulitian888
        55
    yulitian888  
       2020-10-20 14:15:17 +08:00
    有必要告诉你们领导,有一种叫做 Access 的东西,是 Excel 他们家兄弟。
    实际上,不存在单纯为了导出而导出的情况。导出来必然是要用的啊,后续的处理有多少坑,完全取决于你们准备把自己埋得多深。
    有这么个新闻,不妨给你们领导感受一下: https://tech.sina.com.cn/d/i/2020-08-11/doc-iivhvpwy0355694.shtml
    rocksolid
        56
    rocksolid  
       2020-10-20 14:18:34 +08:00
    @hotsun168 如果只是看数据的话,你的这些问题 前面加个单引号就解决了
    hotsun168
        57
    hotsun168  
       2020-10-20 14:24:31 +08:00
    @kajweb #52 业务要求中限定了格式,不接受其他格式。
    hack
        58
    hack  
       2020-10-20 14:31:14 +08:00
    导出 csv,产品是不是最近报了 python 的班。。。
    Erroad
        59
    Erroad  
       2020-10-20 14:34:52 +08:00
    经常导百万级的表,习惯了,csv 50w 切一个文件,zip 打包下。前导 0 之类的用=""包起来
    Mithril
        60
    Mithril  
       2020-10-20 14:35:15 +08:00
    刚刚做了一个类似的沙雕需求。。。
    最重要的就是要保证你这个 100W 的查询不会堵死数据库。。。
    反正我是做了个优先级最低的 task,每次导出 1W 数据到 CSV,然后 task sleep 一下。整个系统就这一个 task 的实例,同一时间就只有一个人能用。
    反正你愿意导这 100W 你就等着去吧,这 100W 的 CSV 本身就巨大。
    fx777
        61
    fx777  
       2020-10-20 14:44:56 +08:00
    我是产品,这个产品是个完全不懂技术的吧。
    100w 的 Excel,他用的什么电脑,他能打开 流畅运行吗?想啥呢。。
    zoharSoul
        62
    zoharSoul  
       2020-10-20 14:52:35 +08:00
    根据我和这种**打交道的经验, 别和他争, 白痴只会把你拉到和他同样的层次, 然后用丰富的经验打败你
    反正公司给钱, 做就行了

    +1
    TimePPT
        63
    TimePPT  
       2020-10-20 14:58:47 +08:00
    线上导出上线 10w 行,大于这个数的要申请报备 😂
    TimePPT
        64
    TimePPT  
       2020-10-20 14:59:09 +08:00
    @TimePPT 对了,说的是之前呆过的两家公司
    miaoxinwei
        65
    miaoxinwei  
       2020-10-20 15:09:58 +08:00
    正常吧
    RuiQ
        66
    RuiQ  
       2020-10-20 15:35:45 +08:00
    做过类似的需求 估计没你的十分之一多 Excel 直接就打不开卡死了
    meeop
        67
    meeop  
       2020-10-20 15:50:08 +08:00
    技术上没问题,数据量再大 10 倍都没问题,我试过打开和导出 100w 行,也就一两 G 内存,打开没问题,值得一提的是,微软比 wps 打开速度和占用内存都节约 1 倍

    不过这个需求可能不合理,有巨大数据泄露风险,这种导出如果不是为了倒入到另一个系统,是没有意义的,人又不可能阅读这么多信息
    xuewuchen
        68
    xuewuchen  
       2020-10-20 16:25:11 +08:00
    这么大当量的数据导到 EXCEL 表干啥用啊。。。。
    co1q84
        69
    co1q84  
       2020-10-20 16:32:35 +08:00 via Android
    有可能你到了后,他数据放 powerbi 分析展示用啊。。。。至于为啥是 excel,有可能他只用过这。
    foxni
        70
    foxni  
       2020-10-20 16:34:51 +08:00
    第一次碰到这个需求我跟你对反应一样,但是甲方爸爸就是要这么搞,你能怎么办?还得保证页面不卡死!
    keventseng
        71
    keventseng  
       2020-10-20 16:35:33 +08:00
    如果是放到 BI 用为啥要用 execl 导出导入?建议你问清楚产品用途是啥~
    wangsd
        72
    wangsd  
       2020-10-20 16:50:43 +08:00
    你管他呢,不麻烦的话做就完了,有些人你没法理解他的脑回路。
    12tall
        73
    12tall  
       2020-10-20 16:51:15 +08:00
    实测 Excel 超过 6w 行就。。。。很卡
    raymanr
        74
    raymanr  
       2020-10-20 16:56:07 +08:00
    @12tall 同志你这就很单纯了,一般用到这种表格的都是公司有点地位的,卡?先加几根内存,还卡?小 x, 去京东给我买台最好的电脑,CPU 要 i9 的,内存配个 64G,贵?万把块而已,小钱
    andeluOS
        75
    andeluOS  
       2020-10-20 17:16:57 +08:00
    理论上是可行的,就是非常慢,最高曾经导出过 1.06g 的一个机场数据
    user8341
        76
    user8341  
       2020-10-20 17:50:16 +08:00
    @raymanr 这样说来还省钱了?开发复杂的系统更费钱?
    raymanr
        77
    raymanr  
       2020-10-20 17:56:56 +08:00
    @user8341 省钱不省钱不知道,我领导就是这种人。。。用最强悍的电脑,跑最垃圾的算法,跑得慢没关系,我们通宵跑,人家训练模型不是也要训练几个星期么?我们 sum 数据 sum 一晚上是很合理的
    user8341
        78
    user8341  
       2020-10-20 18:02:01 +08:00
    @raymanr 领导心态真好。
    yhkang
        79
    yhkang  
       2020-10-20 18:52:16 +08:00
    你们公司有没有 hive 之类的大数据平台,让产品自己去写 SQL 自己导哈哈哈
    Yannis1990
        80
    Yannis1990  
       2020-10-20 19:46:30 +08:00
    我是产品,找研发导过这种数据。700w 行,20 列,300mb,用 pandas 处理。如果你能提供 mysql 或者 hive 之类的,不需要给我文件。
    xiaochong0302
        81
    xiaochong0302  
       2020-10-20 20:23:29 +08:00
    @XDy0 哭死,还是全部出来吧
    doudou1523102
        82
    doudou1523102  
       2020-10-20 21:38:48 +08:00
    xls 可以多导出,你可以分 sheet,或者每个导出 10W 条,然后多个文件,打个压缩包给到前台
    NoString
        83
    NoString  
       2020-10-20 21:42:07 +08:00
    之前有个同事找我要历史所有激活用户的设备 id 好家伙给导了 4.3G..... 然后从服务器开端口让他自己下,他终于意识到自己的局限和**
    zc1249274251
        84
    zc1249274251  
       2020-10-20 21:43:55 +08:00
    我这还有让导出超 200w 数据到 excel 的需求。。。
    zoomyale
        85
    zoomyale  
       2020-10-20 22:53:58 +08:00
    绝大多数情况是因为需求方自己也不知道要干啥,怕领导找他要数据,还有就是平台能力建设不到位,如果有能跑 SQL 的探查工具,就可以丢给他们自己玩了
    Heanes
        86
    Heanes  
       2020-10-21 09:04:51 +08:00
    有可能是财务工作方面的需要,搞个分批异步下载,文件生成完成后通知一下,再出个页面让他自己下载去,限定文件保存期限
    whywhywhy
        87
    whywhywhy  
       2020-10-21 17:14:42 +08:00
    @Erroad 感谢,之前一直解决不了这个问题(左边补 0 )。。果然 CSV 一时爽,一直 CSV 一直爽得不要不要的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1062 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 19:16 · PVG 03:16 · LAX 11:16 · JFK 14:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.