各種サンプル

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

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

AppクラスのconvertFromRowColNumberやconvertFromRowColNumber2メソッドで、数値アクセスをExcelのA1C1表記に変換します。

(例: convertFromRowColNumber(4,6) は、"F4"を返します。A1=(1,1) なので、注意してください)

import pyosbxl
import pyosbxl.dto
import pyosbxl.enums
import os

if os.path.exists("create_workbook.xlsx"):
    os.remove("create_workbook.xlsx")

if os.path.exists("create_workbook_2.xlsx"):
    os.remove("create_workbook_2.xlsx")

if os.path.exists("create_workbook_2_password.xlsx"):
    os.remove("create_workbook_2_password.xlsx")

print("start")

# Appインスタンス生成
app = pyosbxl.App()

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

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

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

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

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

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

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

# ワークブックをフォントとフォントサイズを指定して作成します。
wb = app.createWorkBook("create_workbook.xlsx", pyosbxl.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()

print("end")

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

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

import pyosbxl
import pyosbxl.dto
import pyosbxl.enums
import os

if os.path.exists("cells.xlsx"):
    os.remove("cells.xlsx")

print("start")

# Appインスタンス生成
app = pyosbxl.App()

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

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

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

# colorObjectを作成します。
color = pyosbxl.dto.ColorObject()

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

# colorObjectを作成します。
color2 = pyosbxl.dto.ColorObject()

# Hexカラーを設定します。
color2.setHexColor("888888")

# ハイパーリンクオブジェクトを作成します。
hyperlink = pyosbxl.dto.HyperlinkObject()
# 外部リンクを設定します。
hyperlink.setAddress("https://osb-office.com/")

# フォントオブジェクトを作成します。
font = pyosbxl.dto.FontObject()
# フォント名を設定します。
font.setName(pyosbxl.enums.XlFont.BIZ_UDGOTHIC)
# フォントサイズを設定します。
font.setSize(10.5)

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

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

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

for i in range(3, 6):

    # 行の高さを設定します。
    ws.getRow(i).setHeight(25)

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

    for j in range(1, 11):

        if i == 3:
            # 列の幅を設定します。
            ws.getCol(j).setColumnWidth(12)

        r = ws.getCells(i, j)
        # 各セルに値を設定します。
        r.setNumberValue(i * 1000 + j)
        # 3桁区切りのセル書式を適用します。
        r.setNumberFormat("#,##0")

        # フォントに色をつけます。
        r.getFont().setColorObject(color)
        # フォントを太字にします。
        r.getFont().setBold(True)

        # セル色をつけます。
        r.getFill().setCellColorObject(color2)

        # 枠線をつけます。
        r.getBorders().setLineStyles(pyosbxl.enums.XlLineStyleBorderWeight.Dashed, pyosbxl.enums.XlBorderPresetType.outerBoders)

        # 横方向に中央配置します。
        r.getAlignment().setHorizontalAlignment(pyosbxl.enums.XlHAlign.HAlignCenter)

        # 縦方向に中央配置します。
        r.getAlignment().setVerticalAlignment(pyosbxl.enums.XlVAlign.VAlignCenter)

        # セルの保護を有効にします。
        r.getProtection().setLocked(True)

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

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

        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)

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

# PageSetupObjectを作成します。
page = pyosbxl.dto.PageSetupObject()
# 縦横1ページにします。
page.setFitToPages(1, 1)

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

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

print("end")

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

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

import pyosbxl
import pyosbxl.dto
import pyosbxl.enums
import os
import random

if os.path.exists("autofilter.xlsx"):
    os.remove("autofilter.xlsx")

print("start")

# Appインスタンス生成
app = pyosbxl.App()

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

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

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

color = pyosbxl.dto.ColorObject()
color.setColorIndex(pyosbxl.enums.XlIndexColor.ColorIndexRed)

redlist = []

for i in range(2, 13):
    for j in range(1, 3):
        val = random.randint(1, 100)
        # randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val)

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


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

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

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

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

print("end")

条件付き書式の使用例

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

import pyosbxl
import pyosbxl.dto
import pyosbxl.enums
import os
import random

if os.path.exists("formatconditions.xlsx"):
    os.remove("formatconditions.xlsx")

