总而言之,我使用大型Excel公式(大约3,000个字符)将大量数据行放入允许我直接插入数据库的格式中。 由于工作上的限制,我必须这样做。我正在添加这个公式,并且遇到了一个问题,我的一个新列需要使用不同数量的文本。
如果此字段中没有文本,则我需要输出为NULL。 如果有文字,我需要用单引号打印文本。由于数据从我们的程序导出到Excel的方式,这就是我需要它的工作方式。
下面的[@ [回调结果]]引用了我的一个列的名称,因此公式可以通过定位当前行中该列的值来动态增长。
代码段:
IF([@[Callback Result]]="",TEXT("NULL",""),TEXT("'"&[@[Callback Result]]&"'",""))
如果单元格为空,则输出: NULL
如果单元格的字符数不超过253个字符,则输出:无论我要键入的文本是什么,最多需要253个字符,并且单引号围绕它“
如果单元格超过253个字符则输出: #VALUE! (由公式引起的值引起错误。)
我已将此策略用于电子表格中的许多其他列,如果目标单元格为空,则需要打印NULL,但我从未遇到需要使用超过253个字符的情况(包括空格)。
如果有人能提供任何见解,我将不胜感激,因为我找不到解释TEXT功能限制的文档。我使用了一个更简化的代码版本(如下所示),它不需要进行NULL检查,并且通过使用它可以很好地提取非常大的文本集:
"'"&[@Transcription]&"', "
我宁愿不必限制输入字段的字符数量,但如果没有别的办法则会这样做。
很抱歉,如果我的解释过于冗长。我想不出一种缩短思路的方法。请让我知道您的想法,或者我是否需要澄清以下内容。
答案 0 :(得分:4)
正如上面的评论所述,您似乎误用了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 function似乎已正确解决了这个特殊问题,但值得注意的是TEXT function可以用于正确的格式掩码3}} EM>。 @符号用于表示格式字符串中的文本,数字和文本都可以使用相同的掩码进行格式化。例如:
=IF(LEN([@[Callback Result]]), TEXT([@[Callback Result]], "\'0.00\';\'@\'"), "NULL")
在上面,数字被格式化为两个小数位并用单引号括起来。文本用单引号括起来。虽然反斜杠转义字符并不是绝对需要显示单引号(它们不是格式掩码中的保留字符),但它们在这里没有任何危害,而且我是&#39;使用它们将此格式掩码的功能扩展到可能绝对需要它们的其他字符。示例:此工作表函数的官方文档错误地指出在任何情况下都不能使用星号(例如*或CHAR(42))。如果前面有反斜杠转义字符,则可以使用。
警告:虽然一个好的自定义格式掩码可以大大提高生产力,但它不会绕过原始问题根源的253字符限制。
答案 1 :(得分:2)
好。我觉得特别的。几小时的故障排除,我从来没有偶然发现了CONCATENATE功能。如果我提前知道它(仍在学习),我想这会有所帮助。
以下代码完美无缺:
IF([@[Callback Result]]="",TEXT("NULL",""),CONCATENATE("'",[@[Callback Result]],"'"))
很抱歉浪费任何人的时间,感谢您让我更多地思考为什么TEXT功能不实用。