Автоматизация процесса умножения значений в файле с разделителями табуляции на -1 для их отрицания

Я вручную обрабатывал большое количество файлов в Excel. Я сделал некоторые поиски, но не нашел окончательной передовой практики в отношении того, как я могу выполнить этот процесс в автоматическом режиме.

Мой ручной процесс выглядит следующим образом:

У меня есть файл .tab (с разделителями табуляции). Всего в каждой строке 8 «столбцов». Мне нужно отрицать числовые значения в последних 5 столбцах каждой строки.

Что я делал

  • Откройте файл в Excel
  • Введите -1 в любую пустую ячейку. Скопируйте это
  • Выделите данные в последних 5 столбцах, щелкните правой кнопкой мыши Вставить специальное умножение Enter
  • Затем сохраните файл.

Я не уверен, будет ли лучшим подходом для этого PowerShell или альтернативный сценарий, поэтому я хотел обратиться к сообществу, чтобы узнать, что другие могут посоветовать для этого. Спасибо за ваше время.


person UnladenSwallow    schedule 11.10.2016    source источник
comment
Для ясности я ищу процесс, чтобы не только отрицать значения, но и выполнять задачу от начала до конца, при этом процесс открывает файл, отрицает значения и сохраняет файл.   -  person UnladenSwallow    schedule 11.10.2016


Ответы (2)


В 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 через Import-Csv дает вам список настраиваемых объектов, где каждое поле из CSV представлено как свойство объекта. Вы изменяете поля, изменяя значения свойств перед записью данных обратно в файл. Для этого вы можете воспользоваться одним из следующих двух подходов:

person Ansgar Wiechers    schedule 12.10.2016

Вы можете указать кнопку, которая находится на вашем листе в любом месте, которое вы хотите, чтобы запустить этот макрос. Предполагая, что вы знаете основы макроса/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
person Joshua    schedule 11.10.2016
comment
Я не сразу знаком с Macro/VBA, но я понимаю, что могу немного поискать в Google, чтобы понять этот бит. Хотя у меня может быть загвоздка. Есть ли способ динамически объявить диапазон? То есть .... количество строк варьируется от файла к файлу. Иногда может быть только десять строк, а иногда их могут быть десятки тысяч. - person UnladenSwallow; 11.10.2016
comment
Итак, быстрое обновление. Я успешно записал макрос и добавил его на ленту. Хотя это сократит время на ручную обработку файлов, это все еще ручной процесс. Есть ли идеальный способ систематически делать что-то вроде следующего: Определить папку с файлами для отмены Автоматически открывать каждый файл, применять макрос (или сценарий VBA) Сохранять измененные файлы - person UnladenSwallow; 11.10.2016