Spire.Office for Python

ニュース&リリース

2026-07-31

Spire.Office for Python 11.7.0 リリース

このたび、Spire.Office for Python 11.7.0 のリリースをお知らせします。本バージョンでは、複数の強力な機能強化が導入されました。Spire.Doc が環境変数によるライセンス設定をサポート;Spire.XLS がデータシミュレーション分析、スライサーおよび Excel から JSON 変換に対応しました;Spire.PDF 署名フィールドへのテキスト自動フィットをサポート;Spire.Presentation は環境変数によるライセンス設定をサポートしました。

これらの新機能に加え、Word、Excel、PDF、PowerPoint ファイルの変換、処理、保存に関する既知の問題も多数修正され、より安定した信頼性の高い操作環境を提供します。詳細は以下をご参照ください。

ここで Spire.Office for Python 11.7.0 をダウンロードする:

Spire.Doc for Python

カテゴリー ID 説明
新機能 Spire.Doc は、以下の環境変数からライセンス情報を自動的に検出して読み込めるようになりました。
SPIRE_OFFICE_LICENSE_KEY
SPIRE_DOC_LICENSE_KEY
SPIRE_LICENSE_KEY

Spire.XLS for Python

カテゴリー ID 説明
新機能 SPIREXLS-6020 データシミュレーション分析(シナリオマネージャー)機能に対応しました。作成、編集、削除、概要生成、および結合をサポートします。
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
scenarios = worksheet.Scenarios
currentChangePercentage_Values = [0.23, 0.8, 1.1, 0.5, 0.35, 0.2]
increasedChangePercentage_Values = [0.45, 0.56, 0.9, 0.5, 0.58, 0.43]
decreasedChangePercentage_Values = [0.3, 0.2, 0.5, 0.3, 0.5, 0.23]
currentQuantity_Values = [1500, 3000, 5000, 4000, 500, 4000]
increasedQuantity_Values = [1000, 5000, 4500, 3900, 10000, 8900]
decreasedQuantity_Values = [1000, 2000, 3000, 3000, 300, 4000]
scenarios.Add("Current % of Change", worksheet.Range["F5:F10"], currentChangePercentage_Values)
scenarios.Add("Increased % of Change", worksheet.Range["F5:F10"], increasedChangePercentage_Values)
scenarios.Add("Decreased % of Change", worksheet.Range["F5:F10"], decreasedChangePercentage_Values)
scenarios.Add("Current Quantity", worksheet.Range["D5:D10"], currentQuantity_Values)
scenarios.Add("Increased Quantity", worksheet.Range["D5:D10"], increasedQuantity_Values)
scenarios.Add("Decreased Quantity", worksheet.Range["D5:D10"], decreasedQuantity_Values)
wb.SaveToFile(outputFile, ExcelVersion.Version2013)
wb.Dispose()
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
scenarios = worksheet.Scenarios
currentChangePercentage_Values = [0.23, 0.8, 1.1, 0.5, 0.35, 0.2]
increasedChangePercentage_Values = [0.45, 0.56, 0.9, 0.5, 0.58, 0.43]
decreasedChangePercentage_Values = [0.3, 0.2, 0.5, 0.3, 0.5, 0.23]
currentQuantity_Values = [1500, 3000, 5000, 4000, 500, 4000]
increasedQuantity_Values = [1000, 5000, 4500, 3900, 10000, 8900]
decreasedQuantity_Values = [1000, 2000, 3000, 3000, 300, 4000]
scenarios.Add("Current % of Change", worksheet.Range["F5:F10"], currentChangePercentage_Values)
scenarios.Add("Increased % of Change", worksheet.Range["F5:F10"], increasedChangePercentage_Values)
scenarios.Add("Decreased % of Change", worksheet.Range["F5:F10"], decreasedChangePercentage_Values)
scenarios.Add("Current Quantity", worksheet.Range["D5:D10"], currentQuantity_Values)
scenarios.Add("Increased Quantity", worksheet.Range["D5:D10"], increasedQuantity_Values)
scenarios.Add("Decreased Quantity", worksheet.Range["D5:D10"], decreasedQuantity_Values)
worksheet.Scenarios.Summary(worksheet.Range["L7"])
wb.SaveToFile(outputFile, ExcelVersion.Version2013)
wb.Dispose()
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
scenarios = worksheet.Scenarios
scenario1 = scenarios[0]
scenario2 = scenarios[1]
scenario1.SetVariableCells(worksheet.Range["A1:A5"], scenario2.Values)
sourceCell = worksheet.Range["B1:B5"]
scenario2.SetVariableCells(sourceCell, scenario2.Values)
scenario1.Show()
scenario2.Show()
self.get_content(scenario1, outputFile_TXT)
wb.SaveToFile(outputFile, ExcelVersion.Version2013)
wb.Dispose()
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
scenarios = worksheet.Scenarios
scenarios.RemoveScenarioAt(0)
scenarios.RemoveScenarioByName("two")
content = ""
content += "Count:" + str(scenarios.Count) + "\n"
content += "ContainsScenario:" + str(scenarios.ContainsScenario("two")) + "\n"
content += "ContainsScenario:" + str(scenarios.ContainsScenario("one")) + "\n"
with open(outputFile, 'w') as f:
f.write(content)
wb.Dispose()
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
scenarios = worksheet.Scenarios
scenarios.RemoveScenarioAt(0)
scenarios.RemoveScenarioByName("two")
content = ""
content += "Count:" + str(scenarios.Count) + "\n"
content += "ContainsScenario:" + str(scenarios.ContainsScenario("two")) + "\n"
content += "ContainsScenario:" + str(scenarios.ContainsScenario("one")) + "\n"
with open(outputFile, 'w') as f:
f.write(content)
wb.Dispose()
新機能 表データを使用したスライサーの追加に対応しました。
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
slicers = worksheet.Slicers
table = worksheet.ListObjects.Create("Super Table", worksheet.Range["A1:C9"])
count = 3
for type in SlicerStyleType.dict.values():
if isinstance(type, SlicerStyleType):
count += 5
rangeStr = "E" + str(count)
index = slicers.Add(table, rangeStr, 0)
xlsSlicer = slicers[index]
xlsSlicer.Name = "slicers_" + str(count)
xlsSlicer.StyleType = type
wb.SaveToFile(outputFile_xlsx, ExcelVersion.Version2013)
wb.Dispose()
新機能 ピボットテーブルデータを使用したスライサーの追加に対応しました。
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
pt = sheet.PivotTables[0]
slicers = worksheet.Slicers
index = slicers.Add(pt, "E12", 0)
xlsSlicer = slicers[index]
xlsSlicer.Name = "test_xlsSlicer"
xlsSlicer.Width = 100
xlsSlicer.Height = 120
xlsSlicer.StyleType = SlicerStyleType.SlicerStyleLight2
xlsSlicer.PositionLocked = True
slicerCache = xlsSlicer.SlicerCache
slicerCache.CrossFilterType = SlicerCacheCrossFilterType.ShowItemsWithNoData
slicerCacheItems = xlsSlicer.SlicerCache.SlicerCacheItems
xlsSlicerCacheItem = slicerCacheItems[0]
xlsSlicerCacheItem.Selected = False
slicers_2 = worksheet.Slicers
r1 = pt.PivotFields["year"]
index_2 = slicers_2.Add(pt, "I12", r1)
xlsSlicer_2 = slicers[index_2]
xlsSlicer_2.RowHeight = 40
xlsSlicer_2.StyleType = SlicerStyleType.SlicerStyleLight3
xlsSlicer_2.PositionLocked = False
slicerCache_2 = xlsSlicer_2.SlicerCache
slicerCache_2.CrossFilterType = SlicerCacheCrossFilterType.ShowItemsWithDataAtTop
slicerCacheItems_2 = xlsSlicer_2.SlicerCache.SlicerCacheItems
xlsSlicerCacheItem_2 = slicerCacheItems_2[1]
xlsSlicerCacheItem_2.Selected = False
pt.CalculateData()
wb.SaveToFile(outputFile_xlsx, ExcelVersion.Version2013)
wb.Dispose()
新機能 スライサーの削除に対応しました。
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet_1 = wb.Worksheets[0]
slicers = worksheet_1.Slicers
slicers.RemoveAt(0)
slicer = worksheet_1.Slicers[1]
worksheet_1.Slicers.Remove(slicer)
worksheet_2 = wb.Worksheets[2]
worksheet_2.Slicers.Clear()
wb.SaveToFile(outputFile_xlsx, ExcelVersion.Version2013)
新機能 スライサーの変更に対応しました。
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
slicers = worksheet.Slicers
xlsSlicer = slicers[0]
xlsSlicer.StyleType = SlicerStyleType.SlicerStyleDark4
xlsSlicer.Caption = "Slicer"
xlsSlicer.PositionLocked = True
slicerCacheItems = xlsSlicer.SlicerCache.SlicerCacheItems
xlsSlicerCacheItem = slicerCacheItems[0]
xlsSlicerCacheItem.Selected = False
displayValue = xlsSlicerCacheItem.DisplayValue
slicerCache = xlsSlicer.SlicerCache
slicerCache.CrossFilterType = SlicerCacheCrossFilterType.ShowItemsWithNoData
wb.SaveToFile(outputFile_xlsx, ExcelVersion.Version2013)
新機能 スライサー情報の取得に対応しました。
wb = Workbook()
wb.LoadFromFile(inputFile)
worksheet = wb.Worksheets[0]
slicers = worksheet.Slicers
content = ""
content += "slicers.Count:" + str(slicers.Count) + "\n"
xlsSlicer = slicers[1]
content += "xlsSlicer.Name:" + xlsSlicer.Name + "\n"
content += "xlsSlicer.Caption:" + xlsSlicer.Caption + "\n"
content += "xlsSlicer.NumberOfColumns:" + str(xlsSlicer.NumberOfColumns) + "\n"
content += "xlsSlicer.ColumnWidth:" + str(xlsSlicer.ColumnWidth) + "\n"
content += "xlsSlicer.RowHeight:" + str(xlsSlicer.RowHeight) + "\n"
content += "xlsSlicer.ShowCaption:" + str(xlsSlicer.ShowCaption) + "\n"
content += "xlsSlicer.PositionLocked:" + str(xlsSlicer.PositionLocked) + "\n"
content += "xlsSlicer.Width:" + str(xlsSlicer.Width) + "\n"
content += "xlsSlicer.Height:" + str(xlsSlicer.Height) + "\n"
slicerCache = xlsSlicer.SlicerCache
content += "slicerCache.SourceName:" + slicerCache.SourceName + "\n"
content += "slicerCache.IsTabular:" + str(slicerCache.IsTabular) + "\n"
content += "slicerCache.Name:" + slicerCache.Name + "\n"
slicerCacheItems = slicerCache.SlicerCacheItems
xlsSlicerCacheItem = slicerCacheItems[1]
content += "xlsSlicerCacheItem.Selected:" + str(xlsSlicerCacheItem.Selected) + "\n"
with open(outputFile_T, 'w') as f:
f.write(content)
wb.Dispose()
新機能 SPIREXLS-6162 Excel ファイルを JSON データへ変換する機能に対応しました。
workbook = Workbook()
workbook.LoadFromFile(inputFile)
workbook.SaveToFile(outputFile, FileFormat.Json)
workbook.Dispose()

