我在数据库中有一些数据,这些数据使用的 ID 为 16 位数字。在某些情况下,我需要以可在 Excel 中操作的方式导出数据。
所以我将数据导出到文件中,然后将其导入到 Excel 中。
我尝试过几种文件格式,但还是不行。
我面临的问题是,当将一个文件读入 Excel 时,如果其中有一个单元格看起来像数字,那么 Excel 会将其视为数字。
问题是(据我所知)excel 中的所有数值都是双精度浮点数,精度小于 16 位。所以我的 ID 发生了变化:最后一位数字经常被改为 0。
到目前为止,我只能通过自己破坏 ID 来让 Excel 保持 ID 不变:在 ID 上添加字母或符号。然而,这意味着为了再次使用该值,它必须是“未破坏的”。
有没有办法创建一个文件,在其中指定 excel 必须将值视为文本而不更改该值?或者有没有办法让 excel 将值视为长整型(64 位整数)?
答案1
您可以将数字放在引号中,并在其前面添加等号,如下所示:(="001145"
当然,这是在 CSV 中)
答案2
强制将看起来像数字的东西视为文本的标准方法是加上单引号,也就是撇号 (‘) 位于其前面。
答案3
您可以强制 Excel 将其作为文本从 .csv 导入。创建 .csv 文件后,
- 选择
Data > From Text
- 在文本导入向导步骤 1 中,选择
Delimited
- 在文本导入向导第 2 步中,选择
Comma
- 在文本导入向导步骤 3 中,选择您的长 ID 列并选择
Text data format
。 - 然后完成。
Excel 从一开始就会将长 ID 列视为文本,而不是尝试将其转换为数字然后再转换回文本,从而导致数据丢失。
以下是从 .csv 导入并以三种不同方式格式化相同数据字符串的示例:
请注意,如果您尝试直接打开 .csv(Excel 很乐意为您执行此操作),那么您已经无法为列分配数据类型值 - Excel 会(错误地)为您完成此操作。
答案4
除了我归类为可信答案的内容之外,我还发现在 LibreOffice 中,我可以使用他们所谓的“Excel 2003 xml”格式导出工作表。这种格式是一种 XML,看起来很容易自己生成,并且对工作表中的单元格有以下定义:
<Cell>
<Data ss:Type="String">12345678901234567890</Data>
</Cell>
<Cell>
<Data ss:Type="Number">1.23456789012346E+019</Data>
</Cell>
当我简单地为这样的 xml 赋予 xlsx 扩展名时,我的 LibreOffice 就可以正确地打开它而没有任何问题。