如何在ePlus中使用C#删除自动筛选

如何在ePlus中使用C#删除自动筛选,c#,asp.net,excel,epplus,C#,Asp.net,Excel,Epplus,我尝试了以下C#编码: wsDt.Cells["A10:G10"].AutoFilter = false; 但该过滤器不会从我的excel中删除 任何其他方法来删除它 谢谢…这似乎是一个EPPlus错误,我认为它在最新版本(4.04)中还没有得到解决,至少我可以找到一个解决方案。我的解决方法是使用循环一次加载一行电子表格值: int sheetRow = 3; for (int outer = 0; outer < outerSourceTable.Rows.Count; outer++

我尝试了以下C#编码:

wsDt.Cells["A10:G10"].AutoFilter = false;
但该过滤器不会从我的excel中删除

任何其他方法来删除它


谢谢…

这似乎是一个EPPlus错误,我认为它在最新版本(4.04)中还没有得到解决,至少我可以找到一个解决方案。我的解决方法是使用循环一次加载一行电子表格值:

int sheetRow = 3;
for (int outer = 0; outer < outerSourceTable.Rows.Count; outer++)
{
    var outerThingId = Convert.ToInt32(outerSourceTable.Rows[outer]["OuterThingId"]);
    var outerThingName = Convert.ToString(outerSourceTable.Rows[outer]["OuterThing"]);
    var innerThingsTable = _repository.GetInnerThings(outerThingId);
    if (innerThingsTable.Rows.Count > 0)
    {
        myWorksheet.Cells[sheetRow, 1].Value = outerThingName;

        // Load the data into the worksheet. We need to load a row at a time
        // to avoid the auto-filter bug
        for (int inner = 0; inner < innerThingsTable.Rows.Count; inner++)
        {
            var innerName = Convert.ToString(innerThingsTable.Rows[inner]["Name"]);
            var innerDescr = Convert.ToString(innerThingsTable.Rows[inner]["Description"]);
            myWorksheet.Cells[sheetRow, 2].Value = innerName;
            myWorksheet.Cells[sheetRow, 3].Value = innerDescr;
            sheetRow++;
        }
        sheetRow++;
    }
}
int sheetRow=3;
对于(int-outer=0;outer0)
{
myWorksheet.Cells[sheetRow,1].Value=outerThingName;
//将数据加载到工作表中。我们需要一次加载一行
//避免自动过滤错误
for(int-inner=0;inner
在Excel中,当您使用Format as Table选项时,它不仅会设置数据的样式,而且还会创建一个命名范围-Table1。此选项还自动启用过滤器按钮。格式化为表格后,可以取消选中表格工具->表格样式选项中的过滤器按钮

对我有效的是以编程的方式做同样的事情

  • LoadFromDataTable(DataTable、bool、TableStyles)基本上
    • 从Excel范围开始将数据粘贴到工作表
    • 应用表格格式
    • 使用DataTable.TableName来命名范围
    • 启用过滤器按钮
  • 禁用过滤器按钮

    • 使用DataTable.TableName引用命名范围
    • 将ShowFilter设置为false 在这里输入代码

      //imagine a table with 5 columns
      DataTable dt = new DataTable();
      dt.TableName = "UniqueTableName";
      
      //define the cells where the headers will appear
      int topRow = 1;
      int leftMostColumn = 1;
      int rightMostColumn = 5;
      
      //bind the DataTable using LoadFromDataTable()
      OfficeOpenXml.ExcelRange excelRange = worksheet.Cells[topRow, leftMostColumn, topRow, rightMostColumn];
      excelRange.LoadFromDataTable(dt, true, OfficeOpenXml.Table.TableStyles.Light8);
      
      //turn of the filtering
      OfficeOpenXml.Table.ExcelTable table = worksheet.Tables[dt.TableName];
      table.ShowFilter = false;
      

  • 如果使用
    LoadFromCollection()
    调用填充excel数据。然后,您可以使用默认的Excel表名“表1”来引用它

    这与Patricks answer的想法相同,但演示了在不使用DataTable的情况下的使用

    excelWorksheet.Cells.LoadFromCollection(myCollection);
    ExcelTable table = excelWorksheet.Tables["Table1"];
    table.ShowFilter = false;
    

    您能给我们更多的信息吗?如果您不使用
    LoadFromDataTable()
    调用,而是使用类似
    LoadFromCollection()
    的内容,那么表的默认名称是“Table1”。所以您可以如下引用它,
    ExcelTable table=worksheet.Tables[“Table1”]