このたび、Spire.Office 11.3.0 をリリースいたしました。本バージョンでは、Word から Excel への変換機能、および SmartArt の追加・操作機能を新たにサポートしました。さらに、Spire.XLS では VBA マクロプロジェクトの操作に対応し、Spire.PDFViewer は .NET 6.0 ベースの WPF および WinForms アプリケーションに対応しました。また、多数の既知の不具合も修正されています。
本リリースには、Spire.Doc、Spire.PDF、Spire.XLS、Spire.Presentation、Spire.Barcode、Spire.DocViewer、Spire.PDFViewer、Spire.Email、Spire.Spreadsheet、Spire.OfficeViewer の各コンポーネントの最新バージョンが含まれています。
DLL バージョン:
- Spire.Doc.dll v14.3.5
- Spire.PDF.dll v12.3.7
- Spire.XLS.dll v16.3.6
- Spire.Presentation.dll v11.3.1
- Spire.Barcode.dll v7.5.0
- Spire.Email.dll v6.8.0
- Spire.DocViewer.Forms.dll v8.9.5
- Spire.PdfViewer.Asp.dll v8.2.13
- Spire.PdfViewer.Forms.dll v8.2.13
- Spire.Spreadsheet.dll v7.5.3
- Spire.OfficeViewer.Forms.dll v8.8.1
ここで Spire.Office 11.3.0をダウンロードする:
このリリースで行われた変更点の一覧は以下のとおりです
Spire.Doc
| カテゴリー | ID | 説明 |
| 新機能 | SPIREDOC-9870 | 「グリッド定義時に右インデントを自動調整」機能のサポートを追加しました。
paragraph.Format.AdjustRightIndent = true; // デフォルト値はtrue |
| 新機能 | SPIREDOC-11030 | 「フォントのカーニング」機能のサポートを追加しました。
textRange.CharacterFormat.Kerning = 2.5f; |
| 新機能 | SPIREDOC-10514 SPIREDOC-11494 | SmartArt グラフィックの追加・操作のための新規インターフェースを複数追加しました。
Document document = new Document();
Section section = document.AddSection();
Spire.Doc.Documents.Paragraph paragraph = section.AddParagraph(); paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
Spire.Doc.Fields.TextRange textRange = paragraph.AppendText("RepeatingBendingProcess");
textRange.CharacterFormat.FontSize = 28f;
textRange.CharacterFormat.FontName = "Times New Roman";
paragraph = section.AddParagraph();
paragraph = section.AddParagraph();
paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
// 「繰り返しベンディングプロセス」レイアウトでSmartArtを追加
Spire.Doc.Fields.Shapes.Shape shape = paragraph.AppendSmartArt(SmartArtType.RepeatingBendingProcess, 432, 252);
SmartArt repeatingBendingSmartArt = shape.SmartArt;
// ノードテキストを追加
SmartArtNode process1 = repeatingBendingSmartArt.Nodes[0];
process1.Text = "1";
((Spire.Doc.Fields.TextRange)process1.Paragraphs[0].ChildObjects[0]).CharacterFormat.FontName = "Calibri";
((Spire.Doc.Fields.TextRange)process1.Paragraphs[0].ChildObjects[0]).CharacterFormat.FontSize = 20f;
((Spire.Doc.Fields.TextRange)process1.Paragraphs[0].ChildObjects[0]).CharacterFormat.TextColor = Color.Crimson;
// ノードテキストを追加
SmartArtNode process2 = repeatingBendingSmartArt.Nodes[1];
process2.Text = "2";
((Spire.Doc.Fields.TextRange)process2.Paragraphs[0].ChildObjects[0]).CharacterFormat.FontSize = 15f;
// ノードテキストを追加
SmartArtNode process3 = repeatingBendingSmartArt.Nodes[2];
process3.Text = "3";
((Spire.Doc.Fields.TextRange)process3.Paragraphs[0].ChildObjects[0]).CharacterFormat.FontSize = 10f;
// ノードテキストを追加
SmartArtNode process4 = repeatingBendingSmartArt.Nodes[3];
process4.Text = "4";
((Spire.Doc.Fields.TextRange)process4.Paragraphs[0].ChildObjects[0]).CharacterFormat.FontSize = 10f;
// ノードテキストを追加
SmartArtNode process5 = repeatingBendingSmartArt.Nodes[4];
process5.Text = "5";
((Spire.Doc.Fields.TextRange)process5.Paragraphs[0].ChildObjects[0]).CharacterFormat.FontSize = 10f;
document.SaveToFile(outputFile, FileFormat.Docx);
document.Close(); |
| 新機能 | SPIREDOC-11622 | SmartArt 内のすべてのノードからテキストを取得する機能のサポートを追加しました。
using (Document document = new Document(inputFile))
{
// すべてのセクションをループ処理
foreach (Section section in document.Sections)
{
if (section?.Paragraphs == null) continue;
// セクション内のすべての段落をループ処理
foreach (Spire.Doc.Documents.Paragraph paragraph in section.Paragraphs)
{
foreach (var childObj in paragraph.ChildObjects)
{
if (childObj is Spire.Doc.Fields.Shapes.Shape shape && shape.HasSmartArt)
{
SmartArt smartArt = shape.SmartArt;
if (smartArt == null) continue;
TraverseSmartArtNodes(smartArt.Nodes, builder, 0);
}
}
}
}
}
public static void TraverseSmartArtNodes(SmartArtNodeCollection nodes, StringBuilder builder, int level)
{
if (nodes == null || nodes.Count == 0) return;
for (int nodeIdx = 0; nodeIdx < nodes.Count; nodeIdx++)
{
SmartArtNode node = nodes[nodeIdx];
if (node == null) continue;
// ノードテキストをクリーンアップ
string nodeText = node.Text != null ? node.Text.Trim() : "Empty Text";
if (nodeText == "\r" || string.IsNullOrEmpty(nodeText)) continue;
// ノードレベルの識別子を連結
string nodePrefix;
switch (level)
{
case 0:
nodePrefix = "smartArt.Nodes";
break;
case 1:
nodePrefix = "smartArt.Nodes.ChildNodes";
break;
case 2:
nodePrefix = "smartArt.Nodes.ChildNodes.ChildNodes";
break;
default:
nodePrefix = $"smartArt.Nodes.Level{level}";
break;
}
// 基本的なテキスト出力
builder.AppendLine($"{nodePrefix}_{nodeIdx}: {nodeText}");
// 子ノードを再帰的に処理
TraverseSmartArtNodes(node.ChildNodes, builder, level + 1);
}
} |
| 新機能 | — | Word から Excel への変換をサポートを追加しました。
Document.SaveToFile("output.xlsx", FileFormat.XLSX); |
| 調整 | — | HtmlExportOptions を Spire.Doc から Spire.Doc.Exporting に移動しました。 |
| 調整 | — | MarkdownExportOptions を Spire.Doc から Spire.Doc.Exporting に移動しました。 |
| 不具合修正 | SPIREDOC-11724 | 段落テキストの取得結果が不正確になる問題を修正しました。 |
| 不具合修正 | SPIREDOC-11743 | Word ファイルを PDF に変換する際にアラビア語テキストのフォントが変更される問題を修正しました。 |
| 不具合修正 | SPIREDOC-11787 | ページ抽出時に不要な空白ページが表示される問題を修正しました。 |
Spire.XLS
| カテゴリー | ID | 説明 |
| 新機能 | SPIREXLS-938 SPIREXLS-5995 | VBA マクロプロジェクトの操作機能を追加(作成・読み取り・編集・削除に対応)。
VBA プロジェクトの追加: Workbook workbook = new Workbook();
// ドキュメントにVBAプロジェクトを追加
IVbaProject vbaProject = workbook.VbaProject;
vbaProject.Name = "SampleVBAMacro";
string text = "Encoding before modification: " + vbaProject.CodePage.ToString() + "\n";
vbaProject.CodePage = 936; // エンコード設定(中国語に対応)
text += "Encoding after modification: " + vbaProject.CodePage.ToString() + "\n";
File.WriteAllText(outputFile_TXT, text);
// プロジェクトにVBAモジュールを追加
IVbaModule vbaModule = vbaProject.Modules.Add("SampleModule", VbaModuleType.Module);
// VBAマクロのソースコードを設定
vbaModule.SourceCode = @"
Sub ExampleMacro()
' 変数宣言
Dim ws As Worksheet
Dim i As Integer
' アクティブシートを参照設定
Set ws = ActiveSheet
' ワークシート内容をクリア(任意)
ws.Cells.Clear
' サンプルデータを出力
With ws
' ヘッダー行を記入
.Range(""A1:C1"").Value = Array(""No."", ""Project Name"", ""Amount"")
' ループで10行のデータを作成
For i = 1 To 10
.Cells(i + 1, 1).Value = i ' 番号列
.Cells(i + 1, 2).Value = ""Project "" & i ' プロジェクト名列
.Cells(i + 1, 3).Value = i * 100 ' 金額列(計算例)
Next i
' 列幅を自動調整
.Columns(""A:C"").AutoFit
' ヘッダー行書式設定
With .Range(""A1:C1"")
.Font.Bold = True
.Interior.Color = RGB(200, 220, 255) ' 水色背景
End With
' 金額列の数値書式設定
.Range(""C2:C11"").NumberFormat = ""$#,##0.00""
End With
' 完了メッセージを表示
MsgBox ""Data population completed!"", vbInformation, ""Operation Prompt""
End Sub";
// Excelファイルを保存
workbook.SaveToFile(outputFile_Xls, FileFormat.Version97to2003);
VBA プロジェクトの読み取り: Workbook wb = new Workbook(); wb.LoadFromFile(inputFile); Worksheet ws = wb.Worksheets[0]; IVbaProject vbaProject = wb.VbaProject; string text = "IsProtected:" + vbaProject.IsProtected + "\n"; text += "Name:" + vbaProject.Name + "\n"; text += "Description:" + vbaProject.Description + "\n"; text += "HelpFileName:" + vbaProject.HelpFileName + "\n"; text += "ConditionalCompilation:" + vbaProject.ConditionalCompilation + "\n"; text += "LockProjectView:" + vbaProject.LockProjectView + "\n"; text += "Password:" + vbaProject.Password + "\n"; text += "CodePage:" + vbaProject.CodePage + "\n"; IVbaModule mod = vbaProject.Modules.GetWorksheetModule(ws); text += "IVbaModule:" + "\n"; text += "Name:" + mod.Name.ToString() + "\n"; text += "SourceCode:\n" + mod.SourceCode.ToString() + "\n"; text += "Type:" + mod.Type.ToString() + "\n"; File.WriteAllText(outputFile_TXT, text.ToString()); vbaProject.Modules.Clear(); wb.SaveToFile(outputFile); VBA プロジェクトの編集: Workbook wb = new Workbook(); wb.LoadFromFile(inputFile); Worksheet ws = wb.Worksheets[0]; IVbaProject vbaProject = wb.VbaProject; vbaProject.Password = "1234"; vbaProject.Name = "modify"; vbaProject.Description = "Description"; vbaProject.HelpFileName = "image1.png"; vbaProject.ConditionalCompilation = "DEBUG = 2"; vbaProject.LockProjectView = true; IVbaModule mod = vbaProject.Modules.GetWorksheetModule(ws); mod.Name = "IVbaModule"; mod.SourceCode = "Dim lRow As Long"; mod.Type = VbaModuleType.Module; wb.SaveToFile(outputFile); VBA プロジェクトの削除: Workbook wb1 = new Workbook();
wb1.LoadFromFile(inputFile_1);
IVbaProject vbaProject1 = wb1.VbaProject;
vbaProject1.Modules.Remove("SampleModule");
vbaProject1.Modules.RemoveAt(0);
wb1.SaveToFile(outputFile_1);
|
| 新機能 | SPIREXLS-6020 | データシミュレーション分析(シナリオマネージャー)機能を追加。作成・編集・削除・サマリー生成・統合に対応。
シナリオの作成: Workbook wb = new Workbook();
wb.LoadFromFile(inputFile);
Worksheet worksheet = wb.Worksheets[0];
// ワークシート内のシナリオコレクションを取得
XlsScenarioCollection scenarios = worksheet.Scenarios;
// シナリオ用に異なる数値を格納したリストオブジェクトを初期化
List<object> currentChangePercentage_Values = new List<object> { 0.23, 0.8, 1.1, 0.5, 0.35, 0.2 };
List<object> increasedChangePercentage_Values = new List<object> { 0.45, 0.56, 0.9, 0.5, 0.58, 0.43 };
List<object> decreasedChangePercentage_Values = new List<object> { 0.3, 0.2, 0.5, 0.3, 0.5, 0.23 };
List<object> currentQuantity_Values = new List<object> { 1500, 3000, 5000, 4000, 500, 4000 };
List<object> increasedQuantity_Values = new List<object> { 1000, 5000, 4500, 3900, 10000, 8900 };
List<object> decreasedQuantity_Values = new List<object> { 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();
シナリオサマリーの生成: Workbook wb = new Workbook();
wb.LoadFromFile(inputFile);
Worksheet worksheet = wb.Worksheets[0];
// ワークシート内のシナリオコレクションを取得
XlsScenarioCollection scenarios = worksheet.Scenarios;
// シナリオ用に異なる数値を格納したリストオブジェクトを初期化
List<object> currentChangePercentage_Values = new List<object> { 0.23, 0.8, 1.1, 0.5, 0.35, 0.2 };
List<object> increasedChangePercentage_Values = new List<object> { 0.45, 0.56, 0.9, 0.5, 0.58, 0.43 };
List<object> decreasedChangePercentage_Values = new List<object> { 0.3, 0.2, 0.5, 0.3, 0.5, 0.23 };
List<object> currentQuantity_Values = new List<object> { 1500, 3000, 5000, 4000, 500, 4000 };
List<object> increasedQuantity_Values = new List<object> { 1000, 5000, 4500, 3900, 10000, 8900 };
List<object> decreasedQuantity_Values = new List<object> { 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();
シナリオの編集: Workbook wb = new Workbook(); wb.LoadFromFile(inputFile); Worksheet worksheet = wb.Worksheets[0]; // ワークシート内のシナリオコレクションを取得 XlsScenarioCollection scenarios = worksheet.Scenarios; XlsScenario scenario1 = scenarios[0]; XlsScenario scenario2 = scenarios[1]; // シナリオを編集 scenario1.SetVariableCells(worksheet.Range["A1:A5"], scenario2.Values); CellRange sourceCell = worksheet.Range["B1:B5"]; scenario2.SetVariableCells(sourceCell, scenario2.Values); scenario1.Show(); scenario2.Show(); // ワークブックを保存 wb.SaveToFile(outputFile, ExcelVersion.Version2013); wb.Dispose(); シナリオの統合: Workbook wb = new Workbook(); wb.LoadFromFile(inputFile); Worksheet worksheet1 = wb.Worksheets[0]; Worksheet worksheet2 = wb.Worksheets[1]; // シナリオを統合 worksheet1.Scenarios.Merge(worksheet2); // ワークブックを保存 wb.SaveToFile(outputFile, ExcelVersion.Version2013); wb.Dispose(); シナリオの削除: Workbook wb = new Workbook();
wb.LoadFromFile(inputFile);
Worksheet worksheet = wb.Worksheets[0];
// ワークシート内のシナリオコレクションを取得
XlsScenarioCollection scenarios = worksheet.Scenarios;
// シナリオを削除
scenarios.RemoveScenarioAt(0);
scenarios.RemoveScenarioByName("two");
string content = "";
content += "Count:" + scenarios.Count + "\n";
content += "ContainsScenario:" + scenarios.ContainsScenario("two").ToString() + "\n";
content += "ContainsScenario:" + scenarios.ContainsScenario("one").ToString() + "\n";
File.WriteAllText(outputFile, content.ToString());
// ワークブックを保存
wb.SaveToFile(outputFile, ExcelVersion.Version2013);
wb.Dispose();
|
| 不具合修正 | SPIREXLS-5995 SPIREXLS-6077 | ワークシートコピー時にマクロが消失する問題を修正。 |
Spire.Presentation
| カテゴリー | ID | 説明 |
| 不具合修正 | SPIREPPT-2728 | 図形の影効果が取得できない問題を修正しました。 |
| 不具合修正 | SPIREPPT-3072 | PowerPoint から PDF への変換時にテキストがずれる問題を修正しました。 |
| 不具合修正 | SPIREPPT-3081 | 3D アニメーションを含む PowerPoint の読み込み時に "Property not found" 例外が発生する問題を修正しました。 |
| 不具合修正 | SPIREPPT-3085 | PowerPoint から PDF への変換時に "Object reference not set to an instance of an object" 例外が発生する問題を修正しました。 |
Spire.PDF
| 不具合修正 | SPIREPDF-5696 SPIREPDF-6453 | PDF の結合時に System.OutOfMemoryException が発生する問題を修正しました。 |
| 不具合修正 | SPIREPDF-7070 | 結合後の PDF ドキュメントがブラウザで開けない問題を修正しました。 |
| 不具合修正 | SPIREPDF-7938 | PDF を PDF/A-1a などの標準形式に変換した際に、チェックボックスのチェックマークが消失する問題を修正しました。 |
| 不具合修正 | SPIREPDF-7957 | PDF を Word に変換する際に、内容の書式が正しくない問題を修正しました。 |
| 不具合修正 | SPIREPDF-7965 | SPIREPDF-7965 PDF を画像に変換する際に System.NullReferenceException が発生する問題を修正しました。 |
| 不具合修正 | SPIREPDF-7966 | PDF の読み込み時に「An item with the same key has already been added」例外が発生する問題を修正しました。 |
| 不具合修正 | SPIREPDF-7969 | 指定範囲でテキスト検索を行うと結果が不正確になる問題を修正しました。 |
Spire.PDFViewer
| 新機能 | — | .NET 6.0 WPF および WinForms アプリケーションのサポートを追加しました。 |






