我在Sharepoint中遇到问题。我有一个包含两列的列表,[开始日期]和[结束日期]。我创建了一个新列,一个计算字段,我希望看到两个日期之间的天数差异,例如15(仅限天数)。问题是[结束日期]可能为空,所以这个新列应该不是空的,但是应该计算今天的日期 - 开始日期,并且应该每天自动更新,直到没有输入结束日期。任何帮助都将受到高度赞赏。谢谢提前。
答案 0 :(得分:0)
您可以对计算字段使用以下公式:
=IF(ISBLANK(enddate),(Today-startdate),(enddate-startdate))
以上计算基于项目更新时的当前日期。在项目本身更新之前,计算字段不会更新。 以下链接可帮助您满足每天更新字段的要求。
http://blog.pathtosharepoint.com/2008/08/14/calculated-columns-the-useless-today-trick/
答案 1 :(得分:0)
几个月前,我遇到了同样的问题:使用&TANDAY'更新计算列。 (以及日期的差异)。 主要问题: SharePoint在项目更改之前不会重新计算值。恕我直言,更新(更改)列表中的所有项目以重新计算字段并不是一个好主意 我找到了一种方法来强制SharePoint更新我想要的计算列(而不更新列表中的每个项目):
我每天早上(按计划)使用PowerShell脚本更新计算列表字段(因此每天我都有实际值):
$calculatedField.Update()
执行代码的时间仅为10-20秒(包含数千条记录和3个计算列的列表)。 这不会导致项目更改(不影响上次更改的日期)。
我的剧本全文:
Add-PSSnapin Microsoft.SharePoint.PowerShell
$webURL = "http://your.site"
$web = get-spweb($webURL)
# I have 3 calculated columns, so I prefer to use an array:
[string[]] $arrFieldName = @("ExecDateFact", "ExecDateDiff", "Substatus")
# get list:
$list = $web.GetList($web.url+"/Lists/" + "your_list_name")
# get fields of the list:
$listFields = $list.Fields
# update each calculated field:
foreach ($fldName in $arrFieldName) {
$listFields.GetFieldByInternalName($fldName).Update()
}
# release resources:
$web.Dispose()
我还没有在任何地方看到这种方法,所以我写了这个答案,希望这会对某人有所帮助。