每次我将一些以分数形式或用连字符分隔的数值数据复制粘贴到 Excel 中,它总是将可能为日期的数字转换为日期。决不将它们恢复为原始格式(如复制的格式)。即使您转到文本并返回数字,您也会得到日期数字!
即使保存为 CSV 并导入也无法解决问题!
几年来我一直在寻找解决这个问题的方法,但仍然像以前一样沮丧。
例子
任何类似5-6
或5/2
变成日期或日期值的东西,并且无法恢复字符串的原始内容或告诉 Excel 您想将其视为文本而不是日期。
这不仅仅是复制粘贴。通过集成直接从应用程序发送数据或通过 CSV 发送数据也行不通。它会否决您的导入并将内容更改为日期值。
“你这个零代表白痴,这个问题已经解决了!”
在您说这个问题之前已经问过之前,让我们先来看看问同样问题的热门问题和发布的“解决方案”:
1.阻止 Excel 将复制粘贴的数字/文本值转换为日期
数据 - 导入外部数据 - 新建 Web 查询并按照向导操作
不起作用。而且无论如何都不是一个解决方案,因为不是从各种来源复制粘贴,而且速度也非常慢。
将数据按原样粘贴到电子表格中。选择全部并将其格式化为文本,再次粘贴您第一次所做的操作,但这次以值的形式粘贴。
21 票赞成!真的吗?!微不足道不起作用按照我的例子,使用任何数据。而且,需要很长时间。
- 复制原始数据
- 粘贴到记事本(最好使用 Notepad++)
- 将单元格属性更改为文本
- 从记事本复制全部
- 粘贴回 Excel。
13 票赞成。非常缓慢且笨拙的解决办法。不起作用反正。
2.如何在 Excel 中复制粘贴时阻止数字转换为日期格式?
选择空字段(或整个列),将它们设置为字符串格式而不是默认值,然后使用“仅值”进行特殊粘贴(右键单击即可使用),以防止自动应用日期格式......
我经常使用“选择性粘贴”和“粘贴值”。从 HTML 表格等复制粘贴时没有值选项。不起作用。
粘贴之前,选择将保存非日期值的列。右键单击。选择“格式化单元格”。然后选择“文本”作为格式并单击“确定”。
现在,继续粘贴,但使用“匹配目标格式”选项粘贴。
不起作用. 没有“匹配目标格式”选项。
解决这个问题的方法很少,最常见、最简单的方法是在将数据粘贴为文本之前先格式化单元格(选择范围,右键单击,格式化单元格,双击文本)。
又是这个!不起作用。
我所做的只是改变小数点分隔符:
不是一个选项。“-”和“/”不是小数分隔符。不起作用。
尝试在源数据中的数字中添加此符号 ('),然后将其粘贴到 excel 中,用相同的 (') 替换 ('),因为当您添加此符号时,它将显示在 excel 中的数据中,但是当用它替换它时,它将被隐藏。
-1 票是有原因的。不起作用。
3.如何防止 Excel 中的数字转换为日期?
我使用 Notepad++ 完成此任务:将您的数据复制到 notepad++,将“。”替换为“,”并将其复制到 excel。
解决方法很慢并且没有帮助,因为我需要数据保持原样。不起作用。
首先标记要粘贴的单元格。右键单击“格式”,然后选择“数字”。
现在右键单击粘贴,并选择“匹配目标格式”
...真的吗?真的吗?!
是的,有时这真的很痛苦 - 我的快速解决方案是使用格式化为文本的单元格。
下面是它的工作原理:
用 复制您的数字。选择一列或一些单元格,将单元格格式更改为文本,现在将选择性粘贴(或粘贴内容)更改为未格式化/纯文本,现在用 替换 。,现在将格式更改回数字或默认值您当然可以把它放在一些宏中。
然而,我认为可能有——或者至少应该有——一个更好的解决方案。
但作为一种快餐,这也有效;)
不快。而且,猜猜怎么着?不起作用。
这个问题的答案
在发布这个问题后,我得到了一位 16k 声望帖子作者的以下回答:
请不要抱怨您的 Excel 版本应该做什么。考虑到 Excel 2007 花了 3 年时间规划其功能,并在旧的 3 年发布周期中开发和测试它们,它已经有近 15 年的历史了。如果您对此抱怨,您还不如抱怨您的旋转电话无法接收短信。正如其他人提到的,现代版本的 Excel 可以做您想做的事情,而且麻烦比您遭受的痛苦要少。那么,升级怎么样?
如果存在如此严重的错误,我认为询问它没什么问题。如果没有解决方案,那很好,但这并不意味着我没有想到过其他方法,也不意味着它按照设计运行。
无论如何,我按照要求升级了(升级到 Excel 2011),并尝试了此帖子中建议的所有答案。仍然没有成功。不起作用。我不知道这位发帖者是否能够建议一个已被证明可以正常工作的操作系统和 Excel 版本组合?
微软怎么说?
它只是重复众所周知(但完全无用)的技巧是添加撇号或 0 来保持格式或使用分数格式。将单元格预格式化为文本可能适用于手动输入数据,但在复制粘贴时则不行。
认罪
我求求你。请告诉我有一种方法可以不改变我的数据就将数据整理到电子表格中!
即使 Excel 猜测数据的格式并在未经询问的情况下强加给你(我不明白为什么没有粘贴为 [格式] 选项),复制粘贴文本或值正确保留表结构所有其他可以想到的文本字符串除了用“/”和“-”等符号分隔的数字之外。
复制粘贴其他格式的字符串(例如10%
、$50.63
、 )4.25E+11
会导致自动格式化,但不会丢失数据的二维结构,也不会改变值/文本本身。只有日期,Excel 才会真正破坏通过将文本字符串转换为日期值来转换数据内容。$50.63
单元格 C7 中的 仍保留$50.63
在单元格 C7 中,但7/8
变为43319
,5-4
变为43195
并6.4
变为43196
。这是一个单向函数 - 没有办法逆转转换,上下文和内容将永久丢失,因为 Excel 会猜测您,并且似乎没有提供一种方法来告诉它您知道自己在做什么,尽管本网站上有所有获得支持的“解决方案”。
--
编辑:不重复,因为我已经在标题 2 下的问题中涉及过了!
答案1
以下是三种符合要求的方法和第四种更适合具体情况的方法。是的,你之前说过其中两种方法行不通。它们在我使用的 Office 365 Pro Plus 上有效,因此对许多其他人也有效,你的效果可能会因 Excel 版本的不同而有所不同:
方法 1 - 复制并粘贴
- 将目标范围格式化为
Text
Copy
HTML 数据Paste
使用Match Destination
方法 2 - 从网络获取数据
- 单击功能区“数据”选项卡上的“获取数据”
- 将鼠标悬停在“来自其他来源”上以展开下拉菜单
- 选择“来自网络”并输入 URL/文件位置
- 从查询编辑器左侧的列表中选择源表
- 点击右下角的“编辑”
Text
在功能区上“主页”选项卡的“转换”组中将每列的数据类型更改为- 单击“关闭并加载”,将在空白工作表中创建一个表格
方法 3 - VBA
- 将下面的代码粘贴到模块中
- 将 PathOrURL 更改为您的文件位置或 URL
- 运行过程
我写这篇文章时假设您的数据源是 HTML 文件中的第一个或可能是唯一一个表。它将源表值转换为字符串,并将字符串写入工作表,而无需使用复制或粘贴。单元格格式无需更改。
需要 MS Internet 控件和 MS HTML 对象库引用
Option Explicit
Sub GetTextFromHTML()
Dim PathOrURL as String: PathOrURL = Environ("USERPROFILE") & "\Desktop\a4rZKDWK.html"
Dim IE As New InternetExplorerMedium
Dim x As Long, y As Long
Dim tbl As HTMLTable
Dim sVals() As String
IE.Navigate PathOrURL
Do While IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
Set tbl = IE.Document.getElementsByTagName("table")(0)
With tbl
ReDim sVals(1 To .Rows.Length, 1 To .Rows(1).Cells.Length)
For y = 1 To .Rows.Length
For x = 1 To .Rows(1).Cells.Length
sVals(y, x) = CStr(tbl.Rows(y - 1).Cells(x - 1).innerText)
Next
Next
End With
IE.Quit
ActiveSheet.Cells(1, 1).Resize(UBound(sVals), UBound(sVals, 2)).Value = sVals
End Sub
方法 4 - 过渡进入(情境)
- 单击功能区上的“文件”
- 选择“选项”
- 选择“高级”
- 滚动到最底部
- 勾选“过渡性进入”复选框
- 复制 HTML 数据
- 粘贴到 Excel 工作表中
可以使用“过渡条目”来解决日期问题,因为它允许将分数复制并粘贴为分数 - 但是 - 它不能满足 OP 的要求,因为它还会简化任何可约分数;复制 6/9 将粘贴 2/3。不可约分数没有问题,不会被修改。还支持假分数。
我怀疑 Excel 正在将源数据从分数转换为小数,然后再转换回分数,因为简化分数是小数转换的逻辑结果。如果考虑从 2/4、3/6、12/24 开始,它们都会转换为小数 0.5。一旦这样做,我们就会失去有关它们唯一性的所有信息。您可以区分 2/4 和 3/6,但无法区分 0.5 和 0.5 从小数转换回分数,等于 0.5 的分数数量实际上是无限的,我们可以使用其中任何一个。我们不知道从什么开始,因为一切都丢失了,移动到 0.5,当你有无数个选择时,准确猜测的几率相当小,所以最好的结果将是完全减少和简化,而其中只有一个...... 1/2
遗憾的是,我上周推荐的自定义格式“#/#”与“过渡条目”存在完全相同的问题。它将所有分数都带过来,但简化了粘贴的每个可约分分数。
答案2
因此,经过大量研究以及 @ProfoundlyOblivious 的一些非常有用的意见后,我找到了似乎最有效的方法。它远非完美,但它实际上适用于我尝试过的所有数据源,不涉及复杂的步骤,最重要的是它省时又可靠。
当您必须从各种不可预测的来源获取数据并将其转换为 Excel 或 CSV 格式时,诸如从 Web 获取数据或 VBA 脚本之类的建议根本无法使用。
同样,我反复使用各种版本的 Excel 验证,声称通过记事本进行操作的人说的方法有效,或者预先和/或后格式化单元格不起作用。遗憾的是,任何自定义数字/文本格式也没有。很明显,当使用这些版本的 Excel 处理时,这种格式的数据与其他数据格式相比明显不同。
什么有效
避免使用 Excel!
复制/粘贴到 Google Docs 电子表格中,然后简单地保存为 *.xlsx 或 *.csv 就可以了。
真的就这么简单。也许不是真的回答如何修复 Excel 但到目前为止我发现的最佳解决方案。快速、简单、可靠,并且满足我的所有需求。
答案3
- 将数据复制到记事本。请勿进行任何编辑。
- 将数据从记事本复制到 MS Word。
- 在 Word 中查找和替换。查找“^t”,替换为“&”。
- 打开新的 Excel 工作表,选择工作表,将单元格格式设置为“文本”。
- 使用“编辑”>“选择性粘贴文本”将数据从 Word 复制到工作表中。
- 使用“=LEFT(A1,SEARCH("/",A1)-1)/MID(A1,SEARCH("/",A1)+1,99)”* 将单元格 A1 中的文本转换为数字。包含结果的单元格需要从 TEXT 格式化为 GENERAL。(* 感谢 Myall Blues 提供的公式,网址为https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_winother-mso_2016/convert-text-fractions-to-number-decimal/93f0de8a-d96c-4cbf-a677-a3f3937cd46e)
答案4
嗯,我觉得你需要重新措辞一下你的问题。它更像是“我怎样才能鱼与熊掌兼得?”
Excel 的工作方式是,它会尝试理解数据并应用默认格式。这适用于看起来像日期的文本、看起来像数字的文本、暗示表格单元格中有某些内容的 HTML 标签等。
如果忽略格式,例如通过粘贴文本(或粘贴特殊值),则所有格式都将被忽略。看起来像日期的文本将不会转换为日期。但表格结构也不会保留。
但是,如果你想保留表格结构,你必须让 Excel 解释粘贴的内容并应用它能识别的格式。不幸的是,这意味着这些文本将被转换成日期。
不管您有多沮丧,目前还没有现成的解决方案。您所要求的目前无法实现。(这是对您问题的正确回答)。
您可能想在http://excel.uservoice.com人们可以投票。建议获得的投票越多,实施的可能性就越大。
您可能还想考虑复制和粘贴的替代方法。也许您可以使用 Power Query 查询数据源并调整数据以保留原有文本。