如该 URL所示,Excel 可以处理的最大数字约为 10^307。
不过,从我的示例中可以看出,Excel 似乎也存在较小数字(大约 10^17)的问题:
我正在开发一个 SQL 服务器数据库,其中包含条形码作为表中的字段之一。这些条形码通常有 18 个字符,例如 154105070221597646。
当我将这些数据从 SQL-server 数据库表(使用 Microsoft SQL Server Management Studio)复制到标准的 MS-Excel 工作表中时,它会变成一个“通用”数字,如 1.54105E+17),这似乎是真实的值 154105070221597000 (注意最后三位已变成零的数字)。
目前,我复制数据,将该列的格式更改为文本并再次复制整个内容,这是可行的,但由于我需要定期执行此操作,因此我希望有一种更简单的方法。
如何告诉 Excel 停止删除我的数字的最后一位?
供您参考:如果我将条形码输入单元格并执行“转换为数字”,这也会发生,正如您从该屏幕截图中看到的那样:
第一个选项 - 提前将单元格格式化为文本。我不太喜欢这个,因为它需要额外的步骤,但是如果在粘贴之前单元格已经格式化为文本,则应该保留该格式。
第二个选项 - 我的首选选项 - 不是从 SSMS 复制,而是使用另存为将输出保存到制表符分隔的文本文件,然后使用文本导入向导在 Excel 中打开该文件。在此过程中,您可以选择每列的格式;选择文本作为格式应确保数据将被视为文本字符串而不是值。
第三个选项 - 使用简单的宏来粘贴值。VBA 中的
Range.PasteSpecial
方法与用户界面中的 PasteSpecial 功能不同,如果没有给出其他规范,它将以简单文本的形式粘贴值。宏将类似于在这些选项中,我通常更喜欢第二个选项,因为它可以让您对数据进行最大程度的控制,并且不依赖有时笨拙的剪贴板。
帮助您可靠地创建数据的完整文本副本的提示;
从 SQL 生成/导出数据时,在条形码 (-data) 前面加上初始
'
[1] ;这将阻止 Excel 摆弄它,因为它(由此)在它到达时被明确定义为“TEXT”。[1]即
CHAR(39)
在 Excel 中由于您使用的是 SQL 数据库,因此这可能是一个选项。
在 SQL Server Management Studio 中,不是进行
SELECT * FROM TABLE
查询,而是在其中抛出一个连接,以便 excel 单元格将数据视为文本。SELECT CONCAT('="', [Column], '"') FROM Table.dbo.Database
这将返回如下结果:
其中,在 Excel 中将如下所示: