请教各位大大,想将EXCEL导入到MYSQL中,通过SPEARSHEET已经实现,但是这是在excel文件是在服务器上的情况,如何将本地的excel文件直接导入呢?我的想法是,先把文件上传到服务器上,然后导入完再把上传的临时文件删除;不过觉得有点脱了裤子放屁。
求教能不能直接选定本地excel文件,然后直接读取导入到mysql里去。
因为所有数据后期也是以excel文件导入方式输入,所以不考虑使用第三方工具的方法。PS:excel文件内容比较多,直接一条条插入又慢又没效率,通过循环把excel的内容全部插在insert语句后面,效率是提高了,但是好像insert语句的长度有限制,不知道个位大大有没有更好的方法。先谢过了。

解决方案 »

  1.   

    因为所有数据后期也是以excel文件导入方式输入,所以不考虑使用第三方工具的方法。
    这个因果关系是错误的
    恰恰是 因为所有数据后期也是以excel文件导入方式输入,所以首要考虑使用第三方工具,而不是php。
      

  2.   

    phpmyadmin ,sqlyog都支持直接导到mysql里面啊
      

  3.   

    那你就要求一个远程帐号,直接连接数据库主机,在本地php环境写个代码处理excel,直接导入远程数据库。
      

  4.   

    有帐号都可以用phpmyadmin了,不用写,把你的excel格式规划好,直接用phpmyadmin的导入功能。
      

  5.   

    1. 用户上传xls文件, 直接在server 用excel reader 之类的库读excel, 只要格式不太复杂都没问题
    优点: 用户方便
    缺点: 服务器占用资源大2. 用户手动将xls save as 成 csv, server 解读csv插入或直接 SQL LOAD DATA
    优点: 服务器占用资源小
    缺点: 用户要多做一个save as工序
      

  6.   

    你可以这样试试:上传EXCEL文件,直接读取缓冲文件,而不将缓冲另存为其它文件,临时文件会被系统自动删除掉。
    先加载你的SPEARSHEET类
    $excel = $SPEARSHEET->parse($_FILES['excel']['tmp_name']);
    $excel 肯定是一个二维数组:$excel[row][col];
    有长度限制,建议一次导入指定数目,这种事情我做过几次,
    接下来写个循环了,每N(N是你指定的数目,如果字段比较多建议指定小一点数目)条执行一次INSERT。。
    建议一个可以提高效率的办法:先将EXCEL到导出CSV逗号分割格式,再上传CSV,这样可以大大减少EXCEL的体积,使上传速度加快,而且,你就不用SPEARSHEET类来解析EXCEL文件,也大大减少了解释时间,直接用explode()来解析逗号,让数据放到数组里面。再做以上循环。转化过程中注意编码,从EXCEL出来的汉字貌似都是GBK的,如果你程序是UTF的,你要注意转码,要不就老报错。希望对你有用。
      

  7.   

    一群中年人用的话,这就难的了,难的是excel格式的控制(可能乱写),楼上的csv文件的方法挺好.我也经常用.只有先规定制定的格式.才给导.这个需求够呛.
      

  8.   

    首先感谢 webasn,有够详细,和我的思路差不多。看来如果直接用WEB方式没有更好的方法了,毕竟和有客户端的方式不一样,所有的处理都必须放到服务器上去,就不知道能不能执行本地脚本,处理完了直接丢服务器,好像可以减轻服务器的压力。
      

  9.   

    这个貌似很困难,毕竟是B/S模式的要在本地执行,默认的浏览器肯定不支持,你可以写插件或者是JAVASCRIPT开启FILE权限,这样你要用户区设置自己浏览器什么的,从用户体验上来说是不推荐的。还是考虑如何在服务器方面优化吧,要不然B/S就没多大意义了。
      

  10.   

    你可以在上传时自动处理如果一定要在本地上传,建议你用mysql odbc在excel中写一VBA,远程连接mysql服务器,直接存数据库
      

  11.   

    fxs_2008 这一招太狠了吧,万一出点什么错,数据库死成什么样都不知道,之所以要直接用EXCEL一条条插,就是还要在中间检查错误,没办法。