このたび、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 | テキスト置換後にフォントが正しく表示されない問題を修正。 |






