各種サンプル

AppオブジェクトとWorkBookオブジェクトの使用例

以下のコードは、Appオブジェクトの各種ユーティリティーの使用方法を示し、ExcelのWorkBookを新規作成し、通常保存、別名保存、パスワード付き保存を行うサンプルです。

# typed: true

require "bundler/setup"
require "rubyosbxl"

File.delete("create_workbook.xlsx") if File.exist?("create_workbook.xlsx")

puts "start"

# Appインスタンス生成
app = RubyOSBXL::App.new

# 3をA1表記に変換します
col3 = app.convertFromColumnNumber(3)
puts col3

# (3,3)をA1表記に変換します。
rowcol_33 = app.convertFromRowColNumber(3, 3)
puts rowcol_33

# (3,3)を絶対参照のA1表記に変換します。
rowcol_33_2 = app.convertFromRowColNumber(3, 3, true, true)
puts rowcol_33_2

# (3,3,4,3)をA1C1表記に変換します。
rowcol_range_33_44 = app.convertFromRowColNumber2(3, 3, 4, 4)
puts rowcol_range_33_44

# (3,3,4,3)を絶対参照のA1C1表記に変換します。
rowcol_range_33_44_2 =
app.convertFromRowColNumber2(3, 3, 4, 4, true, true, true, true)
puts rowcol_range_33_44_2

# 日付時刻オブジェクトを作成します。
ymdhms = RubyOSBXL::Dto::DateTimeObject.new
ymdhms.setYMD(2023, 12, 1)
ymdhms.setHMS(13, 25, 35)

# 日付時刻オブジェクトをExcel内部のシリアル値に変換します。
serial = app.getNumericValue(ymdhms)
puts serial

# ワークブックをフォントとフォントサイズを指定して作成します。
wb =
app.createWorkBook(
    "create_workbook.xlsx",
    RubyOSBXL::Enums::XlFont::YU_MINCHO,
    12.0
)

# ワークシートを追加します。
ws = wb.addWorkSheet("Sheet2")
# セル領域A2:E5に数値1.0を入力します。
ws.getRange("A2:E5").setNumberValue(1.0)

# ワークシートを削除します。
wb.deleteWorkSheet("Sheet1")

# ワークブックを保存します。
wb.save()
# ワークブックを別名で保存します。
wb.saveAs("create_workbook_2.xlsx")
# ワークブックを別名、パスワード付きで保存します。
wb.saveAs("create_workbook_2_password.xlsx", "サンプル")
# ワークブックを閉じます。
wb.close()

# 既存のワークブックを開きます。
wb = app.openWorkBook("create_workbook_2.xlsx")
# セル領域A1に日付時刻オブジェクトをセル書式とともに設定します。
wb
.openWorkSheet("Sheet2")
.getCells(1, 1)
.setDateValue(ymdhms, false, "yyyy/mm/dd")

# ワークブックをパスワード付きで保存します。
wb.save("サンプル")
# ワークブックを閉じます。
wb.close()

puts "end"

セル範囲のセル装飾の使用例

以下のコードは、各種セル装飾(フォント、罫線、塗りつぶし、セル配置、セルの保護、セルの書式)やメモ、コメントや行や列のサイズ変更、行のアウトラインレベル設定、ワークシートのページ設定を行うサンプルです。

# typed: true

require "bundler/setup"
require "rubyosbxl"

File.delete("cells.xlsx") if File.exist?("cells.xlsx")

puts "start"

# Appインスタンス生成
app = RubyOSBXL::App.new

# ワークブックをフォントとフォントサイズを指定して作成します。
wb = app.createWorkBook("cells.xlsx", RubyOSBXL::Enums::XlFont::YU_MINCHO, 12.0)

# ワークシートを開きます。
ws = wb.openWorkSheet("Sheet1")

# A1に値を設定します。
ws.getRange("A1").setValue("セルサンプル")

# colorObjectを作成します。
color = RubyOSBXL::Dto::ColorObject.new

# テーマカラーを設定します。
color.setThemeColor(RubyOSBXL::Enums::XlThemeColor::ThemeColorAccent1)

