使用 EPPlus 接收错误 Sheet.PrinterSettings.RepeatColumns

Receiving error using EPPlus Sheet.PrinterSettings.RepeatColumns

我在 VB.Net 中使用 EPPlus。

我有一些代码可以在两个 Excel 文档之间复制数据,然后清理该数据。一切正常,直到我尝试将目标文档的 A 列设置为在所有页面上重复。

我有这个代码:

Dim destFileInfo As FileInfo = New FileInfo(DestFile)
Using dstPackage As ExcelPackage = new ExcelPackage(destFileInfo)
   Dim SNRSheet As ExcelWorksheet 
   '[...snipped code to copy data between documents...]
   SNRSheet.deleteColumn(StageCol, LastColNum+2)
   SNRSheet.PrinterSettings.RepeatColumns = SNRSheet.Cells("A:A")
   dstPackage.Save()
End using

除 RepeatColumns 调用外,一切正常(在文档之间复制数据、删除不需要的列等)。

这抛出:

Row cannot be less than 1. Parameter name: value

堆栈跟踪显示:

at OfficeOpenXml.ExcelCellAddress.set_Row(Int32 value) at OfficeOpenXml.ExcelPrinterSettings.get_RepeatRows() at OfficeOpenXml.ExcelPrinterSettings.set_RepeatColumns(ExcelAddress value) at ExcelHandler.cExcel... cExcel.vb:line 718

第 718 行是 RepeatColumns 行。 如果我注释掉该行,代码将正常运行。

我也试过了

SNRSheet.PrinterSettings.RepeatColumns = New ExcelAddress("SNR Calcs!A:A")

Dim Range1 As ExcelRange = SNRSheet.Cells("A:A")
SNRSheet.PrinterSettings.RepeatColumns = Range1

但我得到了同样的错误。

如何正确指示此列应在所有页面上重复?

有意思。我已经设法重现了这个问题,但它似乎只在目标文档已经存在时才会发生。

虽然在设置RepeatColumns的值时抛出异常属性,但似乎是调用DeleteColumn()引起的。注释掉那一行,不会抛出异常。

示例:

Dim file = New FileInfo(filePath)
If file.Exists Then
    file.Delete()
End If

Using p = New ExcelPackage(file)
    Dim wb = p.Workbook
    Dim ws = If(wb.Worksheets.FirstOrDefault(), wb.Worksheets.Add("Sheet1"))

    For r As var = 1 To 20
        For c As var = 1 To 20
            ws.Cells(r, c).Value = String.Format("{0}-{1}", r, c)
        Next
    Next

    ws.DeleteColumn(1, 2)
    ws.PrinterSettings.RepeatColumns = ws.Cells("A:A")
    p.Save()
End Using

恭喜 - 您可能发现了 EPPlus 中的错误。

与此同时,我建议将以下内容作为可行的解决方法:

  1. 在保存更新版本之前确保您的目标文档不存在于磁盘上

  1. 重新编写代码,这样您就不必调用 DeleteColumn