2017-06-15 64 views
2

我正在创建一个PowerShell脚本通过标准的Excel电子表格上传数据到SQL服务器。我想在Excel电子表格中添加一些错误检查功能,这样如果链接错误,我可以将其全部放回填写电子表格的用户。Excel - 错误列多个错误在一个单元

作为示例这里是Excel电子表格的公司部的一部分:

enter image description here

此错误是指管理器销柱(D2),在那里它不会在管理器上载片存在:

enter image description here

以上是使用下面的公式:

=IF(COUNTIF('Manager'!$A$2:$A$1048576, [@[Manager Pin]])>0, "", "Manager Pin Does Not Exist") 

我想要的是在每个字段之间用一个换行符分隔符返回多个错误,因此在图像一中,如果管理员PIN码和公司PIN码都不存在,则ERRORS(A2)将是:

enter image description here

这样我可以排除任何进口,其中的错误部分是不是对事物的SQL侧空子。

---------按位错误组:

至于可能的错误的3设定的逐位误差的示例:

0 - No errors 
1 - Manager pin not valid 
2 - Company pin not valid 
3 - Manager pin not valid 
    Company pin not valid 
4 - Company name is null - required field 
5 - Manager pin not valid 
    Company name is null - required field 
6 - Company pin not valid 
    Company name is null - required field 
7 - Manager pin not valid 
    Company pin not valid 
    Company name is null - required field 

所以将被创建的上述误差在电子表格的单独表格中。然后,我可以在电子表格中创建一个隐藏列来计算错误代码。之后,我所要做的就是根据隐藏列中的错误代码引用ERRORS列中的错误代码。

+2

我会建议设置按位错误编号(例如1,2,4,8等),以便通过查看总数,您始终可以确定发生了哪些错误。例如7将是错误1,2和4; 5将是错误1和4; 10将是错误2和8.如果按位构造正确创建,则任何总和只能有一个错误代码组合。 0(零)表示错误代码成功。此外,总结比字符串连接更容易。 – Jeeped

+0

这是一个非常好的主意,最好的办法是做什么?有一个单独的隐藏单元,它可以在单独的表单上计算错误编号和错误响应列表,然后仅引用错误列中的错误响应? –

+0

那么,你会从一个错误代码表开始,其中的描述和错误代码从0开始,错误成功通过1,2,4,8,16等等,就像你需要的一样多。在进一步建议之前,我必须更深入地观察一下现有的方法。 – Jeeped

回答

1

您可以连接两个单独的类似检查的结果。 Assumning你有一个Company片与Manager片的相似的布局:

=IF(COUNTIF(Manager!$A$2:$A$1048576, [@[Manager Pin]])>0, 
    "", "Manager Pin Does Not Exist") 
& IF(COUNTIF(Company!$A$2:$A$1048576, [@[Company Pin]])>0, 
    "", CHAR(10)&"Company Pin Does Not Exist") 

顺便提一下,为什么要用$A$2:$A$1048576,而不是简单地A:A?如果你在serched表中有一个标题行不会匹配,那么让我们简化它。

=IF(COUNTIF(Manager!A:A, [@[Manager Pin]])>0, "", "Manager Pin Does Not Exist") 
& IF(COUNTIF(Company!A:A, [@[Company Pin]])>0, "", CHAR(10)&"Company Pin Does Not Exist") 

psThe MATCH替代:

=IF(ISNUMBER(MATCH([@[Manager Pin]], Manager!A:A,0)), "", "Manager Pin Does Not Exist") 
& IF(ISNUMBER(MATCH([@[Company Pin]], Company!A:A,0)), "", CHAR(10)&"Company Pin Does Not Exist") 
+0

非常感谢您的帮助,我从未使用过Match功能,因此不得不看一看。至于细胞的范围,不知道为什么我不使用A:A。这些引脚将始终被排序,它们是每个条目的自动增量字段,使用= ROW() - 1 –

+0

问题在于,在此电子表格的公司表单中,有4个字段需要检查并发布到错误单元格。这意味着我需要有一个巨大的功能去处理无效字段的每一个可能的结果。 –

+0

@OwainEsau在这种情况下,如果数据足够大,使用二进制搜索“匹配”将会快得多。如果您有兴趣,我可以添加匹配解决方案。 –

1

如果您有机会获得TEXTJOIN function(EXCEL 2016+),您可以通过换行符加入他们的行列:

= TEXTJOIN(CHAR(10), TRUE, IF(...), IF(...)) 
+0

我确实是这样,但不能保证我发送这张excel表格的人会,他们中的大多数人可能不会。 –

+0

@OwainEsau好点,但我想不出任何其他方式来避免消息之间可能出现的额外新行(VBA UDF除外)。顺便说一句,我认为'@ []'只能在Excel 2010+中使用,而在Excel 2007+中使用结构化的参考'[]' – Slai