0

Excel で大量のファイルを手動で処理してきました。いくつかの検索を行いましたが、自動化された方法でこのプロセスを達成する方法に関する決定的なベスト プラクティスは見つかりませんでした。

私の手動プロセスは次のとおりです。

.tab (タブ区切り) ファイルがあります。各行には合計 8 つの「列」があります。すべての行の最後の 5 列の数値を否定する必要があります。

私がしてきたこと

  • ファイルをエクセルで開く
  • 空白のセルに -1 を入力します。コピーする
  • 最後の 5 列のデータを強調表示 → 右クリック → 形式を選択して貼り付け → 乗算 →Enter
  • 次に、ファイルを保存します。

これに対する最善のアプローチが PowerShell であるか、代替スクリプトであるかはわかりません。そのため、コミュニティに連絡して、他の人がこれについてどのようなアドバイスを持っているかを知りたいと思いました. お時間をいただきありがとうございます。

4

2 に答える 2

1

PowerShell では、文字区切りファイルのImport-Csv読み取りと書き込みに使用できます。Export-Csvどちらのコマンドレットも-Delimiter、区切り文字を指定できるパラメーターを提供します。

$csv = Import-Csv 'C:\path\to\input.csv' -Delimiter "`t"
$csv | Export-Csv 'C:\path\to\output.csv' -Delimiter "`t" -NoType

経由で CSV をインポートすると、CSVImport-Csvの各フィールドがオブジェクトのプロパティとして表されるカスタム オブジェクトのリストが得られます。データをファイルに書き戻す前に、プロパティの値を変更してフィールドを変更します。これを行うには、次の 2 つの方法のいずれかを使用できます。

  • CSV を変数に完全に読み込み、ループで変更するフィールドを更新してから、データをファイルにエクスポートします。

    $csv = Import-Csv ...
    foreach ($row in $csv) {
      [int]$row.B *= -1
      [int]$row.F *= -1
    }
    $csv | Export-Csv ...
    
  • CSV をパイプラインに読み込み、計算されたプロパティを介して変更するフィールドを置き換えます。

    Import-Csv ... |
      Select-Object -Include *,@{n='B';e={-$_.B}},@{n='F';e={-$_.F}} -Exclude B,F |
      Export-Csv ...
    

    これを機能させるには、別個の入力ファイルと出力ファイルを使用するか、Import-Csvステートメントを括弧で囲む必要があることに注意してください。そうしないと、まだ読み取りExport-Csv中に CSV に書き込むことができないため、失敗します。Import-Csv

于 2016-10-12T15:19:00.437 に答える
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
于 2016-10-11T15:37:08.063 に答える