自动化进程将制表符分隔的文件中的值乘以-1以取消它们
我一直在Excel中手动处理大量的文件。 我已经做了一些search,但没有find一个明确的最佳做法,我怎样才能以自动化的方式实现这一过程。
我的手动过程如下:
我有一个.tab(制表符分隔)文件。 每行总共有8个“列”。 我需要否定每行最后5列中的数值。
我一直在做什么
- 在Excel中打开文件
- 在任何空白单元格中键入-1。 复制它
- 突出显示最后5列中的数据→右键单击→select性粘贴→乘以→ input
- 然后保存该文件。
我不确定是否最好的方法是PowerShell或替代脚本,所以我想联系社区,看看其他人可能会有什么build议。 感谢您的时间。
在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完全读入variables,在循环中更新要修改的字段,然后将数据导回到文件中:
$csv = Import-Csv ... foreach ($row in $csv) { [int]$row.B *= -1 [int]$row.F *= -1 } $csv | Export-Csv ...
-
将CSV读取到pipe道中,并通过计算属性replace要修改的字段:
Import-Csv ... | Select-Object -Include *,@{n='B';e={-$_.B}},@{n='F';e={-$_.F}} -Exclude B,F | Export-Csv ...
请注意,为此,您必须使用单独的input和输出文件,或将
Import-Csv
语句放在括号内。 否则Export-Csv
会失败,因为当Import-Csv
仍然从中读取时,它不能写入CSV。
你可以在表单上的任意位置放置一个可以运行这个macros的button。 假设你知道macros/ 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