Class: SalesClicExporter::Document::Excel

Inherits:
Base
  • Object
show all
Defined in:
lib/sales_clic_exporter/excel.rb

Overview

Describes an Excel document

Constant Summary collapse

Default_cell_index =

Par défaut on commence à écrire sur la colone 1 au lieu de 0 (sauf pour les titres)

1
Default_column_width =

Taille des colones par défaut, en caractères (sauf la 1ère) Dans la classe on se sert de @default_column_width qui peut prendre cette valeur ou celle passée en option lors de l’instanciation

23
Default_first_column_width =

Taille de la première colone (qui sert à décaler le texte, pour un effet de présentation

5
Extension =

Extension used to generate an Excel file

'xls'

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#h_table, #line, #v_table, #write

Constructor Details

#initialize(client_filename, token = '') ⇒ Excel

Returns a new instance of Excel.



28
29
30
31
32
# File 'lib/sales_clic_exporter/excel.rb', line 28

def initialize(client_filename, token = '')
  self.token                = token
  @client_filename          = client_filename
  @server_filename          = client_filename + token
end

Instance Attribute Details

#tokenObject

Ensures that the filename on the server is uniq



10
11
12
# File 'lib/sales_clic_exporter/excel.rb', line 10

def token
  @token
end

Instance Method Details

#filenameObject

Nom du document sur le disque



118
119
120
# File 'lib/sales_clic_exporter/excel.rb', line 118

def filename
  "#{@server_filename}.#{Extension}"
end

#finish_initialize(options = {}) ⇒ Object

This is where the magic happens. It’s called from #compute_export in export_to_spreadsheet.rb



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/sales_clic_exporter/excel.rb', line 35

def finish_initialize(options = {})
  # Chargement de la MVJ
  # La tableau désigne les arguments passés en ligne de commande à la MVJ
  filedir = File.dirname(__FILE__) + '/..'
  memory  = ['-Xms256M', '-Xmx512M'] # Memory settings
  Rjb::load("#{filedir}/apache-poi/poi-3.7-20101029.jar", memory)

  # Import des packages Java
  @file_class               = Rjb::import('java.io.FileOutputStream')
  @workbook_class           = Rjb::import('org.apache.poi.hssf.usermodel.HSSFWorkbook')
  @cell_style_class         = Rjb::import('org.apache.poi.hssf.usermodel.HSSFCellStyle')
  @cell_range_address_class = Rjb::import('org.apache.poi.ss.util.CellRangeAddress')
  @region_util_class        = Rjb::import('org.apache.poi.hssf.util.HSSFRegionUtil')
  @font_class               = Rjb::import('org.apache.poi.hssf.usermodel.HSSFFont')

  # Création fichier et feuilles de calcul
  @book = @workbook_class.new
  # Reglage du nom de la première feuille
  @sheet = @book.createSheet(filename.capitalize)

  # Ligne en cours d'écriture, afin de récupérer le dernier index écrit
  @current_row_index = 0

  # Créé plusieurs style de formattage de manière statique.
  # Il faut faire attention à ne pas créer les style dans une boucle, leur nombre
  # étant limité. C'est pour cela qu'on les créé une fois, et qu'on ne fait ensuite
  # que les assigner à des cellules
  create_styles(options)

  # Application du formattage par défaut en fonction du Hash d'options
  # - réglage taille des colones
  # - réduction taille de la première colone
  default_formatting(options)
end

#freezepaneObject

Créé un freezepane horizontal dans le document (fige la partie supérieure, la partie inférieure est toujours srollable) (fonction scinder/fixer sous Excel/Openoffice)



112
113
114
115
# File 'lib/sales_clic_exporter/excel.rb', line 112

def freezepane
  @sheet.createFreezePane(0, @current_row_index)
  self
end

#nameObject

Nom ‘formatté’ du document, fournis à l’utilisateur



123
124
125
# File 'lib/sales_clic_exporter/excel.rb', line 123

def name
  "#{@client_filename}.#{Extension}"
end

#newline(size = nil) ⇒ Object

Rajout d’une ligne vide



98
99
100
101
102
103
104
105
106
107
# File 'lib/sales_clic_exporter/excel.rb', line 98

def newline(size = nil)
  if size
    row = @sheet.createRow(@current_row_index)
    row.setHeight(size * 20) # Configuration de la hauteur en 1/20 de caractère
  end

  increment_row_index

  self
end

#pathObject

Path du document



128
129
130
131
# File 'lib/sales_clic_exporter/excel.rb', line 128

def path
  root_path = defined?(Rails) ? "#{Rails.root}/" : "/"
  "#{root_path}tmp/#{filename}"
end

#saveObject

Print du document



134
135
136
137
138
139
# File 'lib/sales_clic_exporter/excel.rb', line 134

def save
  # Ecriture des données dans un fichier du répertoire /tmp de Rails
  out = @file_class.new(self.path)
  @book.write(out)
  out.close
end

#title_1(text) ⇒ Object

Titre principal du document



81
82
83
# File 'lib/sales_clic_exporter/excel.rb', line 81

def title_1(text)
  title(text, 1)
end

#title_2(text) ⇒ Object

Titre secondaire



86
87
88
# File 'lib/sales_clic_exporter/excel.rb', line 86

def title_2(text)
  title(text, 2)
end

#title_3(text) ⇒ Object

Titre de niveau 3 Par défaut il commence sur la cellule d’index 1, au lieu de 0, car il n’est utilisé que dans le “corps” de la feuille



93
94
95
# File 'lib/sales_clic_exporter/excel.rb', line 93

def title_3(text)
  title(text, 3)
end

#worksheet_nameObject

Nom de la 1ère worksheet



76
77
78
# File 'lib/sales_clic_exporter/excel.rb', line 76

def worksheet_name
  @book.getSheetName(0)
end

#worksheet_name=(name) ⇒ Object

Réglage du nom de la 1ère worksheet



71
72
73
# File 'lib/sales_clic_exporter/excel.rb', line 71

def worksheet_name=(name)
  @book.setSheetName(0, name)
end