diff options
| author | Randy Morgan <[email protected]> | 2012-03-21 23:00:28 +0900 |
|---|---|---|
| committer | Randy Morgan <[email protected]> | 2012-03-21 23:00:28 +0900 |
| commit | bdf77ceb217753b7e09dd54ef1e0a3842859d1b1 (patch) | |
| tree | a410da1d9320879fb04c85910c734c4678efbcad /lib/axlsx/workbook/worksheet/table.rb | |
| parent | 778142d9175da18026068599146cb7507fb4bc5f (diff) | |
| download | caxlsx-bdf77ceb217753b7e09dd54ef1e0a3842859d1b1.tar.gz caxlsx-bdf77ceb217753b7e09dd54ef1e0a3842859d1b1.zip | |
tiny bit of restructuring
Diffstat (limited to 'lib/axlsx/workbook/worksheet/table.rb')
| -rw-r--r-- | lib/axlsx/workbook/worksheet/table.rb | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/axlsx/workbook/worksheet/table.rb b/lib/axlsx/workbook/worksheet/table.rb new file mode 100644 index 00000000..831040f3 --- /dev/null +++ b/lib/axlsx/workbook/worksheet/table.rb @@ -0,0 +1,97 @@ +# encoding: UTF-8 +module Axlsx + # Table + # @note Worksheet#add_table is the recommended way to create tables for your worksheets. + # @see README for examples + class Table + + + # The reference to the table data + # @return [String] + attr_reader :ref + + # The name of the table. + # @return [String] + attr_reader :name + + # The style for the table. + # @return [TableStyle] + attr_reader :style + + # Creates a new Table object + # @param [String] ref The reference to the table data. + # @param [Sheet] ref The sheet containing the table data. + # @option options [Cell, String] name + # @option options [TableStyle] style + def initialize(ref, sheet, options={}) + @ref = ref + @sheet = sheet + @style = nil + @sheet.workbook.tables << self + @name = "Table#{index+1}" + options.each do |o| + self.send("#{o[0]}=", o[1]) if self.respond_to? "#{o[0]}=" + end + yield self if block_given? + end + + # The index of this chart in the workbooks charts collection + # @return [Integer] + def index + @sheet.workbook.tables.index(self) + end + + # The part name for this table + # @return [String] + def pn + "#{TABLE_PN % (index+1)}" + end + + # The relation reference id for this table + # @return [String] + def rId + "rId#{index+1}" + end + + # The name of the Table. + # @param [String, Cell] v + # @return [Title] + def name=(v) + DataTypeValidator.validate "#{self.class}.name", [String], v + if v.is_a?(String) + @name = v + end + end + + + # The style for the table. + # TODO + # def style=(v) DataTypeValidator.validate "Table.style", Integer, v, lambda { |arg| arg >= 1 && arg <= 48 }; @style = v; end + + # Table Serialization + # serializes the table + def to_xml + builder = Nokogiri::XML::Builder.new(:encoding => ENCODING) do |xml| + xml.table(:xmlns => XML_NS, :id => index+1, :name => @name, :displayName => @name.gsub(/\s/,'_'), :ref => @ref, :totalsRowShown => 0) { + xml.autoFilter :ref=>@ref + xml.tableColumns(:count => header_cells.length) { + header_cells.each_with_index do |cell,index| + xml.tableColumn :id => index+1, :name => cell.value + end + } + xml.tableStyleInfo :showFirstColumn=>"0", :showLastColumn=>"0", :showRowStripes=>"1", :showColumnStripes=>"0", :name=>"TableStyleMedium9" + #TODO implement tableStyleInfo + } + end + builder.to_xml(:save_with => 0) + end + + private + + # get the header cells (hackish) + def header_cells + header = @ref.gsub(/^(\w+)(\d+)\:(\w+)\d+$/, '\1\2:\3\2') + @sheet[header] + end + end +end |
