繁体   English   中英

C# CSV 文件:如何在使用数据表读取 csv 文件时跳过几列

[英]C# CSV File : How to skip few columns while reading csv file using datatable

在使用数据表读取 csv 时,我需要跳过一些条件列。 例如:我的 csv 文件具有Emp_Id, Emp_Name,Dept, Role, Addree and Salary等标题。 我想在读取 csv 文件并导入 rest 时跳过Emp_NameRole列。

Emp_id Emp_Name部门角色地址薪水

我正在使用以下代码读取 csv 文件,没有任何列跳过但现在我想跳过一些列: List listOfCol = new List(); 数据表 dt = 新数据表();

        for (int i = 1; i <= colCount; i++)
        {
            string colName = XlRange.Cells[1, i].Value2.ToString();
            DataColumn dataColumn = new DataColumn(colName);
            dt.Columns.Add(dataColumn);
            listOfCol.Add(colName);
        }

        for (int i = 2; i <= rowCount; i++)
        {
            DataRow dataRow = dt.NewRow();

            for (int j = 1; j <= colCount; j++)
            {
                if (XlRange.Cells[i, j] != null && XlRange.Cells[i, j].Value2 != null)
                {
                    dataRow[listOfCol[j - 1].ToString()] = XlRange.Cells[i, j].Value2.ToString();
                }
                else
                {
                    dataRow[listOfCol[j - 1].ToString()] = "";
                }
            }
            dt.Rows.Add(dataRow);
        }

这取决于您如何构建 DataTable。

你可以试试 NuGet package csvHelper

还有一个看起来像这样的 class 定义。

public class Foo {
    public int Id { get; set; }
    public string Name { get; set; }
}

如果我们的 class 属性名称与我们的 CSV 文件 header 名称匹配,我们可以在没有任何配置的情况下读取该文件。

using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) {
    var records = csv.GetRecords<Foo>();
}

到 select 只有特定列使用列索引

public class Foo { 
    [Index(0)]
    public int Id { get; set; }

    [Index(1)]
    public string Name { get; set; }
 }

谢谢

您能否提供您正在使用的示例代码,以便我们提供更好的帮助。 执行此操作的粗略方法是,当您读取 csv 文件的每一行时,分隔符将其溢出,该分隔符返回您的项目数组,然后您按索引挑选以添加到数据表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM