Как скопировать определенные выбранные данные между ячейками в файле CSV в Excel или Notepad ++?

504
Myles

Мне приходится ежедневно загружать базы данных мультимедийных файлов и изменять метаданные из файла CSV, чтобы уникальный числовой префикс в столбце B добавлялся в качестве суффикса к ячейкам в столбце C.

Есть ли способ, которым я могу сделать это за один раз для всех ячеек, которые еще не содержат суффикс в именах ячеек столбца C?

enter image description here

На данный момент единственный способ, которым я могу это сделать, это добавить _01 в конец первой ячейки (начиная с _01) и перетащить ячейку вниз, чтобы она автоматически заполняла остальные числа в порядке возрастания (как видно на скриншоте ниже).

enter image description here

Я попытался открыть файл в Notepad ++, чтобы посмотреть, есть ли способ сделать это там, но, к сожалению, он не вводит данные в виде столбцов, а вместо этого показывает весь текст, разделенный запятыми, в типичном стиле блокнота. Мне нужно сохранить файл в формате .csv, чтобы я мог повторно импортировать измененные данные на наш медиа-сервер.

Кто- нибудь знает, как взять XX_ из столбца B и добавить его как _XX в ячейки, в которых его нет в столбце C? Я готов попробовать это в любом программном обеспечении, кроме Excel. Я использовал notepad ++ для такого рода вещей в прошлом, но никогда не использовал csv-файлы, и я не уверен, будет ли документ после этого правильно отформатирован.

Колонка Б:

16_9S0816YE556_GOPR0091_0S01 17_9S0816YE556_GOPR0091_1S01 18_9S0816YE556_GOPR0091_2S01 19_9S0816YE556_GOPR0091_3S01 01_9S0803SD006MN_C0001S01 02_9S0803SD006MN_C0002S01 03_9S0813ED095MN_8R7A3425S01 04_9S0813SD007MN_C0001S01 

Колонка C:

9S0815GP174_16 9S0815GP174_17 9S0815GP174_18 9S0815GP174_19 9S0816GP175 9S0816GP175 9S0816GP175 9S0816GP175 

Желаемый конечный результат для столбца C ( без влияния на первые четыре ячейки ):

9S0815GP174_16 9S0815GP174_17 9S0815GP174_18 9S0815GP174_19 9S0816GP175_01 9S0816GP175_02 9S0816GP175_03 9S0816GP175_04 

Благодарю.

1
Я бы порекомендовал использовать подходящий инструмент. Вы работаете с массивом данных, поэтому используйте любую базу данных для хранения и обработки данных. MS Access, например ... подумайте об этом хотя бы. Akina 5 лет назад 0
* Я не уверен, будет ли документ после этого правильно отформатирован. * Не думайте об этом. Используйте CSV с разделителем (не фиксированной длины), используя символ пробела в качестве разделителя и параметр «множественный разделитель как один» при импорте обратно в Excel. Akina 5 лет назад 0
Извините, я не совсем понимаю, что вы имеете в виду здесь? Myles 5 лет назад 0
Предполагая, что вам нужны только первые две цифры от B, добавьте в конец C и вы можете использовать вспомогательный столбец, а затем попробуйте следующую формулу: = C1 & "_" & LEFT (B1; 2) Kevin Anthony Oppegaard Rose 5 лет назад 0
Привет Кевин, это повлияет на все ячейки или только те, которые не имеют _XX. Я не хочу добавлять числа в конец ячеек, в которых они уже есть. Myles 5 лет назад 1
Я бы попробовал [Get & Transform] (https://support.office.com/en-us/article/get-transform-in-excel-881c63c6-37c5-4ca2-b616-59e18d75b4de) в Excel 2016. Вам не нужно писать макросы, и вы можете делать много данных с помощью пользовательского интерфейса. Идеально было бы, если бы вы дали некоторые данные образца. visu-l 5 лет назад 0
Я имею в виду, что после повторного импорта отредактированного текста обратно в Excel ваше «поврежденное» форматирование будет восстановлено по мере необходимости. Akina 5 лет назад 0
Не могли бы вы добавить некоторую строку текста вместо изображения, тогда мы можем провести тест на реальных данных. Toto 5 лет назад 0
Привет, Visu-I. Могу ли я использовать Get & Transform в Excel 2010? Извините, но я также не имею ни малейшего представления об этом. Myles 5 лет назад 0

2 ответа на вопрос

1
Toto

С Notepad ++ вы можете сделать:

  • Ctrl+H
  • Найти то, что: ^([^,]*,(\d\d)_[^,]*,[^,]*)(?<!_\d\d),
  • Заменить: $1_$2,
  • проверить обернуть
  • проверьте регулярное выражение
  • Replace all

Объяснение:

^ : beginning of line ( : start group 1 [^,]* : 0 or more non comma character, : 1 comma (\d\d) : group 2, 2 digits _ : underscore [^,]* : 0 or more non comma character, : 1 comma [^,]* : 0 or more non comma character ) : end group 1 (?<! : negative lookbehind, make sure we don't have before the comma _\d\d : underscore and 2 digits ) : end lookbehind, : a comma 

Результат для данного примера:

col_A,16_9S0816YE556_GOPR0091_0S01,9S0815GP174_16,col_D col_A,17_9S0816YE556_GOPR0091_1S01,9S0815GP174_17,col_D col_A,18_9S0816YE556_GOPR0091_2S01,9S0815GP174_18,col_D col_A,19_9S0816YE556_GOPR0091_3S01,9S0815GP174_19,col_D col_A,01_9S0803SD006MN_C0001S01,9S0816GP175_01,col_D col_A,02_9S0803SD006MN_C0002S01,9S0816GP175_02,col_D col_A,03_9S0813ED095MN_8R7A3425S01,9S0816GP175_03,col_D col_A,04_9S0813SD007MN_C0001S01,9S0816GP175_04,col_D 
Отлично! Спасибо, Тото, я знал, что прилетит эксперт по блокнотам ++ и спасет меня! Это сработало и сделал именно то, что я хочу! Еще раз спасибо! Вопрос проголосовал и ответил! Myles 5 лет назад 0
0
visu-l

Если у вас Excel 2016, используйте мощные инструменты Microsoft Get & Transform для получения новой таблицы с правильным столбцом. (Для Excel 2010-2013 используйте бесплатную надстройку MS Power Query for Excel .)

В конечном итоге вы можете напрямую подключиться к источнику (CSV-файл, база данных, файл Excel и т. Д.) И выполнить преобразование, подобное этому (я сохранил использованные столбцы, которые можно удалить дополнительным шагом перед загрузкой в простынь):

enter image description here

Здесь M-код, сгенерированный пользовательским интерфейсом.

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}, {"Column2", type text}, {"Column3", type text}}), #"Add Col: Col2 Text before delimiter" = Table.AddColumn(#"Changed Type", "Col2 TextBeforeDelimiter", each Text.BeforeDelimiter([Column2], "_"), type text), #"Add Col: Col3 Text after delimiter" = Table.AddColumn(#"Add Col: Col2 Text before delimiter", "Col3 TextAfterDelimiter", each Text.AfterDelimiter([Column3], "_"), type text), #"Added Custom" = Table.AddColumn(#"Add Col: Col3 Text after delimiter", "Check Number", each [Col2 TextBeforeDelimiter] = [Col3 TextAfterDelimiter]), #"Added Custom1" = Table.AddColumn(#"Added Custom", "Col3 Transformed", each if [Check Number] = true then [Column3] else [Column3] & "_" & [Col2 TextBeforeDelimiter]) in #"Added Custom1"