作成日: 2025/03/07 最終更新日: 2025/05/15
文書種別
不具合
発生環境
17.0J
状況
修正済み
詳細
回避方法
■サンプルコード(VB.NET)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 【回避方法】カスタム関数としてMINUTE関数を追加
FpSpread1.AddCustomFunction(New MINUTE1())
With FpSpread1.ActiveSheet
.Columns(0).Width = 150
.SetValue(0, 0, New DateTime(2025, 3, 4, 0, 1, 0))
.SetValue(1, 0, "HOUR(A1)=")
.SetValue(2, 0, "MINUTE(A1)=")
.SetValue(3, 0, "SECOND(A1)=")
.SetFormula(1, 1, "HOUR(A1)")
.SetFormula(2, 1, "MINUTE(A1)")
.SetFormula(3, 1, "SECOND(A1)")
End With
End Sub
End Class
' 【回避方法】独自のMINUTE関数を実装
Public Class MINUTE1
Inherits GrapeCity.CalcEngine.Function
Public Sub New()
MyBase.New("MINUTE", 1, 1, GrapeCity.CalcEngine.FunctionAttributes.Number Or GrapeCity.CalcEngine.FunctionAttributes.Spillable)
End Sub
Protected Overrides Sub Evaluate(arguments As GrapeCity.CalcEngine.IArguments, result As GrapeCity.CalcEngine.IValue)
Dim context As GrapeCity.CalcEngine.IEvaluationContext = arguments.EvaluationContext
Dim days As Double = arguments(0).GetNumber(context)
If context.Date1904 Then
days += 1462
End If
Const MIN_DATE_LOTUS As Double = 0.0
Const MIN_DATE_OA As Double = -657435.0
Const MAX_DATE As Double = 2958466.0
If (context.ExcelDateTimeCompatible AndAlso days >= MIN_DATE_LOTUS AndAlso days < MAX_DATE) OrElse (Not context.ExcelDateTimeCompatible AndAlso days >= MIN_DATE_OA AndAlso days < MAX_DATE) Then
' valid date
Dim MS As Double = Math.Round(days * 86400000, MidpointRounding.AwayFromZero)
result.SetValue(context, CInt((MS / 60000) Mod 60))
Else
context.Error = GrapeCity.CalcEngine.CalcError.Number
End If
End Sub
End Class