# colorObjectを作成します。
color2 = RubyOSBXL::Dto::ColorObject.new
color2.setHexColor("888888")

# ハイパーリンクオブジェクトを作成します。
hyperlink = RubyOSBXL::Dto::HyperlinkObject.new

# 外部リンクを設定します。
hyperlink.setAddress("https://osb-office.com/")

# フォントオブジェクトを作成します。
font = RubyOSBXL::Dto::FontObject.new

# フォント名を設定します。
font.setName(RubyOSBXL::Enums::XlFont::BIZ_UDGOTHIC)
# フォントサイズを設定します。
font.setSize(10.5)

# パターンフィルオブジェクトを設定します。
ptfill = RubyOSBXL::Dto::PatternFillObject.new
# パターンフィルの種類を設定します。
ptfill.setPattern(RubyOSBXL::Enums::XlPatternType::PatternCrissCross)
# 前面色を設定します。
ptfill.setPatternColorObject(color)
# 背景色を設定します。
ptfill.setColorObject(color2)

# コメントオブジェクトを作成します。
comment = RubyOSBXL::Dto::CommentObject.new
dt = RubyOSBXL::Dto::DateTimeObject.new
dt.setYMD(2023, 11, 30)
dt.setHMS(15, 25, 35)

# コメント者を設定します。
comment.setAuthor("OSBOffice,Inc")
# コメント日付を設定します。
comment.setCommentDate(dt)
# コメント内容を設定します。
comment.setContent("サンプルコメント作成")

for i in 3..5
# 行の高さを設定します。
# 各セルに値を設定します。
# 3桁区切りのセル書式を適用します。
# フォントに色をつけます。
# フォントを太字にします。
# セル色をつけます。
# 枠線をつけます。
# 横方向に中央配置します。
# 縦方向に中央配置します。
# セルの保護を有効にします。
ws.getRow(i).setHeight(25)

if (i == 5)
    # アウトラインを設定します。
    ws.setRowOutline(5, 6, 2)
end

for j in 1..10
    if (i == 3)
    # 列の幅を設定します。
    ws.getCol(j).setColumnWidth(12)
    end

    r = ws.getCells(i, j)

    r.setNumberValue(i * 1000 + j)

    r.setNumberFormat("#,##0")

    r.getFont().setColorObject(color)

    r.getFont().setBold(true)

    r.getFill().setCellColorObject(color2)

    r.getBorders().setLineStyles(
    RubyOSBXL::Enums::XlLineStyleBorderWeight::Dashed,
    RubyOSBXL::Enums::XlBorderPresetType::OuterBoders
    )

    r.getAlignment().setHorizontalAlignment(
    RubyOSBXL::Enums::XlHAlign::HAlignCenter
    )

    r.getAlignment().setVerticalAlignment(
    RubyOSBXL::Enums::XlVAlign::VAlignCenter
    )

    r.getProtection().setLocked(true)

    if (j == 1)
    # セルにメモを設定します。
    ws.getComments().setMemo(
        app.convertFromRowColNumber(i, j),
        "OSBOffice,Inc",
        "サンプルコメント",
        font,
        true
    )
    end

    if (j == 3)
    # パターンフィルを設定します。
    r.getFill().setPatternFillObject(ptfill)
    end

    if (j == 5)
    # コメントを新規作成します。
    ws.getComments().setComment(app.convertFromRowColNumber(i, j), comment)

    # コメント一覧を取得します。
    comments = ws.getComments().getComment(app.convertFromRowColNumber(i, j))

    # スレッドのID(親ID)を取得し、コメントオブジェクトに設定します。
    comment.setParentId(comments[0].getId())
    # 返信コメントを設定します。
    comment.setContent("サンプルコメント返信")

    # コメントに返信します。
    ws.getComments().setComment(app.convertFromRowColNumber(i, j), comment)
    end

    if (j == 10)
    # セルにハイパーリンクを設定します。
    ws.getHyperLinks().setHyperLink(
        app.convertFromRowColNumber(i, j),
        hyperlink
    )
    end
end
end

# PageSetupObjectを作成します。
page = RubyOSBXL::Dto::PageSetupObject.new

# ヘッダーオブジェクトを作成します。
header = RubyOSBXL::Dto::HeaderObject.new
# 中央に文字列を設定します。
header.setCenterHeader("サンプルヘッダー")
# PageSetupObjectにヘッダーオブジェクトを設定します。
page.setHeader(header)
# ワークシートにPageSetupObjectを設定します。
ws.setPageSetupObject(page)

# ワークブックを保存します。
wb.save()
# ワークブックを閉じます。
wb.close()

puts "end"

オートフィルターの使用例

以下のコードは、オートフィルターの操作を行うサンプルです。

# typed: true

require "bundler/setup"
require "rubyosbxl"

File.delete("autofilter.xlsx") if File.exist?("autofilter.xlsx")

puts "start"

# Appインスタンス生成
app = RubyOSBXL::App.new

# ワークブックをフォントとフォントサイズを指定して作成します。
wb =
app.createWorkBook(
    "autofilter.xlsx",
    RubyOSBXL::Enums::XlFont::YU_MINCHO,
    12.0
)

# ワークシートを開きます。
ws = wb.openWorkSheet("Sheet1")

ws.getRange("A1").setValue("フィルター1")
ws.getRange("B1").setValue("フィルター2")

color = RubyOSBXL::Dto::ColorObject.new
color.setColorIndex(RubyOSBXL::Enums::XlIndexColor::ColorIndexRed)

redlist = Array.new

for i in 2..12
for j in 1..2
    val = rand(1.0..100.0)
    # randomな値を設定します。
    ws.getCells(i, j).setNumberValue(val)

    if val >= 50
    # 50以上の場合、フォント色を設定します。
    ws.getCells(i, j).getFont().setColorObject(color)
    redlist.push(app.convertFromRowColNumber(i, j))
    end
end
end

# 1列目の値の上位80%をフィルター対象とし、フィルターします。
ws.getAutoFilter("A1:B12").setTop10PercentFilter(80, 1)

if redlist.length > 0
# 2列目で、フォント色が設定されているセルをフィルターします。
ws.getAutoFilter("A1:B12").setFontColorFilter(redlist[0], 2)
end

# 2列目の値で、降順にソートします。
ws.getAutoFilter("A1:B12").getSort().executeSortDescending(2)

# ワークブックを保存します。
wb.save()
# ワークブックを閉じます。
wb.close()

puts "end"

条件付き書式の使用例

以下のコードは、条件付き書式の操作を行うサンプルです。

# typed: true

require "bundler/setup"
require "rubyosbxl"

File.delete("formatconditions.xlsx") if File.exist?("formatconditions.xlsx")

puts "start"

# Appインスタンス生成
app = RubyOSBXL::App.new

# ワークブックをフォントとフォントサイズを指定して作成します。
wb =
app.createWorkBook(
    "formatconditions.xlsx",
    RubyOSBXL::Enums::XlFont::YU_MINCHO,
    12.0
)

# ワークシートを開きます。
ws = wb.openWorkSheet("Sheet1")

ws.getRange("A1").setValue("フィルター1")
ws.getRange("B1").setValue("フィルター2")

color = RubyOSBXL::Dto::ColorObject.new
color.setColorIndex(RubyOSBXL::Enums::XlIndexColor::ColorIndexRed)

for i in 2..12
# randomな値を設定します。
for j in 1..2
    val = rand(1.0..100.0)

    ws.getCells(i, j).setNumberValue(val)

    if (val >= 50)
    # 50以上の場合、フォント色を設定します。
    ws.getCells(i, j).getFont().setColorObject(color)
    end
end
end

colormin = RubyOSBXL::Dto::ColorObject.new
colormin.setColorIndex(RubyOSBXL::Enums::XlIndexColor::ColorIndexGreen)

colormax = RubyOSBXL::Dto::ColorObject.new
colormax.setColorIndex(RubyOSBXL::Enums::XlIndexColor::ColorIndexBlue)

