【问题标题】:Sharepoint: Calculated Column replace all spacesSharepoint:计算列替换所有空格
【发布时间】:2025-12-02 19:45:01
【问题描述】:

看起来这确实是一件简单的事情(可能是),但我试图获取列的字符串数据,然后通过计算列,用 %20 替换所有空格,以便 HTML工作流生成的电子邮件中的链接实际上不会在第一个空格处断开。

例如,我们的源列中有这个:

file:///Z:/data/这是我们的报告.rpt

并希望在计算列中得到这个结果:

file:///Z:/data/This%20is%20our%20report.rpt

已经用过 REPLACE,做了一个可怕的超级嵌套 REPLACE/SEARCH 版本,但问题是你必须为每个潜在空间嵌套,如果你不知道前面有多少,它不会'不工作,或者会错过一些。

你们中有人遇到过这种情况吗?你们是如何处理的?

提前致谢!

【问题讨论】:

    标签: sharepoint formatting sharepoint-2007 calculated-columns


    【解决方案1】:

    据我所知,没有使用计算列语法的通用解决方案。这种情况的标准解决方案是使用 ItemAdded (/ItemUpdated) 事件并从代码中初始化字段值。

    【讨论】:

    • 这是一个很好的选择,我们正在寻找一个“更轻量级”的解决方案,奇怪的是他们没有一个 REPLACE 的变体来解析目标的整个字符串
    • 是的,这很痛苦。公式集基于 Excel 术语......希望他们在使用 SUBSTITUTE 时能麻烦地移植 SUBSTITUTE。
    • 确实够了...令人惊讶,但同时也不足为奇,无论如何感谢您提供有关事件方法的方法
    【解决方案2】:

    通过使用一系列计算列,我能够根据我的情况解决这个问题。

    在第一个计算列 (C1) 中,我输入了一个公式来删除第一个空格,如下所示:

    =IF(ISNUMBER(FIND(" ",[Title])),REPLACE([Title],FIND(" ",[Title]),1,"%20"),[Title])
    

    在第二个计算列 (C2) 中,我使用了:

    =IF(ISNUMBER(FIND(" ",[C1])),REPLACE([C1],FIND(" ",[C1]),1,"%20"),[C1]).
    

    在我的例子中,我想对最多四个空格进行编码,因此我以相同的方式使用了 3 个计算列(C1、C2、C3)并获得了所需的结果。

    这不如使用单个计算列有效,但如果 SUBSTITUTE 在您的 SharePoint 环境中不起作用,并且您不能使用事件处理程序或工作流,它可能会提供一个可行的替代方案。

    我实际上使用了一个稍微不同的公式,但它是在我目前无法访问的工作机器上,所以我只是从类似的 S.O. 中获取了这个公式。题。任何将第一次出现的空格替换为“%20”的公式都可以使用,诀窍是 a) 如果公式中没有更多空格,请确保公式返回原始字符串不变,并且 b) 测试,测试, 测试。创建一个列表视图,其中包含您尝试编码的字段以及计算的字段,并查看您是否获得了所需的结果。

    【讨论】:

      【解决方案3】:

      以便工作流生成的电子邮件中的 HTML 链接实际上不会在第一个空格处中断。

      只有当您没有用引号将您的链接括起来时,浏览器才会这样做

      如果您将链接用引号括起来,它确实不会在第一个空格处被切断

      在 SharePoint 公式中是:

      ="""file:///Z:/data/This is our report.rpt"""
      

      因为两个引号是输出引号的 SP 转义符号

      【讨论】:

        【解决方案4】:

        你可以使用这个公式(从 1 开始修剪,在我的例子中是 4):

        =IF(ISBLANK([EUR Amount]),"",(TRIM(MID([EUR Amount],4,2))&TRIM(MID([EUR Amount],6,2))&TRIM(MID([EUR Amount],8,2))&TRIM(MID([EUR Amount],10,2))&TRIM(MID([EUR Amount],12,2))&TRIM(MID([EUR Amount],14,2)))*1)
        

        【讨论】: