将一个excel列中的数据用逗号分隔成多个列

将一个excel列中的数据用逗号分隔成多个列

我正在使用一个名为 FilterPro 的程序来设计电子滤波器。该滤波器有一些相关数据,你可以将其导出到 Excel。在 FilterPro 中,数据如下所示,其中使用小数逗号而不是小数

在此处输入图片描述

FilterPro 有一个可以导出到 Excel 的功能。但是,当您导出到 Excel 时,它们会将所有数据放入一列中,其中不同的参数用逗号分隔。因此数字使用小数逗号,它们也用逗号分隔...

在此处输入图片描述

我希望每个参数(频率 (Hz)、频率 (rad/sec),...)都有自己的数据列。但是,由于数字使用小数逗号,我无法使用 Excel 的文本转列功能来执行此操作,因为数字会出错。

在此处输入图片描述

答案1

csv 文件是“ASCII”,例如您可以cat filetype file)并查看其内容。

现在你需要的是所有其他,转换为.

将其保存为例如cvt.py...

导入系统

点=1
c=sys.stdin.读取(1)
当 len(c) > 0 时:
  如果 c!=',':
    打印(c,end =“”)
  else: # c 是“,”
    如果不是(点):
      打印('.',结束='')
    别的:
      打印(c,结束='')
    点=1-点
  c=sys.stdin.读取(1)

然后python3 cvt.py <file.csv >newfile.csv对导出的文件执行操作。

然后尝试导入newfile.csv到 Excel。

是的,你需要安装 Python3,
抱歉,直到最后我才意识到你使用的是 Windows,:-7

Linux 爱好者

答案2

如果您希望它在 Excel 中实现,也就是说“全部完成”,您需要使用 VBA 或中间程序,以Hannu建议的方式或其他方式,例如 NotePad++ 中的 RegEx 方法。

我没有资格在那里提供太多帮助,并且认为您似乎不想要那种修复,因此我将转向“在 Excel 中”的方式来执行此操作。

因此,您可以导入,让数据像 Excel 打开 .CSV 文件时那样进入列中,或者,按照第二张图片中显示的方式输入数据。(我相信用 .TXT 结尾重命名文件可以实现这一点,因为它可以绕过 .CSV 文件的自动方法。但是无论如何。)假设您获得多个列,每个单元格都有半个数字,则有多种方法。

其中一种方法是使用如下公式:

=VALUE( A1 & "." & B1 )

在方便的单元格中,根据需要将其向下复制,并复制到其右侧的所有其他列,直到您考虑到源数据中的所有列。因此,公式结果为空,然后公式结果为...等等。

(可以SPILL使用“A1:A12”和“B1:B12”来制作每列的公式,从而无需“向下复制”。)

然后隐藏空列,复制输出,并将其粘贴到您希望数据所在的位置。

但是既然您没有很多列,为什么不进一步自动化呢?使用各种方法,可以使用于输出的范围连续,这样SPILL就很容易使用,而且也可以直接复制和粘贴。 (HSTACK是我展示的,但非常新。INDEX使用其“区域”参数(第 4 个参数),它是一个数组常量,如“{1,2,3,4}”或任何产生所需数组常量的方法,如SEQUENCE,或CHOOSE以同样的方式使用数组常量也会浮现在脑海中。可能还有其他的。 TEXTJOIN肯定可以适应,所以可能可以XLOOKUP。所以除了还有其他选择HSTACK。)

此外,也许您有或将有用户使用不同的系统分隔符来表示他们的数字。他们可能希望您的公式进行转换以产生一个数字值,无论如何,他们的系统都会为他们显示该数字值。如果您为您自己的所需分隔符设置公式,它可能对他们不起作用。

可以通过用 替换来解决这个问题。它VALUE与执行NUMBERVALUE相同的“文本到数字值”操作,VALUE但您可以通过指定 Excel 在尝试执行此操作时将使用的小数分隔符来确保数据转换为数字,而不管用户的系统分隔符是什么。使用VALUE,如果您在小数分隔符处使用逗号连接字符串,它会很好地为您服务。如果我打开电子表格并碰碰运气,Excel 不会将字符串解释为数字,因为它无法将其识别为数字,或者更糟(我的情况),它会将该分隔符视为分组分隔符并给我一个整数,如 561,876 而不是 561.876。但是,如果您将字符串提供给NUMBERVALUE并告诉它字符串中的“,”是小数分隔符,它也会在我的计算机上知道这一点。因此,它将为我们两个显示相同的数字,因为我们的操作系统被告知我们更喜欢这个数字。

使用HSTACKNUMBERVALUE,简单的前三个(六个,但每个输出数字两个)导出的数字将使用如下公式:

=HSTACK(  NUMBERVALUE(A1:A12&"."&B1:B12,"."),  NUMBERVALUE(C1:C12&"."&D1:D12,"."),  NUMBERVALUE(E1:E12&"."&F1:F12,".")  )

您需要做的就是继续添加子元素(NUMBERVALUE(E1:E12&"."&F1:F12,"."))并更改列字母,直到获得源数据中的所有列。看起来像七个子元素,因此只需粘贴七次并编辑字母,比使用字符串构建技术创建字符串并将其粘贴到公式中更省事。此外,手动操作非常简单,您无需想出使用INDIRECTand/or的方法ADDRESS

因此,只需一个公式,无需复制、粘贴,也无需在每个新数据集上添加或删减。

由于它非常容易操作,并且适合任何版本的 Excel(当使用旧函数替换部分时HSTACK),因此我不会继续介绍其他任何函数。

相关内容