Aspose.Cells 24.1 筛选空白的单元格之后列的隐藏有时候会不正确

示例代码如下

using Aspose.Cells;

var wb = new Workbook("input.xlsx");
var ws = wb.Worksheets[0];
var autoFilter = ws.AutoFilter;

// A17 单元格为空
Console.WriteLine("Sheet1 Row 17 Hidden:" + ws.Cells.Rows[16].IsHidden); // False

autoFilter.AddFilter(0, "");
autoFilter.Refresh();

Console.WriteLine("Sheet1 Row 17 Hidden:" + ws.Cells.Rows[16].IsHidden); // True

ws = wb.Worksheets[1];
autoFilter = ws.AutoFilter;

// A3 单元格为空
Console.WriteLine("Sheet2 Row 3 Hidden:" + ws.Cells.Rows[2].IsHidden); // False
autoFilter.AddFilter(0, "");
autoFilter.Refresh();

Console.WriteLine("Sheet2 Row 3 Hidden:" + ws.Cells.Rows[2].IsHidden); // False

测试文件:
example.zip (92.5 KB)

@CatPP,

我能够重现您提到的问题。 我注意到过滤空白单元格后,某些列有时会被错误隐藏。
我们需要对您的问题进行彻底评估。 我们已在内部问题跟踪系统中打开以下新票证,并将根据支持政策中提到的条款提供修复。

问题 ID:CELLSNET-55044

一旦我们有更新,我们会在这里通知您。

@CatPP
请使用 autoFilter.MatchBlanks(0); 或者 autoFilter.AddFilter(0, null);
代替autoFilter.AddFilter(0, “”); 来删选空白。

@simon.zhao 您好,我尝试了一下使用autoFilter.AddFilter(0, null)来筛选,但两次的结果还是不一样。之前的代码结果一样是因为代码有错误,样例excel文件中有隐藏的sheet页导致wb.Worksheets[1]选择了错误了Sheet页。

更新之后的代码:

using Aspose.Cells;

var wb = new Workbook("input.xlsx");
var ws = wb.Worksheets["Sheet1"];
var autoFilter = ws.AutoFilter;

// Sheet1 A17 Empty
Console.WriteLine("Sheet1 Row 17 Hidden:" + ws.Cells.Rows[16].IsHidden); // False

autoFilter.AddFilter(0, null);
autoFilter.Refresh();

Console.WriteLine("Sheet1 Row 17 Hidden:" + ws.Cells.Rows[16].IsHidden); // False

ws = wb.Worksheets["Sheet2"];
autoFilter = ws.AutoFilter;

// Sheet2 A4 Empty
Console.WriteLine("Sheet2 Row 4 Hidden:" + ws.Cells.Rows[3].IsHidden); // False
autoFilter.AddFilter(0, null);
autoFilter.Refresh();

Console.WriteLine("Sheet2 Row 4 Hidden:" + ws.Cells.Rows[3].IsHidden); // True

更新之后的文件:
example.zip (9.6 KB)

@CatPP
感谢你提供更多详细信息。我们已经重新打开了问题单,让我们详细调查和分析你的问题。希望我们能尽快解决。一旦我们有了最新消息,我们会尽快通知你。

The issues you have found earlier (filed as CELLSNET-55044) have been fixed in this update. This message was posted using Bugs notification tool by johnson.shi

当我更新到24.3之后。好像这个问题还是有一些问题,当只筛选空白单元格时,结果不正确。但多筛选一个值之后,结果就正常了:

var wb = new Workbook("input.xlsx");
var worksheet = wb.Worksheets[0];
Console.WriteLine($"Cell B7 empty:\t{string.IsNullOrEmpty(worksheet.Cells["B7"].StringValue)}");

var filter = worksheet.AutoFilter;
filter.MatchBlanks(1);
Console.WriteLine($"Before filter:\t{worksheet.Cells.Rows[6].IsHidden}");

filter.Refresh();
Console.WriteLine($"After filter:\t{worksheet.Cells.Rows[6].IsHidden}");


filter.AddFilter(1, "超短期融资债券");
filter.Refresh();
Console.WriteLine($"Filter two value:\t{worksheet.Cells.Rows[6].IsHidden}");

input.zip (11.8 KB)

@CatPP
通过使用以下样例代码进行测试,我们可以复现问题。发现只筛选空白单元格时,得到错误的筛选结果。请查看附件。filterResult.zip (25.8 KB)
样例代码如下:

var wb = new Workbook(filePath + "input.xlsx");
var worksheet = wb.Worksheets[0];
Console.WriteLine($"Cell B7 empty:\t{string.IsNullOrEmpty(worksheet.Cells["B7"].StringValue)}");

var filter = worksheet.AutoFilter;
filter.MatchBlanks(1);
Console.WriteLine($"Before filter:\t{worksheet.Cells.Rows[6].IsHidden}");

filter.Refresh();
Console.WriteLine($"After filter:\t{worksheet.Cells.Rows[6].IsHidden}");
wb.Save(filePath + "out_net1.xlsx");

filter.AddFilter(1, "超短期融资债券");
filter.Refresh();
Console.WriteLine($"Filter two value:\t{worksheet.Cells.Rows[6].IsHidden}");
wb.Save(filePath + "out_net2.xlsx");

我们已经在内部问题跟踪系统中打开了以下新问题单,并将根据Free Support Policies中提到的条款提供修复。

问题单号: CELLSNET-55309

@CatPP
我们已修复此问题,并将在下一版本 24.4 中修复此问题。
顺便说一句,“B7”的值是一个空字符串(“”),不为空。 我们需要特殊处理,因为“”和 null 在大多数情况下是不同的,尤其是在公式计算中。
请检查这个空字符串值是否是您所期望的。
如果要将单元格设置为空白,可以使用 Cell.PutValue(null)。

The issues you have found earlier (filed as CELLSNET-55309) have been fixed in this update. This message was posted using Bugs notification tool by johnson.shi