0

我在 Sharepoint 中遇到问题。我有一个包含两列的列表,[开始日期] 和 [结束日期]。我创建了一个新列,一个计算字段,我想在其中查看两个日期之间的差异天数,例如 15(仅天数)。问题是 [结束日期] 可能为空,因此此新列不应为空,但应计算今天的日期 - 开始日期,并应每天自动更新,直到未输入结束日期。任何帮助将不胜感激。谢谢提前。

4

2 回答 2

0

您可以对计算字段使用以下公式:

 =IF(ISBLANK(enddate),(Today-startdate),(enddate-startdate))

上述计算基于项目更新的当前日期。在项目本身更新之前,计算字段不会更新。以下链接可能会帮助您满足每天更新字段的要求。

http://blog.pathtosharepoint.com/2008/08/14/calculated-columns-the-useless-today-trick/

于 2013-10-03T05:33:11.797 回答
0

几个月前,我遇到了同样的问题:用 'TODAY' (以及日期差异)更新计算列。主要问题:SharePoint 不会重新计算值,直到项目被更改。恕我直言,更新(更改)列表的所有项目以重新计算字段并不是一个好主意。
我找到了一种强制 SharePoint 更新我想要的计算列的方法(而不更新列表的每个项目):

使用 PowerShell 脚本更新计算字段

我每天早上(按计划)使用 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()

我在任何地方都没有看到这种方法,所以我写了这个答案,希望这会对某人有所帮助。

于 2018-05-08T18:47:48.113 回答