VSTO开发:如何获取MsProject任务屏幕显示的时长字符串?
解决方案
获取与界面一致的完整时长字符串(变量d)
MSProject的Task对象自带DurationText属性,它直接返回界面上显示的完整时长文本,完全匹配界面内容,且不受用户设置的时长单位影响。示例代码:
// 假设task是已获取的目标Task对象 string d = task.DurationText;
比如界面显示5h时,d的值就是"5h";如果用户把单位改成天,界面显示1d,d就会是"1d"。
提取界面显示的时长数值(变量s)
从DurationText中提取数字部分即可得到与界面一致的数值字符串。可以用正则表达式匹配开头的数字(支持整数和小数,比如2.5h中的2.5),示例代码:
using System.Text.RegularExpressions; // 从d中提取数值部分 Regex numRegex = new Regex(@"^\d+(\.\d+)?"); Match numMatch = numRegex.Match(d); string s = numMatch.Success ? numMatch.Value : string.Empty;
这样当d是"5h"时,s就是"5";如果d是"2.5d",s就是"2.5"。
为什么不直接用Task.Duration除以60?
Task.Duration存储的是精确的分钟数,但MSProject界面显示时长时会根据单位设置和内置的取整规则(比如四舍五入、截断小数等)处理数值,直接计算Duration / 60得到的结果可能和界面显示不一致。比如界面显示5h,实际Duration可能是298分钟,298/60≈4.97,取整后才是5,但DurationText直接返回界面已经处理好的结果,更可靠。
内容的提问来源于stack exchange,提问作者Manul74
相关产品推荐
相关产品推荐

