自动化进程将制表符分隔的文件中的值乘以-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 
Interesting Posts