Reputation: 2726
I'm using the axlsx ruby gem to create Excel-compatible .xlsx
files. I can't figure out how to override the cell type that is generated by it's automatic type detection. For Active Record model attributes of type string
the gem is setting the Excel cell format to General, but I want it to use Text explicitly. That way I can avoid stripping leading zeros off of zip codes, etc.
Anybody know how to accomplish this?
Upvotes: 15
Views: 16746
Reputation: 11
For gem versions gem 'axlsx', '2.1.0.pre'
, gem 'axlsx_rails'
in order to have the file columns in text type should specify both style and type
default_style = worksheet.styles.add_style({ format_code: '@' })
worksheet.add_row ['0012687'], :types => [:string], :style => [default_style]
Upvotes: 1
Reputation: 61
format_code: '@' will work for you. Please find below code for reference.
def default_data_type_as_string
@xlsx_package = Axlsx::Package.new
@workbook = @xlsx_package.workbook
@worksheet = @workbook.add_worksheet(:name => "Introduction")
default_style = @workbook.styles.add_style({ format_code: '@' })
row_data_array = ['1', '2%', '3$']
@worksheet.add_row row_data_array, :style => [nil, default_style, nil]
@xlsx_package.serialize('default_data_type_as_string.xlsx')
end
Upvotes: 6
Reputation: 2460
You can override the type of data using the types option on add row.
Something like:
worksheet.add_row ['0012342'], :types => [:string]
Grab me on irc (JST) if you need any help getting that to work.
Best
randym
I've added an example for this to examples/example.rb in the repo.
wb.add_worksheet(:name => "Override Data Type") do |sheet|
sheet.add_row ['dont eat my zeros!', '0088'] , :types => [nil, :string]
end
https://github.com/randym/axlsx/blob/master/examples/example.rb#L349
Upvotes: 41