Axlsxでセルの中の斜線を引く

またまた中々見つけられなかったテクニック。
セルの内部に斜線をひくです。

連日の調査で疲れます。

さくっと結論です。
edgesにdiagonalを指定して、diagonal_upかdiagonal_downにtrueを指定するです。
edgesにdiagonalを指定しろなんてどこにも書いてなかったので大変でした。

コードにするとこうです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
require 'axlsx'

package = Axlsx::Package.new
sheet = package.workbook.add_worksheet(name: 'lists')

diagonal_up = sheet.styles.add_style(
                              {
                               :border => {
                                 :edges => [:diagonal],
                                 :color => "000000",
                                 :style => :thin,
                                 diagonal_up: true
                               }
                              }
                            )
diagonal_down = sheet.styles.add_style(
                              {
                               :border => {
                                 :edges => [:diagonal],
                                 :color => "000000",
                                 :style => :thin,
                                 diagonal_down: true
                                }
                              }
                            )

diagonal_both = sheet.styles.add_style(
                              {
                               :border => {
                                 :edges => [:diagonal],
                                 :color => "000000",
                                 :style => :thin,
                                 diagonal_down: true,
                                 diagonal_up: true
                               }
                              }
                            )


sheet.add_row(['斜線1'], style: diagonal_up)
sheet.add_row([''])
sheet.add_row(['斜線2'], style: diagonal_down)
sheet.add_row([''])
sheet.add_row(['斜線3'], style: diagonal_both)

package.serialize('test.xlsx')

Axlsx border diagonal

もしくはこれでもいけます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
require 'axlsx'

package = Axlsx::Package.new
sheet = package.workbook.add_worksheet(name: 'lists')

diagonal_style = sheet.styles.add_style(
                              {
                               :border => {
                                 :edges => [:left, :right],
                                 :color => "000000",
                                 :style => :thin
                               }
                              }
                            )

br = package.workbook.styles.borders[package.workbook.styles.cellXfs[diagonal_style].borderId]
br.diagonalUp = true
br.diagonalDown = true
br.prs << Axlsx::BorderPr.new(
  name: :diagonal,
  color: Axlsx::Color.new(rgb: '000000'),
  style: :thin,
)


sheet.add_row(['斜め線をひく'], style: diagonal_style)

package.serialize('test.xlsx')

Comments