如何在ePlus中使用C#删除自动筛选
我尝试了以下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++
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。此选项还自动启用过滤器按钮。格式化为表格后,可以取消选中表格工具->表格样式选项中的过滤器按钮
对我有效的是以编程的方式做同样的事情
- 从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”]代码>