如何在 Excel 或 Notepad++ 中的 CSV 文件的单元格之间复制特定的选定数据?

如何在 Excel 或 Notepad++ 中的 CSV 文件的单元格之间复制特定的选定数据?

我必须每天下载媒体文件数据库并修改 csv 文件中的元数据,以便将 B 列中唯一的数字前缀作为后缀添加到 C 列中的单元格中。

有没有办法可以一次性对 C 列单元格名称中尚不包含后缀的所有单元格执行此操作?

在此处输入图片描述

目前,我能做到的唯一方法是将 _01 添加到第一个单元格的末尾(从 _01 开始)并将单元格向下拖动,以便它自动按升序填充其余数字(如下面的屏幕截图所示)。

在此处输入图片描述

我尝试在 Notepad++ 中打开该文件,看看是否有办法在那里执行此操作,但不幸的是,它不会以列的形式引入数据,而是以典型的记事本样式显示用逗号分隔的所有文本。我需要以 .csv 格式维护该文件,以便我可以将修改后的数据重新导入我们的媒体服务器。

任何人知道有什么方法可以从 B 列中取出 XX_,并将其作为 _XX 添加到 C 列中没有它的单元格吗?我愿意在 Excel 以外的任何软件中尝试这种方法。我以前曾使用 notepad++ 来做这种事情,但从未用过 csv 文件,而且我不确定之后文档是否会正确格式化。

B 列:

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

使用 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

答案2

如果你有 Excel 2016,请使用 Microsoft 的获取并转换 电动工具要获取具有正确列的新表格,请使用 。
(对于 Excel 2010-2013,请使用免费的 MS 插件Excel 的 Power Query

您最终可以直接连接到源(csv 文件、数据库、Excel 文件等)并执行类似这样的转换(我保留了使用过的列,可以在将其加载到工作表之前通过额外的步骤将其删除):

在此处输入图片描述

这是 UI 生成的 M-Code。

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"

相关内容