print("start")

# Appインスタンス生成
app = pyosbxl.App()

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

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

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

color = pyosbxl.dto.ColorObject()
color.setColorIndex(pyosbxl.enums.XlIndexColor.ColorIndexRed)

redlist = []

for i in range(2, 13):
    for j in range(1, 3):
        val = random.randint(1, 100)
        # randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val)

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

colormin = pyosbxl.dto.ColorObject()
colormin.setColorIndex(pyosbxl.enums.XlIndexColor.ColorIndexGreen)

colormax = pyosbxl.dto.ColorObject()
colormax.setColorIndex(pyosbxl.enums.XlIndexColor.ColorIndexBlue)

# colorscaleオブジェクトを作成します。
colorscale = pyosbxl.dto.ColorScaleObject()

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

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

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

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

# aboveaverageオブジェクトを作成します。
above = pyosbxl.dto.AboveAverageObject()

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

borders = pyosbxl.dto.BordersObject()
border = pyosbxl.dto.BorderObject()
border.setLineStyle(pyosbxl.enums.XlBordersIndex.EdgeBottom, pyosbxl.enums.XlLineStyleBorderWeight.Thin)
borders.setBorder(border)

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

# 適用条件を設定します。
above.setAboveBelow(pyosbxl.enums.XlAboveBelow.XlEqualAboveAverage)

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

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

print("end")

テーブルの使用例

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

import pyosbxl
import pyosbxl.dto
import pyosbxl.enums
import os
import random

if os.path.exists("tables.xlsx"):
    os.remove("tables.xlsx")

print("start")

# Appインスタンス生成
app = pyosbxl.App()

# ワークブックをフォントとフォントサイズを指定して作成します。
wb = app.createWorkBook("tables.xlsx", pyosbxl.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 range(2, 13):
    for j in range(1, 5):
        if j == 1:
            ws.getCells(i, j).setValue("列" + str(i - 1))
            continue

        val = random.randint(1, 100)
        # randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val)

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

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

# テーブルのスタイルを設定します。
table.setBuiltinStyleName(pyosbxl.enums.XlDefaultTableStyle.TableStyleLight2, True)
table.setShowTableStyleRowStripes(True)

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

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

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

print("end")

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

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

import pyosbxl
import pyosbxl.dto
import pyosbxl.enums
import os
import random

if os.path.exists("pivottables.xlsx"):
    os.remove("pivottables.xlsx")

print("start")

# Appインスタンス生成
app = pyosbxl.App()

# ワークブックをフォントとフォントサイズを指定して作成します。
wb = app.createWorkBook("pivottables.xlsx", pyosbxl.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 range(2, 13):
    for j in range(1, 5):
        if j == 1:
            ws.getCells(i, j).setValue("列" + str((i - 1) % 3))
            continue
        if j == 2:
            ws.getCells(i, j).setValue("行" + str((i - 1) % 3))
            continue

        val = random.randint(1, 100)
        # randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val)

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

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

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

rowfields = pyosbxl.dto.VectorPivotFieldObject()
colfields = pyosbxl.dto.VectorPivotFieldObject()
filterfields = pyosbxl.dto.VectorPivotFieldObject()
datafields = pyosbxl.dto.VectorPivotFieldObject()

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

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

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

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

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

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

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

print("end")

チャートの使用例

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

import pyosbxl
import pyosbxl.dto
import pyosbxl.enums
import os
import random

if os.path.exists("charts.xlsx"):
    os.remove("charts.xlsx")

print("start")

# Appインスタンス生成
app = pyosbxl.App()

# ワークブックをフォントとフォントサイズを指定して作成します。
wb = app.createWorkBook("charts.xlsx", pyosbxl.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 range(2, 13):
    for j in range(1, 5):
        if j == 1:
            ws.getCells(i, j).setValue("列" + str(i - 1))
            continue

        val = random.randint(1, 100)
        # randomな値を設定します。
        ws.getCells(i, j).setNumberValue(val)


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

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

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

# 凡例のポジションを設定します。
chart.getLegend().setPosition(pyosbxl.enums.XlLegendPosition.LegendPositionTop)

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

print("end")