# colorscaleオブジェクトを作成します。
colorscale = RubyOSBXL::Dto::ColorScaleObject.new

# 範囲を設定します。
colorscale.setA1C1("A1:A12")

# 最少条件を設定します。
colorscale.setMinimumCondition(
colormin,
RubyOSBXL::Enums::XlConditionValueType::ConditionValueTypePercent,
20
)

# 最大条件を設定します。
colorscale.setMaximumCondition(
colormax,
RubyOSBXL::Enums::XlConditionValueType::ConditionValueTypePercent,
70
)

# colorscale条件付き書式を設定します。(priprity=1)
ws.getFormatConditions().setColorScaleFormatCondition(1, colorscale)

# aboveaverageオブジェクトを作成します。
above = RubyOSBXL::Dto::AboveAverageObject.new

# 範囲を設定します。
above.setA1C1("B1:B12")

borders = RubyOSBXL::Dto::BordersObject.new
border = RubyOSBXL::Dto::BorderObject.new
border.setLineStyle(
RubyOSBXL::Enums::XlBordersIndex::EdgeBottom,
RubyOSBXL::Enums::XlLineStyleBorderWeight::Thin
)
borders.setBorder(border)

# 適用する枠線を設定します。
above.setBorders(borders)

# 適用条件を設定します。
above.setAboveBelow(RubyOSBXL::Enums::XlAboveBelow::XlEqualAboveAverage)

# aboveaverage条件付き書式を設定します。(priprity=2)
ws.getFormatConditions().setAboveAverageCondition(2, above)

# ワークブックを保存します。
wb.save()
# ワークブックを閉じます。
wb.close()

puts "end"

テーブルの使用例

以下のコードは、テーブルの操作を行うサンプルです。

# typed: true

require "bundler/setup"
require "rubyosbxl"

File.delete("tables.xlsx") if File.exist?("tables.xlsx")

puts "start"

# Appインスタンス生成
app = RubyOSBXL::App.new

# ワークブックをフォントとフォントサイズを指定して作成します。
wb =
app.createWorkBook("tables.xlsx", RubyOSBXL::Enums::XlFont::YU_MINCHO, 12.0)

# ワークシートを開きます。
ws = wb.openWorkSheet("Sheet1")

ws.getRange("A1").setValue("列")
ws.getRange("B1").setValue("項目1")
ws.getRange("C1").setValue("項目2")
ws.getRange("D1").setValue("項目3")

for i in 2..12
for j in 1..4
    # randomな値を設定します。
    if (j == 1)
    ws.getCells(i, j).setValue("列" + (i - 1).to_s)
    next
    end

    val = rand(1.0..100.0)

    ws.getCells(i, j).setNumberValue(val)
end
end

# テーブルを1行目を見出しとして、集計行を表示する形で作成します。
table = ws.getListObjects().addList("Table1", "A1:D12", true, true)

# 集計行の見出し、タイプを設定します。
table.setTotalRowLabel(1, "合計")
table.setTotalRowFunction(
2,
RubyOSBXL::Enums::XlTotalsCalculation::TotalsCalculationSum
)
table.setTotalRowFunction(
3,
RubyOSBXL::Enums::XlTotalsCalculation::TotalsCalculationSum
)
table.setTotalRowFunction(
4,
RubyOSBXL::Enums::XlTotalsCalculation::TotalsCalculationSum
)

# テーブルのスタイルを設定します。
table.setBuiltinStyleName(
RubyOSBXL::Enums::XlDefaultTableStyle::TableStyleLight2,
true
)
table.setShowTableStyleRowStripes(true)

# テーブルにオートフィルターを設定します。
table.setShowAutoFilter(true)

# 2列目をフィルターします。(平均以上)
table.getAutoFilter().setAverageFilter(true, 2)

# ワークブックを保存します。
wb.save()
# ワークブックを閉じます。
wb.close()

puts "end"

ピボットテーブルの使用例

以下のコードは、ピボットテーブルの操作を行うサンプルです。

# typed: true

require "bundler/setup"
require "rubyosbxl"

