繁体   English   中英

Powershell 脚本从 excel 复制特定文本并创建 xml 文件?

[英]Powershell script to copy specific text from excel & create xml files?

我有一个 excel 文件,其中有两列,两者相互链接,我还有一个 xml 文件,我想在其中提供这些列数据,并希望为每个组创建 1 xml,例如第一个 xml 将带走第 20 组作为 20.xml

在此处输入图像描述

xml 文件内容为 - 以粗体突出显示的目标区域为 xml,以更新其中的 excel 数据。

<?xml version="1.0" encoding="UTF-8"?>
    <SingleAction>
        <Title>Setting Data Group - **20**</Title>
        <Relevance>(if exists property "in proxy agent context" then (not in proxy agent context) else true)</Relevance>
        
        code..
        
        code..
        

        <Parameter Name="Data ID">**20**</Parameter>
        <Settings>
        lots of other settings
        settings
        setttings
        ..
        ..
    
        <Target>
            <Data1Column>**NameA**</Data1Column>
            <Data1Column>**NameB**</Data1Column>
        </Target>

要做的第一件事是将 Excel 文件保存为 .csv 文件(确保选择 .csv 以逗号分隔)。

那么你会想要一个 xml模板 它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
    <SingleAction>
        <Title>Setting Data Group - **##PARAMNAME##**</Title>
        <Relevance>(if exists property "in proxy agent context" then (not in proxy agent context) else true)</Relevance>
        
        code..
        
        code..
        

        <Parameter Name="Data ID">**##PARAMNAME##**</Parameter>
        <Settings>
        lots of other settings
        settings
        setttings
        ..
        ..
    
        <Target>
            ##DATACOLUMNS##
        </Target>

然后我们将用实际数据替换##PLACEHOLDERS##。 在此 powershell 脚本中,我假设标头Data1Data2已更改为data1data2

$data = Import-Csv .\data.csv
$luTable = @{}

# Create Keys in Lookup Table
$data | % {
    if (!$luTable.ContainsKey("$($_.data2)")) { $luTable["$($_.data2)"] = New-Object System.Collections.ArrayList }
}

$luTable.Keys | % {
    $key = $_ # Store Key
    $data | where data2 -Match $_ | select data1 | % {
        $luTable[$key].Add($_.data1)
    }
}

# Build XML Files

$luTable.Keys | % {
    $key = $_

    $filetext = gc ".\template.xml"
    $filetext = $filetext.Replace("##PARAMNAME##", $key)

    $targets = ""
    
    $luTable[$key] | % {
        $targets += "<DataColumn1>$($_)</DataColumn1>"
    }

    $filetext = $filetext.Replace("##DATACOLUMNS##", $targets)

    sc -Path ".\$($key).xml" -Value $filetext
}

这应该够了吧!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM