gpt4 book ai didi

c# - EPPlus - 在 DeleteRow 之后向上移动行

转载 作者:行者123 更新时间:2023-11-30 23:08:33 25 4
gpt4 key购买 nike

h3110 3v3ry0n3,尤其是 EPPlus 团队!

我有一个这样的 Excel 模板:

 _______________________________
| Title 1 | Title 2 |
|_______________|_______________|
| %Placeholder% | %Placeholder% |
|_______________|_______________|
| Special cell | Special cell |
|_______________|_______________|

特殊单元格 - 带有一些数据验证和数据列表的空单元格。

所以,这个模板有双重目的:

  • 以编程方式填充数据(替换 %placeholder%s)或
  • 手动填写(通过选择特殊单元格中的列表)

在第二种情况下,我调用 sheet.DeleteRow(1) 并期望特殊行 #3 成为行 #2(上移),但这并没有发生。所以,问题是:这是一个错误吗?我应该发布一个问题,还是有一些解决方法可以强制行向上移动?

这里有一些想法。我想,这可能是由于将特殊单元格视为空单元格造成的。可能有一种方法可以将数据验证从第 3 行复制到第 2 行?还有一个类似的问题C# ExcelPackage (EPPlus) DeleteRow does not change sheet dimension?对于更一般的情况,似乎删除的行后面没有空行。

最佳答案

似乎是一个已知问题。如果在源代码中查看当前版本的 ExcelWorksheet.cs

https://epplus.codeplex.com/SourceControl/latest#EPPlus/ExcelWorkbook.cs :

#region DeleteRow
/// <summary>
/// Delete the specified row from the worksheet.
/// </summary>
/// <param name="row">A row to be deleted</param>
public void DeleteRow(int row)
{
DeleteRow(row, 1);
}
/// <summary>
/// Delete the specified row from the worksheet.
/// </summary>
/// <param name="rowFrom">The start row</param>
/// <param name="rows">Number of rows to delete</param>
public void DeleteRow(int rowFrom, int rows)
{
CheckSheetType();
if (rowFrom < 1 || rowFrom + rows > ExcelPackage.MaxRows)
{
throw(new ArgumentException("Row out of range. Spans from 1 to " + ExcelPackage.MaxRows.ToString(CultureInfo.InvariantCulture)));
}
lock (this)
{
_values.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns);
_formulas.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns);
_flags.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns);
_commentsStore.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns);
_hyperLinks.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns);
_names.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns);

Comments.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns);
Workbook.Names.Delete(rowFrom, 0, rows, ExcelPackage.MaxColumns, n => n.Worksheet == this);

AdjustFormulasRow(rowFrom, rows);
FixMergedCellsRow(rowFrom, rows, true);

foreach (var tbl in Tables)
{
tbl.Address = tbl.Address.DeleteRow(rowFrom, rows);
}
foreach (var ptbl in PivotTables)
{
if (ptbl.Address.Start.Row > rowFrom + rows)
{
ptbl.Address = ptbl.Address.DeleteRow(rowFrom, rows);
}
}
}
}

没有更新到 public ExcelDataValidationCollection DataValidations 对象的引用。

查看当前的开发分支(现在在 github 上)似乎它将在下一个版本中解决:

https://github.com/JanKallman/EPPlus/blob/master/EPPlus/ExcelWorksheet.cs#L2551

其中引用了 codeplex 上的问题:

https://epplus.codeplex.com/workitem/15573

因此您可以尝试重现可能很困难的功能,因为看起来他们必须在几个地方进行更改。或者你尝试从 git 中拉取最新的并编译。

关于c# - EPPlus - 在 DeleteRow 之后向上移动行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46455450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com