使用VBA进行MS Project,其中一个命令是DateDifference。
differencedate = Application.DateDifference(tsk.BaselineStart, tsk.BaselineFinish, ActiveProject.Calendar)
但是,我正在尝试将VSTO用于MS Project,但我可以弄清楚如何使用DateDifference。是否有一个等效的命令cor C#?
答案 0 :(得分:1)
您可以在vsto中使用完全相同的MS Project VBA方法。将Application
更改为您的MSProject.Application变量名称和前缀ActiveProject
与该变量。例如,如果您的变量名称为ProjApp
,请使用此:
differencedate = ProjApp.DateDifference(tsk.BaselineStart, tsk.BaselineFinish, ProjApp.ActiveProject.Calendar)
返回的值将是日期之间的持续时间(以分钟为单位),与在VBA中使用时的持续时间相同。
底线:如果您想要在VBA中获得相同的计算,请使用此方法。如果你想要在日期之间经过的时间使用C#的内置日期数学函数。在处理cpm驱动的MS项目日期时,前者最相关。
更新:我在C#中对此进行了测试,发现DateDifference
方法抛出了NotImplemented
异常(但在vb.net中运行正常)。由于此方法是准确计算两个日期之间持续时间的唯一方法,因此您可以将vb.net用于此部分,在解决方案中添加单独的(vb)项目。
更新2 :这是您可以从c#调用的vb.net类:
Imports Microsoft.Office.Interop
Public Class MsProjectMethods
Public Function MsProjectDateDifference(ByVal ProjApp As MSProject.Application,
ByVal startDate As DateTime,
ByVal finishDate As DateTime) As Int32
Dim returnValue As Object = ProjApp.DateDifference(startDate, finishDate)
If IsNumeric(returnValue) Then
Return Convert.ToInt32(returnValue)
Else
Throw New System.Exception("An exception has occurred.")
End If
End Function
End Class
以下是你如何称呼它:
ClassLibrary1.MsProjectMethods MspVb = new ClassLibrary1.MsProjectMethods();
int differencedate = MspVb.MsProjectDateDifference(ProjApp,
Convert.ToDateTime(tsk.BaselineStart),
Convert.ToDateTime(tsk.BaselineFinish));
答案 1 :(得分:0)
日期存储为数字,其中1900年1月1日的天数是数字的整数部分,数字的小数部分是一天的一小部分。显示数字时,它可能会根据您用于转换为字符串的方法而有所不同。 VBA和Net Library都在内存中存储相同的数字。有些方法只显示整数,有些只显示数字的小数部分,其他方法则显示整数。显示也可能因国家/地区而异。 6.16可以是6天,6小时,6分钟或6秒。它可以是整数,只是数字的小数部分或甚至是分数的较小部分。通过简单地添加或减去存储在存储器中的数字来执行数学。希望正确对齐。
答案 2 :(得分:-1)
Timespan有以下方法
component