Spire.Presentation for Python

カテゴリー ID 説明
新機能 環境変数によるライセンス設定のサポートを追加し、以下の3つの環境変数を自動的に認識して読み込みます:
SPIRE_OFFICE_LICENSE_KEY
SPIRE_PPT_LICENSE_KEY
SPIRE_LICENSE_KEY
最適化 - 複数のインターフェースの処理ロジックを最適化し、ユーザー体験における潜在的な問題をさらに解消しました。
不具合修正 SPIREPPT-3134 PPTX ドキュメントの読み込み時に「Microsoft PowerPoint 2007 file is corrupt.」という例外が発生する問題を修正しました。
不具合修正 SPIREPPT-3135, SPIREPPT-3136 PPTX ドキュメントの読み込み時に「Arg_NullReferenceException」が発生する問題を修正しました。

Spire.PDF for Python

カテゴリー ID 説明
新機能 SPIREPDF-7319 AutoFontSize プロパティを追加し、署名フィールドのサイズに合わせてテキストコンテンツを自動フィットさせる機能をサポート。
# PDFドキュメントオブジェクトを初期化
doc = PdfDocument()

# 署名するPDFファイルを読み込む
doc.LoadFromFile(inputFile)

# PFX証明書ファイルのパスワードを指定
pfxPassword = "e-iceblue"

# ドキュメントの最初のページを取得
page = doc.Pages.get_Item(0)

# 証明書ファイルを使用して通常の署名メーカーを作成
signatureMaker = PdfOrdinarySignatureMaker(doc, inputFile_pfx, pfxPassword)

# 署名検証レイヤーを設定(Falseは有効性シンボルを表示することを示す)
signatureMaker.SetAcro6Layers(False)

# 署名オブジェクトを取得し、署名者の基本情報を構成
signature = signatureMaker.Signature
signature.Name = "Gary"                      # 署名者名
signature.ContactInfo = "028-81705109"       # 連絡先
signature.Location = "Chengdu"               # 署名場所
signature.Reason = "The certificate of this document"  # 署名理由

# カスタム署名外観オブジェクトを作成
appearance = PdfSignatureAppearance(signature)
appearance.NameLabel = "Signer: "            # 名前ラベル
appearance.ContactInfoLabel = "ContactInfo: " # 連絡先ラベル
appearance.LocationLabel = "Location: "      # 場所ラベル
appearance.ReasonLabel = "Reaseon: "         # 理由ラベル(原文のスペルを維持)
appearance.SignatureImage = PdfImage.FromFile(inputFile_image)  # 署名画像を読み込み
appearance.GraphicMode = GraphicMode.SignImageAndSignDetail     # 署名画像と詳細情報を両方表示
signature.DocumentPermissions = PdfCertificationFlags.ForbidChanges  # ドキュメントの変更を禁止
appearance.SignImageLayout = SignImageLayout.Stretch            # 署名画像を伸縮レイアウト
appearance.AutoFontSize = True  # テキストの自動フォントサイズ調整を有効化

# ページ上の指定位置に署名を生成して適用(引数の順序:署名フィールド名、ページ、X座標、Y座標、幅、高さ、外観オブジェクト)
signatureMaker.MakeSignature("signName", page, 54.0, page.Size.Height - 300.0, 40.0, 40.0, appearance)

# 署名済みPDFドキュメントを保存
doc.SaveToFile(outputFile)

# ドキュメントを閉じてリソースを解放
doc.Close()
不具合修正 SPIREPDF-8056 テキスト置換後にフォントが正しく表示されない問題を修正。