【问题标题】:excel to DataTable to csv Zip Codes w/ Hyphens not showing using C# OLEDBexcel 到 DataTable 到 csv 带连字符的邮政编码不使用 C# OLEDB 显示
【发布时间】:2011-01-31 17:39:58
【问题描述】:

我有一个包含地址的 Excel 电子表格。我正在使用 OLEDB 从电子表格中读取数据并将其存储到 DataTable 中。然后,我循环遍历 DataTable 并创建我的输出,该输出被写入 .csv 文件。我在 C# 中完成所有这些工作。

问题出在:当我打开 .csv 文件时,任何带连字符的邮政编码都已替换为 0。

12345-1234 --> 0

所以我想纠正这种行为,以便邮政编码按应有的方式显示。如果我必须砍掉连字符后的数字,那很好。如何确保邮政编码被转移?

另外,我可以在代码中做些什么来维护邮政编码中的前导 0 吗?邮政编码如下:

01234 --> 1234

我可以在代码中做些什么来保持前导 0 吗?

【问题讨论】:

    标签: c# excel csv oledb


    【解决方案1】:

    问题是 CSV 文件必须由 Excel 解释,并且它假设看起来数字的东西应该根据默认的数字规则来处理。不幸的是,这些修复不适用于所有可能的情况。您可以执行以下选项之一:

    1. 保持 CSV 文件原样并使用 Excel 中的数据导入向导
    2. 在字段中写一个前导勾号'
    3. 将字段写为方程式="01234"

    如果您只是使用 Excel 查看数据,那么第二个或第三个选项可能会起作用。如果您需要在其他公式中使用数据,那么您可能想要走第一条路线。如果您正在检查 Excel 中的数据,但您打算在其他地方使用它,我建议您也使用第一条路线。

    【讨论】:

    • 我正在其他地方使用数据。当我打开 .csv 文件时,该文件类型与 Excel 相关联,因此它在 Excel 中打开。所以选项 1 是可能的,但并不比我现在正在做的更好。2 和 3 是不可能的,因为我不是在写入 Excel,而是写入 .csv。
    • #2 和 3 绝对是可能的,但不是您想要的。这两个选项是您可以编写 CSV 文件的方式,以欺骗 Excel 将字段视为文本。但这可能会破坏读取 CSV 文件的任何其他进程。最终,您的问题出在 Excel 上,您所做的其他一切都是正确的。根据您的数据大小,我建议您只使用记事本检查 CSV 文件。不如 Excel 漂亮,但它可以让您更清晰地查看原始数据。
    • 将 .csv 作为文本文件查看时,不显示前导零。连字符在文本文件中看起来像 ,00000,这很糟糕。问题出在 Excel 上,好的。有什么我可以做的吗?
    【解决方案2】:

    如果邮政编码在 Excel 电子表格中进行了格式化,您应该将它们读入,将它们存储在内存中,然后将它们全部作为字符串写出。不要将它们转换为整数。

    【讨论】:

    • 我没有转换它们,每一列的数据类型都是字符串。
    • @MAW 如果前导零被剥离,您正在转换它们。如果不是明确的,那么隐含的,某处。问题是你调用的是什么代码来转换类型,以及如何处理它。
    • @Will- 您能否建议我的操作中可能存在问题的任何点?完整的代码很长而且发布不切实际,但我会尝试去掉不相关的内容并发布。
    • @MAW 我建议调试过程中的每一步。可能是从 excel 实际导入,具体取决于您使用的库。
    • 不使用任何库进行导入,只是将 oledb 代码编写为针对 Excel 工作表的“数据库”的选择语句。但我会尝试到处调试。
    【解决方案3】:

    我刚刚测试了您的数据,这里发布的 method 有效。

    即当放入 DataSet 时,单元格值保持其值“12345-1234”。前导零也被发送到数据集。 (邮编:00601)

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2023-01-16
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      相关资源
      最近更新 更多