Excel 如果在';foreach&x27;

Excel 如果在';foreach&x27;,excel,csv,powershell,null,output,Excel,Csv,Powershell,Null,Output,对不起,我不太清楚这个问题怎么说 这是前一个问题的后续问题: 我正在使用的导入XLS函数来自这里: 我当前的代码如下所示: . .\Import-XLS.ps1 $OutFile = ".\OutTest$(get-date -Format dd-MM).txt" $Content = Import-XLS '.\DummyData.xlsx' $Content | foreach-object{ $field1 = $("{0},{1},{2},{3},{4},{5},{6}" -f

对不起,我不太清楚这个问题怎么说

这是前一个问题的后续问题:

我正在使用的导入XLS函数来自这里:

我当前的代码如下所示:

. .\Import-XLS.ps1

$OutFile = ".\OutTest$(get-date -Format dd-MM).txt"

$Content = Import-XLS '.\DummyData.xlsx'

$Content | foreach-object{

$field1 = $("{0},{1},{2},{3},{4},{5},{6}" -f "Field1", $_."Value1", $_."Value2", $_."Value3", $_."Value4", $_."Value5", $_."Value6")
$field1.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries) -join ","

$field2 = $("{0},{1}" -f "Field2", $_."Value1")
$field2.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries) -join ","

} | Out-File $OutFile

我的DimMyDATA基本上是这个(我已经插入了$null来指出空白值)

因此,我设法让代码“ignore/skip”在一个集合中有一个空值

我的输出如下所示

Field1,1,2,4,5,6
Field2,1
Field1,B,A,B,A,B
Field2
我现在想要的帮助是如何删除“Field2”,因为它没有价值,或者使用;注释掉它

所以我的输出看起来像

Field1,1,2,4,5,6
Field2,1
Field1,B,A,B,A,B

本质上,如果一行的任何字段中没有为该行写入的数据,则应忽略该行

非常感谢你的帮助

编辑:

我发现需要删除{0}、{1}之间的逗号“,”,并使用空格。所以我用

$field2 = $("{0} {1}" -f "Field 2", $_."Value1")
$field2 = $field2.Split(" ",[System.StringSplitOptions]::RemoveEmptyEntries)
if ( $field2.Count -le 1) { ";$field2" } else { $field2 -join "`t`t" }
这适用于我的“大部分”领域

但是,有些字段和值中有空格。 此外,还有一些值,如“测试文本”

所以现在我开始

Field1  3,B,A,B,A,B
Field       2       TEST        TEXT
而不是(为了清楚起见引用)

我很高兴只对这几个字段使用某种例外。
我尝试了一些其他的事情,但我最终打破了IF语句,并且成功了;用值注释出字段,或不注释;注释掉没有值的字段。

下一个代码片段可能会有帮助:

### … … … ###
$Content | foreach-object{

    $field1 = $("{0},{1},{2},{3},{4},{5},{6}" -f "Field1", $_."Value1", $_."Value2", $_."Value3", $_."Value4", $_."Value5", $_."Value6")
    $auxarr = $field1.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $auxarr.Count -le 1) { ";$auxarr" } else { $auxarr -join "," }

    $field2 = $("{0},{1}" -f "Field2", $_."Value1")
    $auxarr = $field2.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $auxarr.Count -le 1) { ";$auxarr" } else { $auxarr -join "," }

} | Out-File $OutFile
编辑要回答其他(扩展)子问题,我需要删除
{0}、{1}
之间的逗号“,”,并使用空格:

如果数据包含有效逗号,则使用
String.Split
方法,例如:

    $burstr = [string[]]'#-#-#'
    $field2 = $("{0}$burstr{1}" -f "Field 2", $_."Value1")
    $field2 = $field2.Split($burstr,[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $field2.Count -le 1) { ";$field2" } else { $field2 -join "`t`t" }

下一个代码段可能会有所帮助:

### … … … ###
$Content | foreach-object{

    $field1 = $("{0},{1},{2},{3},{4},{5},{6}" -f "Field1", $_."Value1", $_."Value2", $_."Value3", $_."Value4", $_."Value5", $_."Value6")
    $auxarr = $field1.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $auxarr.Count -le 1) { ";$auxarr" } else { $auxarr -join "," }

    $field2 = $("{0},{1}" -f "Field2", $_."Value1")
    $auxarr = $field2.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $auxarr.Count -le 1) { ";$auxarr" } else { $auxarr -join "," }

} | Out-File $OutFile
编辑要回答其他(扩展)子问题,我需要删除
{0}、{1}
之间的逗号“,”,并使用空格:

如果数据包含有效逗号,则使用
String.Split
方法,例如:

    $burstr = [string[]]'#-#-#'
    $field2 = $("{0}$burstr{1}" -f "Field 2", $_."Value1")
    $field2 = $field2.Split($burstr,[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $field2.Count -le 1) { ";$field2" } else { $field2 -join "`t`t" }

所以您只需要一个简单的
If
语句
If($\.Value1){$Field2.Split…
所以您只需要一个简单的
If
语句?
If($\.Value1){$Field2.Split…
嘿,又来了,JosefZ。这很管用!你太棒了!:)我用$field1和$Field2代替$auxarr似乎管用,但我想检查一下这是否正常?还是不好的做法?只是想轻松地识别特定字段的变量。如果推荐的话,我可以用$field1x或其他什么替代。我已经更新了这个问题h我遇到了一个问题,我需要如何调整代码。再次感谢!(我觉得它的密切关系足以保证成为同一个问题的一部分).嘿,JosefZ.又来了!真是太棒了!:)我用$field1和$field2代替$auxarr这似乎有效,但想检查一下这是否正确?还是不好的做法?只是想简单地识别特定字段的变量。如果推荐的话,我可以用$field1x或其他什么替代?我已经用一个我遇到的问题更新了这个问题正在讨论我需要如何调整代码。再次感谢!(我觉得它之间的密切关系足以保证成为同一个问题的一部分)。
    $field2 = $("{0},{1}" -f "Field 2", $_."Value1")
    ### keep comma  ↑        ↓   or any other character not contained in data
    $field2 = $field2.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $field2.Count -le 1) { ";$field2" } else { $field2 -join "`t`t" }
    $burstr = [string[]]'#-#-#'
    $field2 = $("{0}$burstr{1}" -f "Field 2", $_."Value1")
    $field2 = $field2.Split($burstr,[System.StringSplitOptions]::RemoveEmptyEntries)
    if ( $field2.Count -le 1) { ";$field2" } else { $field2 -join "`t`t" }