0
0

環境

Ubuntu 20.4
Ruby 2.6
Rails 5.2

はじめに

Excelファイルに対し、読み取りと書き込みの両方ができる、RubyXLというgemがあります。このgemのchange_borderメソッドを利用して、Excelのセルに罫線を引くことができます。このメソッドで使うことができる、パラメータと罫線の種類について調べてみました。

change_borderの使い方

change_borderの使い方は公式サイトを見れば載っています。

公式サイト
https://github.com/weshatheleopard/rubyXL?tab=readme-ov-file#changing-borders-

# Possible weights: hairline, thin, medium, thick
# Possible "directions": top, bottom, left, right, diagonal
worksheet.sheet_data[0][0].change_border(:top, 'thin')  # Sets A1 to have a top, thin border

サンプルにある通り、罫線の種類は、change_borderの第2引数に設定します。

サンプルでは、hairline, thin, medium, thickの4種類のパラメータが渡せるといった記述があります。4種類もあれば十分かも分かりませんが、実際には、もっと沢山の種類のパラメータが用意されています。

GitHubにあるRubyXLのソースを検索すると、実際には、これだけのパラメータが用意されていることが確認することができます。全部で13種類です。

simple_types.rb
ST_BorderStyle = %w{ none thin medium dashed dotted thick double hair
                     mediumDashed dashDot mediumDashDot dashDotDot slantDashDot }

サンプルを出力する

すべての罫線を出力してみます。

rubyxl_sample.rb
    require 'rubyXL'
    require 'rubyXL/convenience_methods'

    workbook = RubyXL::Workbook.new
    worksheet = workbook[0]

    sT_BorderStyle = %w{ none thin medium dashed dotted thick double hair mediumDashed dashDot mediumDashDot dashDotDot slantDashDot }
    sT_BorderStyle.each_with_index do |val, idx|
         worksheet.add_cell(idx, 0, val).change_border(:bottom, val)
    end
    workbook.write('./Ruby/sample_1.xlsx')

出力されたExcelファイルです。

画像1.png

ChatGPTに聞いてみる

Copilot(ChatGPT-4)に聞いてみました。プロンプトには次のように入力します。

RubyにRubyXLというgemがあります。このgemを使って、Excelシートに罫線を引きたいと思っています。指定できる罫線の種類を一覧で表示してください。

教えてくれた、パラメータ値は、「medium、thin、double、dotted」の4種類でした。

公式サイトのサンプルコードで紹介されているパラメータ値は、「hairline, thin, medium, thick」の4種類です。

ChatGPTは、どうやら、こちらの記事を参考にしたようです。
https://www.tairaengineer-note.com/ruby-rubyxl-usage-list/

公式サイトの情報を一番の参考にしてくれないところが、現状のChatGPT-4の限界なのだろう。GitHubのソースコードは一切見ていないと思われる。確信犯です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0