Spire.XLS 16.3.6 のリリースをお知らせいたします。本バージョンでは VBA マクロプロジェクトの操作、およびデータシミュレーション分析(シナリオマネージャー)に対応しました。また、ワークシートのコピー時にマクロが消失する不具合を修正しています。詳細は下記の通りです。
変更内容一覧
| カテゴリー | 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.XLS 16.3.6 をダウンロードしてください:






