Rails 对 Excel文件导入时间格式处理

  • 问题

在用Ruby对Excel文档导入功能开发的时候,遇到过这样一个问题,导入数据创建的记录里面所有时间字段不是为了nil就是都是错误的时间。

只有在Mac使用Office Excel把时间重新编辑,然后保存一下后,才有正确时间数据保存下来,后来通过Log才发现,在windows Excel下面保存的时间都是Float类型,翻了下资料后才知道,Excel保存时间就是通过Float类型的,然后根据时间从1899,12,30 再加上这个Float天数算出来最终时间。

可以用这样公式计算出真正时间:

  DateTime.new(1899,12,30) + excel_float_val.days
  • 例子

    • 使用 Roo Gem 来对Excel等文档进行读取

    • Excel导入实例代码

  def import_csv
    name = params[:file].original_filename                    #赋值上传文件名
    directory = "public/files"                                #赋值临时上传文件路径
    path = File.join(directory, name)      
    File.open(path, "wb") { |f| f.write(params[:file].read) } #打开文件
    xls = Roo::Excel.new(path)                                #生成Roo对象
    all_dates_arry = []
    xls.each_with_index do |line, index|                      #假定line[1]为日期行
      #先判断是否为Float,为Float类型,利用上面公式计算日期,否则直接返回
      date = line[1].is_a?(Float)? (DateTime.new(1899,12,30) + line[1].days) : line[1]
      all_dates_arry << date
    end
    all_dates_arry
  end
  

定制我们自己的 JQuery 插件

### 介绍---一直来使用过的 JQuery 插件很多,也写过一些 JQuery 库的扩展。然而要真正了解插件如何扩展 JQuery 库需要对 JavaScript prototype 属性有一些基本的了解。虽然说不直接使用,但是 JavaScript prototype...… Continue reading

HTML INPUT TYPE

Published on July 26, 2015

HTTP 信封里的文档

Published on July 16, 2015