【问题标题】:Numeric fields lose leading zero while writing CSV in c#在 c# 中写入 CSV 时,数字字段丢失前导零
【发布时间】:2012-08-22 11:20:50
【问题描述】:

我正在使用 ASP.NET 应用程序将我的客户数据导出到 CSV,我需要我的客户电话号码带有前导零。 我需要电话号码不带“-”且不带引号,并且由于我的应用程序的性质,我不能使用 EPPLUS 等 3rd 方产品。 我试图放置一个空格并让 CSV “理解”我需要将电话号码作为文本,但这似乎不正确。

我想知道如何在不使用 3rd 方产品的情况下使 excel 包含前导零。

谢谢

【问题讨论】:

  • 在我的一个应用程序中,我记得在前导零字段前加上单引号。只有一个,在值的开头

标签: c# csv


【解决方案1】:

将保存在 csv 中的数据更改为以下格式:

 ="00023423"

CSV 示例:

David,Sooo,="00023423",World

这将在 excel 中显示 00023423 而不是 23423。

【讨论】:

  • 这会将值转换为公式。正确的方法是在前面加上一个单引号。
  • 遗憾的是,这不再有效 - 报价现在显示为单元格的一部分。但是任何不能是数字的一部分的字符都会触发非数字解释,从而保留前导零。因此,您可以改为预先挂起或附加制表符或不间断空格 ("\xA0")。如果字段以 +、-、=、@ 开头,前置还可以防止将字段解释为公式,因此可以减轻 CSV 注入攻击。
【解决方案2】:
public void CreatingCsvFiles(Client client)
    {
        string filePath = "Your path of the location" + "filename.csv";
        if (!File.Exists(filePath))
        {
            File.Create(filePath).Close();
        }
        string delimiter = ",";
        string[][] output = new string[][]{
        new string[]{ "=\"" + client.phone + "\"", client.name }
        };
        int length = output.GetLength(0);
        StringBuilder sb = new StringBuilder();
        for (int index = 0; index < length; index++)
        sb.AppendLine(string.Join(delimiter, output[index]));
        File.AppendAllText(filePath, sb.ToString());
    }

灵感来自http://softwaretipz.com/c-sharp-code-to-create-a-csv-file-and-write-data-into-it/

重要的部分:

  "=\"" + client.phone + "\"", client.name

如果电话号码是int,当然要加上.toString()。

【讨论】:

  • 添加此 =\.当我在记事本中打开 csv 后,它会显示带有 =Value 的值
【解决方案3】:

将电话号码打印到 CSV 中,并在前面加上 '(单引号),如下所示:

"Some Name","'0000121212"

Excel 应将此0000121212 视为字符串。

【讨论】:

  • 好的,所以请尝试在双引号前加上等号,如下所示:"Some Name",="'0000121212"(无论是否包含单引号)。 UPD:我试过不带单引号,它工作正常。
  • 我在长整数方面遇到了类似的问题,其中 Excel 将它们转换为科学格式,当我这样做时它可以工作 ="98127398217398213982173918"
【解决方案4】:

我相信将数字转换为像公认答案这样的公式可能不是对所有人都有帮助的解决方案。

我采用的替代解决方案是在整数值之前添加一个制表符空间


例子:

phoneNumber 作为一个字符串变量,其中包含我们的 int 值

解决方案:

"\t" + phoneNumber

【讨论】:

    【解决方案5】:

    如果你已经知道手机里面必须有多少数字,你可以这样做

    phoneNumber.ToString("000000000000")

    在本例中,我认为phoneNumberint,所需的数字长度为12

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 2017-01-08
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 2022-08-03
      • 2010-10-10
      相关资源
      最近更新 更多