将DataTable转换为CSV

时间:2015-12-29 20:03:25

标签: csv powershell datatable

我希望能够Import-Csv进入PowerShell表,以便我可以使用PowerShell脚本编辑每个部分,例如$table.row[0].name = 100Import-Csv不会使用CSV文件提供“表格”。

$tabName = "TableA"
$table = New-Object system.Data.DataTable "$tabName"
$col1 = New-Object system.Data.DataColumn ColumnName1,([string])
$col2 = New-Object system.Data.DataColumn ColumnName2,([int])
$table.columns.add($col1)
$table.columns.add($col2)
$row = $table.NewRow()
$row.ColumnName1 = "A"
$row.ColumnName2 = "1"
$table.Rows.Add($row)
$row = $table.NewRow()
$row.ColumnName1 = "B"
$row.ColumnName2 = "2" 
$table.Rows.Add($row)
$table.PrimaryKey = $table.Columns[0]
$table | Export-Csv C:\test.csv

我想要一种$table | Import-Csv C:\test.csv的方法,并且能够$table.row[0].columnname1 = "C"并且将“A”更改为“C”。然后我可以在进行更改后重新导出它。

2 个答案:

答案 0 :(得分:2)

您只需将表格导入DataTable cmdlet即可将Export-Csv对象导出为CSV:

$table | Export-Csv C:\table.csv -NoType

但是,通过这样做会丢失表列的所有类型信息(Export-Csv cmdlet只能保存有关表示行的对象类型的信息,而不是有关其属性类型的信息。 / p>

保存和恢复DataTable对象的更好方法是将表save作为XML:

$writer = New-Object IO.StreamWriter 'C:\path\to\data.xml'
$table.WriteXml($writer, [Data.XmlWriteMode]::WriteSchema)
$writer.Close()
$writer.Dispose()

restore XML转换为DataSet

$ds = New-Object Data.DataSet
$ds.ReadXml('C:\path\to\data.xml', [Data.XmlReadMode]::ReadSchema)
$table = $ds.Tables[0]

确保将模式与数据一起导出和导入,因为这是存储类型信息的地方。

答案 1 :(得分:0)

如您所见,import-csv的结果不是.NET DataTable对象。有这个函数可以转换为名为“Out-DataTable”https://gallery.technet.microsoft.com/scriptcenter/4208a159-a52e-4b99-83d4-8048468d29dd的DataTable。但我不知道它可以向两个方向发展。