【问题标题】:Remove mask from columns in export CSV File in C#从 C# 中导出 CSV 文件中的列中删除掩码
【发布时间】:2017-01-17 07:40:08
【问题描述】:

我正在导出一个 csv 文件并将日期字段和电话号码字段屏蔽,如下图所示。只有当我在 Microsoft Excel 中而不是在其他平台上打开导出的文件时才会出现此问题

我想要做的是取下面具并将出生日期和数字正确显示为:出生日期:“12/11/2016”和数字为“123456789”。

注意:出生日期是日期时间,手机或手机号码是字符串

我用来创建它的代码如下:

    foreach (EmployeeDataExportObject item1 in _obj_distinct_company)
                {

                    sb.Append(string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},{16},{17},{18},{19},{20},{21}"
                    , item1.client_id
                    , item1.employee_number
                    , item1.employee_status_type
                    , item1.first_name.Replace(",", "")
                    , item1.middle_name.Replace(",", "")
                    , item1.last_name.Replace(",", "")
                    , '"' + item1.ssn.ToString() + '"'
                    , '"' + birth_date.ToString("MM-dd-yyyy") + '"' //problem is on this part
                    , Address.Replace(",", "")
                    , item1.address2.Replace(",", "")
                    , item1.city
                    , item1.state
                    , item1.zip_code
                    , item1.country
                    , '"' + item1.cell_phone.ToString().Replace("-", "").Replace("(", "").Replace(")", "").Replace(".", "").Replace(" ", "") + '"' //problem is on this part
                    , item1.pay_rate1
                    , item1.pay_rate_amount1.ToString("0.00")
                    , item1.pay_rate2
                    , item1.pay_rate_amount2.ToString("0.00")
                    , item1.employee_status_type
                    , item1.termination_reason.Replace(",", " ")
                    , item1.termination_date.ToString("MM-dd-yyyy"))
                    + Environment.NewLine);
                }

                _fileName = item.company_name;
                if (!Directory.Exists(paychex_folder))
                    Directory.CreateDirectory(paychex_folder);

                filepath = paychex_folder + _fileName + ".csv";

                File.WriteAllText(filepath, sb.ToString());
            }

【问题讨论】:

  • 您是否考虑过导出为 .XLS 或 .XLSX 而不是 .CSV?使用这种技术,您不仅可以导出数据,还可以对其进行格式化。
  • 创建一个真实 Excel (XLSX) 文件而不是CSV。它实际上比创建 CSV 简单得多,并且生成的文件更小,因为它是压缩的。只需使用像 EPPlus 这样的库,它直接使用 Open XML 生成 XLSX 文件。就像sheet.LoadFromCollection(_obj_distinct_company);EPPlus 使用正确的数据类型和格式一样简单,因此您不必担心日期和数字格式
  • 这是要求,希望它仅适用于 csv。已经可以选择导出为 excel

标签: c# excel csv export-to-csv


【解决方案1】:

蒙面是什么意思,能附上excel文件的截图吗?

如果包含日期的列不够宽,则该值显示为###### - 这是您遇到的问题吗?

【讨论】:

  • 我已经用图片编辑了我的问题。是的,问题就是你提到的。我该如何解决它
  • 如果是这种情况,只需将列加宽即可。
  • 如何在 C# 中添加内容?
  • 您已将导出文件编写为 CSV 格式,因此它非常原始,据我所知,它不允许您设置默认列宽。我建议在打开文件后手动执行此操作,或者更改为特定于 Excel 的导出方法,例如 Open XML msdn.microsoft.com/en-us/library/bb448854(v=office.15).aspx
  • 不幸的是 Akhilesh,CSV 就没有那么灵活。这就是为什么许多导出功能将为用户提供选择格式(CSV、Excel、PDF 等)的选项。现在您有了一个有效的 CSV 导出,可能是时候添加一个选项 Excel 导出并允许您的用户做出选择
【解决方案2】:

使用EPPLus 之类的库创建 XLSX 文件实际上更容易。 XSLX 文件是压缩的 XML 文件,无需安装 Excel 即可生成。使用 EPPlus,您只需调用 LoadFromDatatableLoadFromCollection,即可使用 DataTable 或集合中的数据填充工作表,例如:

FileInfo targetFile = new FileInfo(targetFile);

using (var excelFile = new ExcelPackage(targetFile))
{
    var sheet = excelFile.Workbook.Worksheets.Add("Sheet1");
    sheet.LoadFromCollection(_obj_distinct_company, PrintHeaders: true);
    excelFile.Save();
}

EPPlus 负责以 Excel 预期的十进制格式(OA 日期)序列化日期。

LoadFromCollection 返回一个 ExcelRange 对象,您可以使用该对象进一步格式化行和列,或创建命名表,例如:

var range1=sheet.LoadFromCollection(_obj_distinct_company, PrintHeaders: true);
var table = sheet.Tables.Add(range, "Companies");
table.TableStyle = TableStyles.Light2;

【讨论】:

  • 希望它仅适用于 csv。已经可以选择导出为 excel
  • 然后接受您将总是遇到 Excel 或任何其他在导入时必须猜测列格式的程序的问题。当您双击 CSV 并使用 Excel 打开它时,Excel 将使用用户的区域设置作为默认值导入数据。例如,如果日期格式错误,您将收到错误消息。您的代码使用仅限美国的日期格式,这意味着大多数用户会收到错误
  • @AkhileshSehgal 您可以尝试将日期存储为 ISO8601,即YYYY-MM-DD,而不是使用特定文化的格式。 Excel 可能会将其识别为正确的日期或文本。至少您避免将几个月加载为几天。另请注意,许多欧洲文化(例如法语、德语、希腊语)使用, 作为小数分隔符,使用; 作为列表分隔符。
猜你喜欢
  • 2020-12-17
  • 1970-01-01
  • 2021-12-16
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 2015-11-18
  • 1970-01-01
相关资源
最近更新 更多