将复制的文本粘贴为 Excel 中的“TEXT”格式(不带撇号)

将复制的文本粘贴为 Excel 中的“TEXT”格式(不带撇号)

我在 Web 应用程序中有一个函数,可以生成可粘贴到 Excel 中的值列表。此代码是 javascript。每行都使用以下代码行生成:

exportList += `\n${trc}\t${tacc}\t${tamt}`;

对于那些不确定上述代码的人:

  • ${trc}${tacc}${tamt}是变量。=\n是换行符,确保此图表使用的三个单元格使用新行。
  • \t是水平制表,确保每个值都输入到同一行的单独单元格中。

上面的代码,加上我没有显示的其余代码,将产生以下结果:(看起来有点乱,但是标签确实在那里)。

RC  Account Number  Amount
4837    2432586567856785    5678
4837    2436245385375675    6345

问题在于,对于中间变量tacc,使用转换为科学计数法的长数字。对于数字“2432586567856785”,它将在单元格中显示为“2.43259E+15”。

右键单击只能粘贴文本(其他时候我可以粘贴文本而不更改格式,所以我不知道为什么)。

现在我知道在 Excel 中,'在字符串前面输入内容将导致其自动格式化为文本。我尝试对生成的文本执行此操作:

RC  Account Number  Amount
4837    '2432586567856785   5678
4837    '2436245385375675   6345

但是,虽然帐号现在仅显示为文本,但如果不进一步编辑,撇号就会出现。我不想这样。

在不更改默认选项的情况下,如何构造字符串以强制 Excel 将长帐号接受为文本字符串,而不显示任何其他字符?

编辑:最初什么也没找到之后,我发现了一个这个问题的重复在这里。不幸的是,它没有回答我的问题,因为这需要额外的步骤。因为我写的代码明确旨在消除步骤,我仍然想知道是否有一种解决方法,将(长)数字数据粘贴为文本而不是带有科学计数法的数字......

答案1

接受的答案并不能解决问题。

“长数字”长度为 16 位。如果通过粘贴执行导入,Excel 将把它导入为数字。Excel 只能保留数字中的 15 位有效数字,因此它会截掉最后一位数字并将其替换为零。永久地。

就是这样,对于这种导入来说就是这样。Excel 没有提供其他任何东西。

即使 VBA OnEvent 宏也必须允许粘贴完成,然后触发,因此它无法拦截粘贴,因此它无法永久阻止 Excel,并且无法恢复它。

要执行粘贴,即用户的粘贴操作,您需要制作一个宏来执行一些操作,例如为这些粘贴设置一个按钮,选择要粘贴到的单元格,然后单击该按钮。宏将读取 Windows 剪贴板并获取内容,将它们拆分成三组内容,然后根据所选单元格是三组中最左边的单元格,将它们插入到它们要插入的单元格中。它可以将这三部分插入为数字、字符串,然后是数字。这样,16 位“长数字”就可以保持完整。

并且准确。

或者,可以停止粘贴并使用Data|Import向导(使用Fixed Width导入以便有机会强制 Excel 将该“列”导入为文本),在功能区菜单系统深处挖掘它,或者以某种方式使用 Power Query。

我理解您编写的这个可爱的程序IS STAYING,但您当然可以修改它的输出例程,以强制将“长数字”作为文本放在其上。Excel 将遵守这一点,并将值作为带有完整字符串的文本格式单元格插入。

信息是,Easy Way Out这没有意义。你写了一个程序,我为此而喝彩,因为我自 1977 年以来就没有写过程序,而且从技术上讲,这也不是现代人会称之为程序的东西。我写过的唯一“真正的”程序是在穿孔卡上,在西点军校可以使用的大型机上运行。(仍然有那三英尺长的穿孔卡。)所以我不是程序员,而你是。好人!你似乎在没有对所需内容进行适当的完整研究的情况下就匆忙编写了它。我同情你。但现在是时候修复让它变得无用的问题了。一个小小的修复,然后它就可以成为你想要的一切。成为你办公室里的人中之神。坚持己见,最终坚持让用户做漫长而艰难的事情来使用它,并强迫他们无论如何都要使用它,你会在人们中被视为完全不同的东西。

让他们使用公认的答案,砍掉最后一个字符,直到根据这些数据做出的决定出现一些糟糕的事情,你甚至可能“在失业男性中成为完全不同的东西”。

(顺便说一句,如果您只需要 15 位数字,请修改您的程序以仅输出 15 位数字,所有问题都会消失。好吧,直到您遇到 Excel 粘贴的奇怪现象,它完全取决于它如何粘贴在其向导中当前选定的分隔符Data|Import(在其残缺的形式中Text To Columns,这些分隔符会被更改,然后开始影响这种源数据的粘贴......很奇怪,是吗?)并且整个当前方法都会中断,直到您记住这一段并让用户修复问题(当它们没有真正损坏时,确切地说,只是使用过)。)

与 Excel 中的大多数内容一样,奇妙的是,它完全由您选择。

答案2

似乎唯一的方法是在粘贴之前准备好表格 - 更改需要的单元格的格式。

您还可以通过 Excel 脚本自动执行该过程(更改单元格格式)。

不幸的是,另一种方法是通过 Excel 导入选项导入 csv 文件,您可以在其中设置每列的数据类型。但这需要一些时间,而这正是您想要避免的。

最后一个选项是制作脚本,该脚本将根据给定的数据构建现成的 Excel 文件。

答案3

接受的答案对我不起作用。它只将公式显示为文本。相反,我在数字前添加了一个不间断空格 (U+00A0),以欺骗 Excel 将数字格式化为文本:

exportList += `\n ${trc}\t ${tacc}\t ${tamt}`;

根据您的使用情况,这可能是一个可接受的解决方法。

答案4

在 Excel 中,有一个公式可以将给定值转换为文本:

=TEXT(<number value>,"#")

因此,对于给定的三个数字,4320 9876523615862870 10000您将需要使用以下序列:

=TEXT(4320,"#") =TEXT(9876523615862870,"#") =TEXT(10000,"#")

这样可以可靠地生成从左到右的三个单元格,其中包含三个数字。

原始代码行需要修改如下:

exportList += `\n=TEXT(${trc},"#")\t=TEXT(${tacc},"#")\t=TEXT(${tamt},"#")`;

这其中有一个怪癖! 粘贴到 Excel 中时,似乎需要粘贴到格式为“常规”或默认格式的单元格中。如果粘贴到已经格式化为文本的单元格中,则只会得到写出的公式,这将不起作用。

相关内容