axlsx_styler 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +20 -0
- data/README.md +39 -32
- data/Rakefile +18 -4
- data/lib/axlsx_styler.rb +4 -57
- data/lib/axlsx_styler/axlsx_cell.rb +30 -30
- data/lib/axlsx_styler/axlsx_package.rb +17 -0
- data/lib/axlsx_styler/axlsx_styles.rb +36 -0
- data/lib/axlsx_styler/axlsx_workbook.rb +27 -27
- data/lib/axlsx_styler/axlsx_worksheet.rb +26 -26
- data/lib/axlsx_styler/version.rb +1 -1
- data/test/custom_assertions.rb +21 -0
- data/test/dummy_app/Rakefile +7 -0
- data/test/dummy_app/app/assets/javascripts/application.js +0 -0
- data/test/dummy_app/app/assets/stylesheets/application.css +3 -0
- data/test/dummy_app/app/controllers/application_controller.rb +3 -0
- data/test/dummy_app/app/controllers/spreadsheets_controller.rb +7 -0
- data/test/dummy_app/app/models/application_record.rb +3 -0
- data/test/dummy_app/app/views/layouts/application.html.erb +14 -0
- data/{examples/colors_and_borders.rb → test/dummy_app/app/views/spreadsheets/test.xlsx.axlsx} +2 -7
- data/test/dummy_app/config.ru +4 -0
- data/test/dummy_app/config/application.rb +63 -0
- data/test/dummy_app/config/boot.rb +10 -0
- data/test/dummy_app/config/database.yml +25 -0
- data/test/dummy_app/config/environment.rb +5 -0
- data/test/dummy_app/config/environments/development.rb +30 -0
- data/test/dummy_app/config/environments/production.rb +60 -0
- data/test/dummy_app/config/environments/test.rb +41 -0
- data/test/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy_app/config/initializers/inflections.rb +10 -0
- data/test/dummy_app/config/initializers/mime_types.rb +5 -0
- data/test/dummy_app/config/initializers/secret_token.rb +11 -0
- data/test/dummy_app/config/initializers/session_store.rb +8 -0
- data/test/dummy_app/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy_app/config/locales/en.yml +5 -0
- data/test/dummy_app/config/routes.rb +3 -0
- data/test/dummy_app/config/secrets.yml +22 -0
- data/test/dummy_app/db/schema.rb +15 -0
- data/test/dummy_app/db/test.sqlite3 +0 -0
- data/test/dummy_app/log/test.log +730 -0
- data/test/helper_methods.rb +12 -0
- data/test/integration/application_test.rb +18 -0
- data/test/test_helper.rb +29 -5
- data/test/unit/borders_test.rb +127 -0
- data/test/unit/examples_test.rb +20 -0
- data/test/unit/general_test.rb +84 -0
- data/test/unit/merge_styles_test.rb +56 -0
- data/test/unit/serialize_test.rb +34 -0
- data/test/unit/to_stream_test.rb +34 -0
- metadata +136 -56
- data/.gitignore +0 -26
- data/.travis.yml +0 -7
- data/Appraisals +0 -7
- data/Gemfile +0 -4
- data/axlsx_styler.gemspec +0 -37
- data/examples/mixing_styles.rb +0 -22
- data/examples/vanilla_axlsx.md +0 -70
- data/gemfiles/axlsx_2.gemfile +0 -7
- data/gemfiles/axlsx_3.gemfile +0 -7
- data/spreadsheet.png +0 -0
- data/test/cell_test.rb +0 -14
- data/test/integration_test.rb +0 -288
- data/test/workbook_test.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7afaf1eeca35216610277bc48f73ddbff03344a91a3909d80b7ba43b48c7fe5d
|
4
|
+
data.tar.gz: 5cdb2b7dd5bd2a85929271852cdcdc7af2743a7acb6c26bddc0ac2bccab067f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a4e8bd27a92224b7fbe74e5f0cafd11756c8b841029b6485837728cdcb79a1f1dd5dc3f55d669e8ae9d4ea55fc82f5cf75a40742f583e7ca76823c10b5abde7
|
7
|
+
data.tar.gz: 8a9df17a77ae556b9bc799f4c9834d0a436bb54667bece8a799caaf6c13cb66b5c7e69fe0430e3c4a6913ad395e53d2e033f6d4d89ce5c810afe0fbe90220806
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
- **1.0.0 - January 5, 2020**
|
4
|
+
- Switch to the `caxlsx` gem (Community Axlsx) from the legacy unmaintained `axlsx` gem. Axlsx has had a long history of being poorly maintained so this community gem improves the situation.
|
5
|
+
- Require Ruby 2.3+
|
6
|
+
- Improve Package and Styles monkey patches using `prepend`
|
7
|
+
- Removed unnecessary module `AxlsxStyler::Axlsx`
|
8
|
+
- Major test suite improvements
|
9
|
+
- Add Rails dummy app to test suite and test with `axlsx_rails`
|
10
|
+
- **0.2.0**
|
11
|
+
- Add support for `axlsx` v3 (at this time for v3.0.0.pre).
|
12
|
+
- Update test suite to run against both v2 and v3 of `axlsx`
|
13
|
+
- **0.1.7**
|
14
|
+
- Allow mixing vanilla `axlsx` styles and those from `add_style` and `add_border`. See [this example](./examples/mixing_styles.rb)
|
15
|
+
- **0.1.5**
|
16
|
+
- Hide `Workbook#apply_styles` method to make it easier to use.
|
17
|
+
- **0.1.3**
|
18
|
+
- Make border styles customizable.
|
19
|
+
- **0.1.2**
|
20
|
+
- Allow applying multiple style hashes.
|
data/README.md
CHANGED
@@ -1,35 +1,34 @@
|
|
1
|
-
[](https://rubygems.org/gems/axlsx_styler)
|
2
|
-
[](https://travis-ci.org/sakovias/axlsx_styler)
|
3
|
-
|
4
1
|
# axlsx_styler
|
5
2
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
<a href="https://badge.fury.io/rb/axlsx_styler" target="_blank"><img height="21" style='border:0px;height:21px;' border='0' src="https://badge.fury.io/rb/axlsx_styler.svg" alt="Gem Version"></a>
|
4
|
+
<a href='https://travis-ci.org/axlsx-styler-gem/axlsx_styler' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://api.travis-ci.org/axlsx-styler-gem/axlsx_styler.svg?branch=master' border='0' alt='Build Status' /></a>
|
5
|
+
<a href='https://rubygems.org/gems/axlsx_styler' target='_blank'><img height='21' style='border:0px;height:21px;' src='https://ruby-gem-downloads-badge.herokuapp.com/axlsx_styler?label=rubygems&type=total&total_label=downloads&color=brightgreen' border='0' alt='RubyGems Downloads' /></a>
|
6
|
+
|
7
|
+
`axlsx_styler` is a gem that allows you to build clean and maintainable styles for your `axlsx` spreadsheets. Build your spreadsheeet with data and then apply styles later.
|
8
|
+
|
9
|
+
While [`axlsx`](https://github.com/randym/axlsx) is an excellent tool to build Excel spreadsheets in Ruby, the sheets styles are only applied immediately as the row is created. This makes it very difficult to style easily and effectively.
|
10
|
+
|
11
|
+
To solve this issue, `axlsx_styler` was born to allow the separatation of styles from content within your `axlsx` code. It gives you the ability to fill out a spreadsheet with data and apply styles later.
|
10
12
|
|
11
|
-
|
12
|
-
a spreadsheet with data and apply styles later. Paired with
|
13
|
-
[axlsx_rails](https://github.com/straydogstudio/axlsx_rails) this gem
|
14
|
-
allows to build clean and maintainable Excel views in a Rails app. It can also
|
15
|
-
be used outside of any specific Ruby framework as shown in example below.
|
13
|
+
Works well in any Rails app or outside of any specific Ruby framework.
|
16
14
|
|
17
|
-
|
15
|
+
# Usage
|
18
16
|
|
19
|
-
This gem provides a DSL that allows you to apply styles to ranges of cells
|
17
|
+
This gem provides a DSL that allows you to apply styles or borders to ranges of cells.
|
18
|
+
|
19
|
+
## Styles
|
20
20
|
|
21
21
|
```ruby
|
22
22
|
sheet.add_style 'A1:D10', b: true, sz: 14
|
23
23
|
```
|
24
24
|
|
25
|
-
The styles can be overlayed, so that later on you can add another style
|
26
|
-
to cells that already have styles, e.g.
|
25
|
+
The styles can be overlayed, so that later on you can add another style to cells that already have styles.
|
27
26
|
|
28
27
|
```ruby
|
29
28
|
sheet.add_style 'A1:D1', bg_color: 'FF0000'
|
30
29
|
```
|
31
30
|
|
32
|
-
Applying multiple styles as a sequence of Ruby hashes is also possible
|
31
|
+
Applying multiple styles as a sequence of Ruby hashes is also possible.
|
33
32
|
|
34
33
|
```ruby
|
35
34
|
bold = { b: true }
|
@@ -37,25 +36,29 @@ centered = { alignment: { horizontal: :center } }
|
|
37
36
|
sheet.add_style 'A2:D2', bold, centered
|
38
37
|
```
|
39
38
|
|
40
|
-
|
39
|
+
## Borders
|
40
|
+
|
41
|
+
The border style is to draw a thin black border on all four edges of the selected cell range.
|
41
42
|
|
42
43
|
```ruby
|
43
44
|
sheet.add_border 'B2:D5'
|
45
|
+
```
|
46
|
+
|
47
|
+
You can easily customize the border styles.
|
48
|
+
|
49
|
+
```ruby
|
44
50
|
sheet.add_border 'B2:D5', [:bottom, :right]
|
45
51
|
sheet.add_border 'B2:D5', { edges: [:bottom, :right], style: :thick, color: 'FF0000' }
|
46
52
|
```
|
47
53
|
|
48
|
-
Border parameters are optional. The default is to draw a thin black border on all four edges of the selected cell range.
|
49
54
|
|
50
|
-
|
51
|
-
### Example
|
55
|
+
## Example
|
52
56
|
|
53
57
|
Suppose we want create the following spreadsheet:
|
54
58
|
|
55
59
|

|
56
60
|
|
57
|
-
You can apply styles after all data is entered, similar to how you'd create
|
58
|
-
an Excel document by hand:
|
61
|
+
You can apply styles after all data is entered, similar to how you'd create an Excel document by hand.
|
59
62
|
|
60
63
|
```ruby
|
61
64
|
require 'axlsx_styler'
|
@@ -82,15 +85,19 @@ end
|
|
82
85
|
axlsx.serialize 'grocery.xlsx'
|
83
86
|
```
|
84
87
|
|
85
|
-
|
88
|
+
If you try creating this same spreadsheet using only `axlsx`, you will find this is much more difficult. See this [See this example](./examples/vanilla_axlsx.md)
|
89
|
+
|
90
|
+
For more examples, please see the [examples folder](./examples/)
|
91
|
+
|
92
|
+
# Contributing
|
93
|
+
|
94
|
+
We use the `appraisal` gem for testing multiple versions of `axlsx`. Please use the following steps to test using `appraisal`.
|
95
|
+
|
96
|
+
1. `bundle exec appraisal install`
|
97
|
+
2. `bundle exec appraisal rake test`
|
86
98
|
|
99
|
+
# Credits
|
87
100
|
|
88
|
-
|
101
|
+
Created by Anton Sakovich - @sakovias
|
89
102
|
|
90
|
-
|
91
|
-
--------|-------
|
92
|
-
0.2.0 | Add support for `axlsx` major version `3.0.0`. Update test suite to run against v2 and v3 of `axlsx`
|
93
|
-
0.1.7 | Allow mixing vanilla `axlsx` styles and those from `add_style` and `add_border` (see [this example](./examples/mixing_styles.rb))
|
94
|
-
0.1.5 | Hide `Workbook#apply_styles` method to make it easier to use.
|
95
|
-
0.1.3 | Make border styles customizable.
|
96
|
-
0.1.2 | Allow applying multiple style hashes.
|
103
|
+
Maintained by Weston Ganger - @westonganger - Uses `axlsx_styler` within the gem, [`spreadsheet_architect`](https://github.com/westonganger/spreadsheet_architect)
|
data/Rakefile
CHANGED
@@ -1,7 +1,21 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
-
require 'rake/testtask'
|
3
2
|
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
task :test do
|
4
|
+
require 'rake/testtask'
|
5
|
+
|
6
|
+
Rake::TestTask.new(:test) do |t|
|
7
|
+
t.libs << 'lib'
|
8
|
+
t.libs << 'test'
|
9
|
+
t.pattern = 'test/**/*_test.rb'
|
10
|
+
t.verbose = false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
task default: :test
|
15
|
+
|
16
|
+
task :console do
|
17
|
+
require 'axlsx_styler'
|
18
|
+
|
19
|
+
require 'irb'
|
20
|
+
binding.irb
|
7
21
|
end
|
data/lib/axlsx_styler.rb
CHANGED
@@ -1,65 +1,12 @@
|
|
1
1
|
require 'axlsx'
|
2
|
-
|
3
2
|
require 'axlsx_styler/version'
|
3
|
+
|
4
|
+
require 'axlsx_styler/axlsx_package'
|
5
|
+
require 'axlsx_styler/axlsx_styles'
|
4
6
|
require 'axlsx_styler/axlsx_workbook'
|
5
7
|
require 'axlsx_styler/axlsx_worksheet'
|
6
8
|
require 'axlsx_styler/axlsx_cell'
|
7
9
|
|
8
|
-
|
9
|
-
Axlsx::Worksheet.send :include, AxlsxStyler::Axlsx::Worksheet
|
10
|
-
Axlsx::Cell.send :include, AxlsxStyler::Axlsx::Cell
|
11
|
-
|
12
|
-
module Axlsx
|
13
|
-
class Package
|
14
|
-
# Patches the original Axlsx::Package#serialize method so that styles are
|
15
|
-
# applied when the workbook is saved
|
16
|
-
original_serialize = instance_method(:serialize)
|
17
|
-
define_method :serialize do |*args|
|
18
|
-
workbook.apply_styles if !workbook.styles_applied
|
19
|
-
original_serialize.bind(self).(*args)
|
20
|
-
end
|
21
|
-
|
22
|
-
# Patches the original Axlsx::Package#to_stream method so that styles are
|
23
|
-
# applied when the workbook is converted to StringIO
|
24
|
-
original_to_stream = instance_method(:to_stream)
|
25
|
-
define_method :to_stream do |*args|
|
26
|
-
workbook.apply_styles if !workbook.styles_applied
|
27
|
-
original_to_stream.bind(self).(*args)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
class Styles
|
32
|
-
# An index for cell styles
|
33
|
-
# {
|
34
|
-
# 1 => < style_hash >,
|
35
|
-
# 2 => < style_hash >,
|
36
|
-
# ...
|
37
|
-
# K => < style_hash >
|
38
|
-
# }
|
39
|
-
# where keys are Cell#raw_style and values are styles
|
40
|
-
# codes as per Axlsx::Style
|
41
|
-
attr_accessor :style_index
|
42
|
-
|
43
|
-
# Patches the original Axlsx::Styles#add_style method so that plain axlsx
|
44
|
-
# styles are added to the axlsx_styler style_index cache
|
45
|
-
original_add_style = instance_method(:add_style)
|
46
|
-
define_method :add_style do |style|
|
47
|
-
self.style_index ||= {}
|
48
|
-
|
49
|
-
raw_style = {type: :xf, name: 'Arial', sz: 11, family: 1}.merge(style)
|
50
|
-
if raw_style[:format_code]
|
51
|
-
raw_style.delete(:num_fmt)
|
52
|
-
end
|
53
|
-
|
54
|
-
index = style_index.key(raw_style)
|
55
|
-
if !index
|
56
|
-
index = original_add_style.bind(self).(style)
|
57
|
-
self.style_index[index] = raw_style
|
58
|
-
end
|
59
|
-
return index
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
10
|
+
module AxlsxStyler
|
63
11
|
|
64
|
-
end
|
65
12
|
end
|
@@ -1,44 +1,44 @@
|
|
1
1
|
require 'active_support/core_ext/hash/deep_merge'
|
2
2
|
|
3
3
|
module AxlsxStyler
|
4
|
-
module
|
5
|
-
|
6
|
-
attr_accessor :raw_style
|
7
|
-
|
8
|
-
def add_style(style)
|
9
|
-
self.raw_style ||= {}
|
10
|
-
add_to_raw_style(style)
|
11
|
-
workbook.add_styled_cell self
|
12
|
-
end
|
4
|
+
module Cell
|
5
|
+
attr_accessor :raw_style
|
13
6
|
|
14
|
-
|
7
|
+
def add_style(style)
|
8
|
+
self.raw_style ||= {}
|
9
|
+
add_to_raw_style(style)
|
10
|
+
workbook.add_styled_cell self
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
row.worksheet.workbook
|
18
|
-
end
|
13
|
+
private
|
19
14
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
new_style = raw_style.deep_merge style
|
15
|
+
def workbook
|
16
|
+
row.worksheet.workbook
|
17
|
+
end
|
24
18
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
new_style[:border] = style[:border]
|
30
|
-
end
|
19
|
+
def add_to_raw_style(style)
|
20
|
+
# using deep_merge from active_support:
|
21
|
+
# with regular Hash#merge adding borders fails miserably
|
22
|
+
new_style = raw_style.deep_merge style
|
31
23
|
|
32
|
-
|
24
|
+
if with_border?(raw_style) && with_border?(style)
|
25
|
+
border_at = (raw_style[:border][:edges] || all_edges) + (style[:border][:edges] || all_edges)
|
26
|
+
new_style[:border][:edges] = border_at.uniq.sort
|
27
|
+
elsif with_border?(style)
|
28
|
+
new_style[:border] = style[:border]
|
33
29
|
end
|
34
30
|
|
35
|
-
|
36
|
-
|
37
|
-
end
|
31
|
+
self.raw_style = new_style
|
32
|
+
end
|
38
33
|
|
39
|
-
|
40
|
-
|
41
|
-
|
34
|
+
def with_border?(style)
|
35
|
+
!style[:border].nil?
|
36
|
+
end
|
37
|
+
|
38
|
+
def all_edges
|
39
|
+
[:top, :right, :bottom, :left]
|
42
40
|
end
|
43
41
|
end
|
44
42
|
end
|
43
|
+
|
44
|
+
Axlsx::Cell.send(:include, AxlsxStyler::Cell)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module AxlsxStyler
|
2
|
+
module Package
|
3
|
+
|
4
|
+
def serialize(*args)
|
5
|
+
workbook.apply_styles if !workbook.styles_applied
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_stream(*args)
|
10
|
+
workbook.apply_styles if !workbook.styles_applied
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
Axlsx::Package.send(:prepend, AxlsxStyler::Package)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module AxlsxStyler
|
2
|
+
module Styles
|
3
|
+
|
4
|
+
# An index for cell styles
|
5
|
+
# {
|
6
|
+
# 1 => < style_hash >,
|
7
|
+
# 2 => < style_hash >,
|
8
|
+
# ...
|
9
|
+
# K => < style_hash >
|
10
|
+
# }
|
11
|
+
# where keys are Cell#raw_style and values are styles codes as per Axlsx::Style
|
12
|
+
attr_accessor :style_index
|
13
|
+
|
14
|
+
# Ensure plain axlsx styles are added to the axlsx_styler style_index cache
|
15
|
+
def add_style(*args)
|
16
|
+
style = args.first
|
17
|
+
|
18
|
+
self.style_index ||= {}
|
19
|
+
|
20
|
+
raw_style = {type: :xf, name: 'Arial', sz: 11, family: 1}.merge(style)
|
21
|
+
if raw_style[:format_code]
|
22
|
+
raw_style.delete(:num_fmt)
|
23
|
+
end
|
24
|
+
|
25
|
+
index = style_index.key(raw_style)
|
26
|
+
if !index
|
27
|
+
index = super
|
28
|
+
self.style_index[index] = raw_style
|
29
|
+
end
|
30
|
+
return index
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Axlsx::Styles.send(:prepend, AxlsxStyler::Styles)
|
@@ -2,36 +2,36 @@ require 'set'
|
|
2
2
|
require 'active_support/core_ext/hash/deep_merge'
|
3
3
|
|
4
4
|
module AxlsxStyler
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
5
|
+
module Workbook
|
6
|
+
# An array that holds all cells with styles
|
7
|
+
attr_accessor :styled_cells
|
8
|
+
|
9
|
+
# Checks if styles are indexed to make it work for pre 0.1.5 version
|
10
|
+
# users that still explicitly call @workbook.apply_styles
|
11
|
+
attr_accessor :styles_applied
|
12
|
+
|
13
|
+
def add_styled_cell(cell)
|
14
|
+
self.styled_cells ||= Set.new
|
15
|
+
self.styled_cells << cell
|
16
|
+
end
|
17
|
+
|
18
|
+
def apply_styles
|
19
|
+
return unless styled_cells
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
new_style = current_style.deep_merge(cell.raw_style)
|
26
|
-
else
|
27
|
-
new_style = cell.raw_style
|
28
|
-
end
|
29
|
-
|
30
|
-
cell.style = styles.add_style(new_style)
|
21
|
+
styled_cells.each do |cell|
|
22
|
+
if styles.style_index && styles.style_index[cell.style]
|
23
|
+
current_style = styles.style_index[cell.style]
|
24
|
+
new_style = current_style.deep_merge(cell.raw_style)
|
25
|
+
else
|
26
|
+
new_style = cell.raw_style
|
31
27
|
end
|
32
|
-
self.styles_applied = true
|
33
|
-
end
|
34
28
|
|
29
|
+
cell.style = styles.add_style(new_style)
|
30
|
+
end
|
31
|
+
self.styles_applied = true
|
35
32
|
end
|
33
|
+
|
36
34
|
end
|
37
35
|
end
|
36
|
+
|
37
|
+
Axlsx::Workbook.send(:include, AxlsxStyler::Workbook)
|
@@ -1,35 +1,35 @@
|
|
1
1
|
require_relative './border_creator'
|
2
2
|
|
3
3
|
module AxlsxStyler
|
4
|
-
module
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
cell.add_style(style)
|
19
|
-
end
|
4
|
+
module Worksheet
|
5
|
+
# Example to add a single style:
|
6
|
+
# add_style 'A1:B5', b: true, sz: 14
|
7
|
+
#
|
8
|
+
# Example to add multiple styles:
|
9
|
+
# bold = { b: true }
|
10
|
+
# large_text = { sz: 30 }
|
11
|
+
# add_style 'B2:F8', bold, large_text
|
12
|
+
def add_style(cell_ref, *styles)
|
13
|
+
item = self[cell_ref]
|
14
|
+
cells = item.is_a?(Array) ? item : [item]
|
15
|
+
cells.each do |cell|
|
16
|
+
styles.each do |style|
|
17
|
+
cell.add_style(style)
|
20
18
|
end
|
21
19
|
end
|
20
|
+
end
|
22
21
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
22
|
+
# Examples:
|
23
|
+
# add_border 'B2:F8', [:left, :top], :medium, '00330f'
|
24
|
+
# add_border 'B2:F8', [:left, :top], :medium
|
25
|
+
# add_border 'C2:G10', [:top]
|
26
|
+
# add_border 'C2:G10'
|
27
|
+
# add_border 'B2:D5', { style: :thick, color: '00330f', edges: [:left, :right] }
|
28
|
+
def add_border(cell_ref, args = :all)
|
29
|
+
cells = self[cell_ref]
|
30
|
+
BorderCreator.new(self, cells, args).draw
|
33
31
|
end
|
34
32
|
end
|
35
33
|
end
|
34
|
+
|
35
|
+
Axlsx::Worksheet.send(:include, AxlsxStyler::Worksheet)
|