ExcelDataReader FilterColumn 用法

ExcelDataReader FilterColumn usage

我正在尝试 return 一个数据集 return 第一行作为 header 行(这是有效的),并从数据中过滤掉整列取决于他们的专栏 header.

ExcelDataReader 3.4.0 介绍了我正在尝试使用的 FilterColumn 回调选项。

下面是我的AsDataSet电话

           var ds = reader.AsDataSet(new ExcelDataSetConfiguration()
        {
            ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
            {

                // Gets or sets a value indicating whether to use a row from the 
                // data as column names.
                UseHeaderRow = true,

                // Gets or sets a callback to determine which row is the header row. 
                // Only called when UseHeaderRow = true.
                ReadHeaderRow = (rowReader) => {
                    // F.ex skip the first row and use the 2nd row as column headers:
                    rowReader.ToString();
                },

                FilterColumn = (rowReader, columnIndex) => { 
                    return //if header == "string" filter out entire column
                }
            }
        });

上面,当我尝试查看列的行、索引对并测试它是否包含短语时,它 return 无论如何。在这种情况下 FilterColumn 的正确用法是什么?

Link 到 github : https://github.com/ExcelDataReader/ExcelDataReader/tree/v3.4.0

将headers放入ReadHeaderRow的列表中,检查FilterColumn中的索引:

    var headers = new List<string>();

    ds = reader.AsDataSet(new ExcelDataSetConfiguration()
    {
        ConfigureDataTable = (tableReader) => new ExcelDataTableConfiguration()
        {
            UseHeaderRow = true,

            ReadHeaderRow = rowReader => {
                for (var i = 0; i < rowReader.FieldCount; i++)
                    headers.Add(Convert.ToString(rowReader.GetValue(i)));
            },

            FilterColumn = (columnReader, columnIndex) =>
                headers.IndexOf("string") != columnIndex
        }
    });

真的很简单!就这样使用吧:

FilterColumn = (rowReader, colIndex) => 
    rowReader[colIndex].ToString() != "string"

FilterColumn = (rowReader, colIndex) => 
    !rowReader[colIndex].ToString().Contains("string")