我一直在Excel中手动处理大量文件。我已经做了一些搜索但是没有找到关于如何以自动化方式实现这一过程的明确最佳实践。
我的手动流程如下:
我有.tab(制表符分隔)文件。每行总共有8个“列”。我需要否定每一行的最后5列中的数值。
我一直在做什么
我不确定最好的方法是PowerShell还是替代脚本,所以我想联系社区,了解其他人可能对此有何建议。谢谢你的时间。
答案 0 :(得分:1)
在PowerShell中,您可以使用Import-Csv
进行阅读,使用Export-Csv
来编写以字符分隔的文件。两个cmdlet都提供参数-Delimiter
,允许您指定分隔符:
$csv = Import-Csv 'C:\path\to\input.csv' -Delimiter "`t"
$csv | Export-Csv 'C:\path\to\output.csv' -Delimiter "`t" -NoType
通过Import-Csv
导入CSV会为您提供自定义对象列表,其中CSV中的每个字段都表示为对象的属性。您可以在将数据写回文件之前修改属性的值来修改字段。为此,您可以采用以下两种方法之一:
将CSV完全读入变量,在循环中更新要修改的字段,然后将数据导出回文件:
$csv = Import-Csv ...
foreach ($row in $csv) {
[int]$row.B *= -1
[int]$row.F *= -1
}
$csv | Export-Csv ...
将CSV读入管道并通过calculated properties替换您要修改的字段:
Import-Csv ... |
Select-Object -Include *,@{n='B';e={-$_.B}},@{n='F';e={-$_.F}} -Exclude B,F |
Export-Csv ...
请注意,要使其工作,您必须使用单独的输入和输出文件,或将Import-Csv
语句放在括号中。否则Export-Csv
会失败,因为当Import-Csv
仍然从中读取时,它无法写入CSV。
答案 1 :(得分:0)
您可以在工作表上的任何位置记下可以运行此宏的按钮。假设您了解宏/ VBA的基础知识(如果您不让我知道)并且A1 = -1(可以在下面的脚本中更改)。
Range("A1").Select
ActiveCell.FormulaR1C1 = "-1"
Range("B1:F1").Select
Range(Selection, Selection.End(xlDown)).Select
Range("A1").Select
Selection.Copy
Range("B1:F1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False