File.delete("pivottables.xlsx") if File.exist?("pivottables.xlsx")

puts "start"

# Appインスタンス生成
app = RubyOSBXL::App.new

# ワークブックをフォントとフォントサイズを指定して作成します。
wb =
app.createWorkBook(
    "pivottables.xlsx",
    RubyOSBXL::Enums::XlFont::YU_MINCHO,
    12.0
)

# ワークシートを開きます。
ws = wb.openWorkSheet("Sheet1")

ws.getRange("A1").setValue("列")
ws.getRange("B1").setValue("項目1")
ws.getRange("C1").setValue("項目2")
ws.getRange("D1").setValue("項目3")

for i in 2..12
for j in 1..4
    # randomな値を設定します。
    if (j == 1)
    ws.getCells(i, j).setValue("列" + ((i - 1) % 3).to_s)
    next
    end
    if (j == 2)
    ws.getCells(i, j).setValue("行" + ((i - 1) % 3).to_s)
    next
    end

    val = rand(1.0..100.0)

    ws.getCells(i, j).setNumberValue(val)
end
end

# ピボットテーブルを作成します。
pivottable = ws.getPivotTables().addPivotTable("PivotTable1", "A1:D12", "A15")

# デフォルトのピボットテーブル設定を取得します。
settings = pivottable.getPivotTableSetting()

# 現在のピボットテーブルのフィールドを取得します。
fields = pivottable.getFields()

rowfields = Array.new
colfields = Array.new
filterfields = Array.new
datafields = Array.new

# rowFiledsを設定します。
rowfields.push(fields[0])

# colFiledsを設定します。
colfields.push(fields[1])

# データフィールドを設定します。
datafields.push(fields[2])

# データフィールドを設定します。
datafields.push(fields[3])

# 2個目のデータフィールドの集計方法を平均に設定します。
datafields[0].setDataFieldSubTotalsMethod(
RubyOSBXL::Enums::XlPivotFieldSubtotalsMethodType::SubtotalsMethodTypeAverage
)

# ピボットフィールドの集計を行います。
pivottable.setFields(
settings,
RubyOSBXL::Enums::XlPivotTableLayoutType::CompactForm,
rowfields,
colfields,
filterfields,
datafields
)

# ワークブックを保存します。
wb.save()
# ワークブックを閉じます。
wb.close()

puts "end"

チャートの使用例

以下のコードは、チャートの操作を行うサンプルです。

# typed: false

require "bundler/setup"
require "rubyosbxl"

File.delete("charts.xlsx") if File.exist?("charts.xlsx")

puts "start"

# Appインスタンス生成
app = RubyOSBXL::App.new

# ワークブックをフォントとフォントサイズを指定して作成します。
wb =
app.createWorkBook("charts.xlsx", RubyOSBXL::Enums::XlFont::YU_MINCHO, 12.0)

# ワークシートを開きます。
ws = wb.openWorkSheet("Sheet1")

ws.getRange("A1").setValue("列")
ws.getRange("B1").setValue("項目1")
ws.getRange("C1").setValue("項目2")
ws.getRange("D1").setValue("項目3")

for i in 2..12
for j in 1..4
    # randomな値を設定します。
    if (j == 1)
    ws.getCells(i, j).setValue("列" + (i - 1).to_s)
    next
    end

    val = rand(1.0..100.0)

    ws.getCells(i, j).setNumberValue(val)
end
end

# チャート名と領域を作成します。
chartobj = ws.addChartObject("Chart1", 200, 200, 400, 400).getChart()

# チャートを作成します。
chartobj.chartWizard(
"A1:D12",
RubyOSBXL::Enums::XlChartType::ChartType3DLine,
RubyOSBXL::Enums::XlRowCol::Columns,
1,
1
)

# 凡例の表示を設定します。
chartobj.setLegend(true)

# 凡例のポジションを設定します。
chartobj.getLegend().setPosition(
RubyOSBXL::Enums::XlLegendPosition::LegendPositionTop
)

# ワークブックを保存します。
wb.save()
# ワークブックを閉じます。
wb.close()

puts "end"