正如所指出的此网址,Excel 可以处理的最大数字约为 10^307。
不过,Excel 似乎也难以处理较小的数字(约 10^17),正如您从我的示例中所见:
我正在开发一个 SQL 服务器数据库,其中包含条形码作为表格中的一个字段。这些条形码通常有 18 个字符,例如 154105070221597646。
当我将此类数据从 SQL 服务器数据库表(使用 Microsoft SQL Server Management Studio)复制到标准 MS-Excel 工作表中时,它会变成一个“通用”数字(如 1.54105E+17),其实际值似乎为 154105070221597000(请注意最后三位数字已变成零)。
目前,我复制数据,将该列的格式更改为文本,然后再次复制整个内容,这是可行的,但由于我需要定期执行此操作,所以我希望有一种更简单的方法。
我怎样才能告诉 Excel 停止截断数字的最后几位数字?
供您参考:如果我将条形码输入单元格并执行“转换为数字”,也会发生这种情况,正如您从此屏幕截图中看到的那样:
答案1
第一个选项 - 提前将单元格格式化为文本。我不太喜欢这个,因为它需要额外的步骤,但如果在粘贴之前单元格已经格式化为文本,则应该保留该格式。
第二种选择 - 我的首选 - 不是从 SSMS 复制,而是使用另存为将输出保存到制表符分隔的文本文件,然后使用文本导入向导在 Excel 中打开该文件。在此过程中,您可以选择每列的格式;选择文本作为格式应确保数据将被视为文本字符串而不是值。
第三种选择 - 使用简单的宏来粘贴值。VBARange.PasteSpecial
中的方法与用户界面中的 PasteSpecial 功能不同,如果没有给出其他说明,它将以简单文本的形式粘贴值。宏将类似于
Sub PasteAsText()
Selection.PasteSpecial
End Sub
在这些选项中,我通常更喜欢第二个选项,因为它可以让您最大程度地控制数据,并且不依赖于有时不稳定的剪贴板。
答案2
帮助您可靠地创建数据完整文本副本的提示;
在条形码(-data)前面添加首字母'
[1]当您从 SQL 生成/导出数据时;这将阻止 Excel 摆弄它,因为它(通过这个)在到达时被明确定义为“TEXT”。
[1]即CHAR(39)
在 Excel 中