如果字符数超过 253,为什么 TEXT 函数 return 没有任何结果?

Why does the TEXT function not return any results if the amount of characters exceeds 253?

长话短说,我使用大型 Excel 公式(长度约 3,000 个字符)将大量数据行转换为允许我直接插入数据库的格式。 由于工作限制,我必须这样做。我正在添加到这个公式中,运行我遇到了一个问题,我的一个新专栏需要不同数量的要使用的文本。

如果此字段中没有文本,则我需要输出为 NULL。 如果有文本,我需要用单引号将文本打印出来。 由于数据导出到 Excel 的方式,这是我需要它工作的方式来自我们的计划。

下面的 [@[Callback Result]] 引用了我的其中一个列的名称,因此公式可以通过定位当前行中该列的值来动态增长。

代码片段:

IF([@[Callback Result]]="",TEXT("NULL",""),TEXT("'"&[@[Callback Result]]&"'",""))

单元格为空时输出: NULL

如果单元格不超过 253 个字符,则输出: 'Whatever text I want to type that takes up to 253 characters with single quotes surrounding it'

如果单元格超过 253 个字符,则输出: #VALUE! (由公式在值中抛出错误引起。)

我已将此策略用于电子表格中的许多其他列,如果目标单元格为空白,则需要打印 NULL,但我从未 运行 遇到需要使用的情况超过 253 个字符(包括空格)。

如果有人能提供任何见解,我将不胜感激,因为我找不到解释 TEXT 函数限制的文档。我使用了一个更简化的代码版本(如下所示),它不需要 NULL 检查,它可以通过使用以下方式提取非常大的文本集:

"'"&[@Transcription]&"', "

我宁愿不必限制输入到该字段中的字符数量,但如果没有其他方法,我会这样做。

抱歉,如果我的解释太长。我想不出有什么办法可以缩短我的思绪。请让我知道您的想法,或者如果我需要在下面澄清任何内容。

如上述评论所述,您似乎误用了 TEXT function 的原意。此外,您使用的 格式掩码 似乎不正确。

简单的字符串连接就足够了。

=IF(LEN([@[Callback Result]]), "'"&[@[Callback Result]]&"'", "NULL")

Alternates:
=IF(LEN([@[Callback Result]]), CHAR(39)&[@[Callback Result]]&CHAR(39), "NULL")
=IF(LEN([@[Callback Result]]), CONCATENATE("'", [@[Callback Result]], "'"), "NULL")
=IF(LEN([@[Callback Result]]), CONCATENATE(CHAR(39), [@[Callback Result]], CHAR(39)), "NULL")

如果这个提议的解决方案证明不适合您的情况,请提供一些样本数据和预期结果,我将尝试扩展这个方法。

附录:

虽然这个特殊问题似乎已通过 CONCATENATE 函数 得到正确解决,但值得注意的是 TEXT function 可用于此目的正确的 格式掩码 。 @ 符号用于表示格式字符串中的文本,数字和文本都可以使用相同的掩码进行格式化。示例:

=IF(LEN([@[Callback Result]]), TEXT([@[Callback Result]], "\'0.00\';\'@\'"), "NULL")

在上面,数字被格式化为两位小数并用单引号引起来。文本用单引号括起来。虽然 反斜杠 转义字符并非绝对需要显示单引号(它们不是格式掩码中的 保留字符 ),但它们没有害处在这里,我已经使用它们将此格式掩码的功能扩展到可能绝对需要它们的其他字符。示例:有关此工作表函数的官方文档错误地指出在任何情况下都不能使用星号(例如 * 或 CHAR(42))。如果前面有反斜杠转义字符,它可以使用。

Caveat: While a good custom format mask can greatly improve productivity, it does not bypass the 253 character limit that was at the root of the original problem here.

嗯。我觉得格外特别。经过数小时的故障排除,我什至从未偶然发现 CONCATENATE 函数。我想如果我提前知道它会有所帮助(还在学习)。

以下代码完美运行:

IF([@[Callback Result]]="",TEXT("NULL",""),CONCATENATE("'",[@[Callback Result]],"'"))

很抱歉浪费了大家的时间,也谢谢你让我多想想为什么TEXT功能不实用。