【问题标题】:How to show preceding zero in csv export?如何在 csv 导出中显示前零?
【发布时间】:2018-01-02 19:39:23
【问题描述】:

我有这个将信息保存到 csv 的代码块。我面临的问题是前面的 0 没有显示在 excel 中,尽管它们显示在记事本中。 这是编程问题还是excel csv转换问题。任何建议表示赞赏。
代码:

  public bool SaveToCSV(DataTable dt, string FileName)
    {
        try
        {
            var lines = new List<string>();

            string[] columnNames = dt.Columns.Cast<DataColumn>().
                                              Select(column => column.ColumnName).
                                              ToArray();

            var header = string.Join(",", columnNames);
            lines.Add(header);

            var valueLines = dt.AsEnumerable()
                               .Select(row => string.Join(",", row.ItemArray));
            lines.AddRange(valueLines);

            File.WriteAllLines(FileName, lines);
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
            return false;
        }   
    }

【问题讨论】:

标签: c# excel csv


【解决方案1】:

虽然前面的 0 显示在记事本中,但它们没有显示在 Excel 中

你可以:

  • 导入(而不是打开csv 中的数据,并确保将要处理的列设置为@987654322 @ 被导入为text,并且不会被 Excel 解释为数字,

  • 更改您输出 csv 的方式,以便在 Excel 打开文件时将撇号 ' 前缀添加到希望被 Excel 视为 text 的数字数据 -例如'0123456

Hth.

【讨论】:

    【解决方案2】:

    不是最优雅的解决方案,但如果您有兴趣添加全 0 行,请考虑以下代码,它只是将一行 0 添加到您的 CSV:

    public bool SaveToCSV(DataTable dt, string FileName)
    {
        try
        {
            var lines = new List<string>();
    
            string[] columnNames = dt.Columns.Cast<DataColumn>().
                                              Select(column => column.ColumnName).
                                              ToArray();
    
            var header = string.Join(",", columnNames);
            lines.Add(header);
    
            //New Code Starts Here
            List<string> zeroList = new List<string>();
            for(int i = 0; i < columnNames.Count; i++){
                zeroList.Add("0");
            }
    
            lines.AddRange(zeroList);
            //New Code Ends Here
    
            var valueLines = dt.AsEnumerable()
                               .Select(row => string.Join(",", row.ItemArray));
            lines.AddRange(valueLines);
    
            File.WriteAllLines(FileName, lines);
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
            return false;
        }   
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 2017-05-05
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 2017-04-19
      相关资源
      最近更新 更多