Joe*_*ike 6 c# asp.net excel epplus
我试过下面的C#CODING:
wsDt.Cells["A10:G10"].AutoFilter = false;
Run Code Online (Sandbox Code Playgroud)
但是我的Excel中没有删除过滤器.
任何其他方式来删除它.
谢谢...
小智 6
在 Excel 中,当您使用“格式为表”选项时,它不仅会设置数据样式,还会创建一个命名范围 - Table1。此选项还会自动启用过滤器按钮。格式化为表格后,您可以在“表格工具”->“表格样式选项”中取消选中“过滤器按钮”。
对我有用的是以编程方式做同样的事情。
禁用过滤器按钮
将 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;
Run Code Online (Sandbox Code Playgroud)这似乎是一个 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++;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2669 次 |
| 最近记录: |