Sha256: 587ef3c971ceb36a542d965a0b199d5db7bd23368af848300ebdf3fdd07a0d66

Contents?: true

Size: 1.94 KB

Versions: 1

Compression:

Stored size: 1.94 KB

Contents

require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'

class Ld::Excel
  attr_accessor :excel, :path

  # 构造函数,如果未传path则是创建一个新的excel,   如果传了path,则打开这个excel,不过打开前会验证后缀与是否存在
  def initialize path = nil
    if path
      if path.match(/.xls$/)
        if File::exist? path
          @excel = Spreadsheet.open path
          @path = path
          puts "打开文件:  #{path}"
        else
          raise "文件不存在:  #{path}"
        end
      else
        raise "只能打开.xls结尾的文件"
      end
    else
      @excel = Spreadsheet::Workbook.new
      puts "创建新的Excel实例"
    end
  end

  # 打开一个excel
  def self.open path
    self.new path
  end

  # 获取一页
  def open_sheet name
    Ld::Sheet.open @excel, name
  end

  # 刷新 重读一次
  def flush
    @excel = Ld::Excel.open @path
  end

  # content_url = "Sheet1?b13:m27-g.j.k.(14:18)"
  def read address_path_full, simple = false, filter_nil = false
    raise "缺少?, 需要在'?'左边指定sheet的名称" if !address_path_full.match(/\?/)
    sheet_name, address_path = address_path_full.split('?')
    @current_sheet = open_sheet sheet_name
    arrs = @current_sheet.read address_path, simple
    # 除去不完整数据
    if filter_nil
      (arrs.size - 1).downto(0) do |i|
        arr = arrs[i]
        if arr[0] == nil or arr[1] == nil
          arrs.delete_at i
        end
      end
    end

    arrs
  end

  # 保存文件
  def save path
    puts "这个操作将会覆盖了这个文件:#{path}" if File.exist? path
    @excel.write path
    puts "保存excel成功:#{path}"
    self
  end

  def new_sheet name
    Ld::Sheet.new @excel, name
  end

  def write_sheet sheet_name, &block
    sheet = new_sheet sheet_name
    block.call sheet
    sheet.save
  end

  def self.create hash, &block
    excel = Ld::Excel.new
    block.call excel
    excel.save hash[:file_path]
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ld-0.3.2 lib/ld/excel/excel.rb