miércoles, 7 de noviembre de 2007

Como crear un excel y Zip en Ruby On Rails

como puse en unos post anteriores, para crear excel y Zip en ruby, se necesitan 2 gemas.

bueno aqui el codigo que sirve para aquello, un poco modificado para que se entienda



#inicio de pagina .rb ( esto va en los controllers )
# incluyo iconv por la siemple razon que los acentos en UTF8 se cambian cuando la codificación de caracteres es diferente
require 'iconv'
# la gema de excel
require "spreadsheet/excel"
include Spreadsheet
# para ZIP
require 'zip/zip'


# inicio de codigo
class Excel < style="color: rgb(255, 255, 51);"> layout nil

def excel
# pongo fecha solo para saber cuando se crearon los excel en formato aca de dia-mes-año
fecha =Date.today.strftime("%d-%m-%Y")
#aqui pongo el nombre del archivo a crear
nombre_archivo = "/tmp/excel_#{fecha}.xls"
# creo una pequeña funcion para cambiar la codificacion de carateres de utf8 a occidental
ic = Iconv.new('WINDOWS-1252', 'UTF-8')
# creando el libro excel
workbook = Excel.new(nombre_archivo)
# añado una hoja ( alternativo nombre hoja )
worksheet = workbook.add_worksheet("alternativo")
worksheet.store_colinfo(first=0, last=2, 20, ixfe=0x0F, 0)
# mas info
#escribiendo en la hoja
worksheet.write(FILA,COLUMNA, DATOS)
#cerrando el libro
workbook.close
#cerrando en iconv
ic.close
#creacion archivo ZIP
@archivo = "#{RAILS_ROOT}/tmp/empresas.zip"
Zip::ZipFile.open(@archivo, Zip::ZipFile::CREATE) { |zipfile|
zipfile.add(File.basename(
nombre_archivo),nombre_archivo)
}


#enviando el archivo a descarga del excel
send_file(nombre_archivo, :stream => false)

#enviando el archivo a descarga ZIP
send_file(@archivo, :stream => false)

#eliminado el archivo del temporal....
FileUtils.rm(nombre_archivo)
FileUtils.rm(@archivo)
end


end