【发布时间】:2020-07-10 13:42:22
【问题描述】:
我有一个具有列数和行数的 excel 表我需要删除除一列之外的所有列并删除除预定义行之外的所有行(有另一个包含一列和数据(以行为单位)的 Excel 表需要删除。 我已经完成了第一个删除所有列的操作,但我只能使用列号来执行此操作,并且我想使用标题名称(即“产品名称”)来执行此操作,因为列号可能会随其他工作表而变化。 也想对 Rows 做同样的事情,这样我就可以比较我的参考 execl.xlsx 文件中的行数据并删除相同的行数据。
$file = "C:\TE.xlsx" # here goes the path and name of the excel file.
$ColumnsToKeep = 4 # Specify the column numbers to delete.
$excel = New-Object -comobject Excel.Application # Creating object of excel in powershell.
$excel.DisplayAlerts = $False
$excel.visible = $False
$workbook = $excel.Workbooks.Open($file)
$sheet = $workbook.Sheets.Item(1) # Referring to first sheet.
$maxColumns = $sheet.UsedRange.Columns.Count
$ColumnsToRemove = Compare-Object $ColumnsToKeep (1..$maxColumns) | Where-Object{$_.SideIndicator -eq "=>"} | Select-Object -ExpandProperty InputObject
0..($ColumnsToRemove.Count - 1) | %{$ColumnsToRemove[$_] = $ColumnsToRemove[$_] - $_}
$ColumnsToRemove | ForEach-Object{
[void]$sheet.Cells.Item(1,$_).EntireColumn.Delete()
}
$workbook.SaveAs("C:\data1.XLSX")
$workbook.Close($true)
$excel.Quit()
[void][System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
Remove-Variable excel
【问题讨论】:
-
我是否理解正确,您要删除除一之外的所有列和除一之外的所有行?这意味着只剩下一个单元格。
-
不,我希望删除所有列,除了一个正确的列,上面的代码这样做,但它使用列号(我使用 4 并将第 4 列保存在新文件中),但我想做同样的事情使用列标题。上面的代码是新文件,只有一列我想以列标题(“产品”)开头,我想使用“产品”而不是列号(4)。可能在其他表格列号更改中我有 1000 多张表格。
-
另一件事是行。所以每列可能有 40 到 300 行,其中 30+ 在所有工作表中都是相同的,我想删除那些常见的行并保持唯一
-
@SyedAsadHaider - 这是必须使用 excel 完成的事情 - 使用特定于 excel 的文件类型?如果没有,那么导出到 CSV 并使用内置的 CSV cmdlet 似乎要容易得多。
-
是的,我也可以下载 CSV 格式的文件,但我是 powershell 新手,对 CSV cmdlet 没有任何经验
标签: excel powershell