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

Vb.net 使用EPPlus Sheet.PrinterSettings.RepeatColumns接收错误,vb.net,epplus,Vb.net,Epplus,我正在VB.Net中使用EPPlus 我有一些代码可以在两个Excel文档之间复制数据,然后清除这些数据。在我尝试将目标文档的A列设置为在所有页面上重复之前,一切正常 我有以下代码: Dim destFileInfo As FileInfo = New FileInfo(DestFile) Using dstPackage As ExcelPackage = new ExcelPackage(destFileInfo) Dim SNRSheet As ExcelWorksheet

我正在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调用之外,所有操作(在文档之间复制数据、删除不需要的列等)都可以正常工作

这引发了:

行不能小于1。 参数名称:value

堆栈跟踪显示:

在OfficeOpenXml.ExcelCellAddress.set_行(Int32值)位于 OfficeOpenXml.ExcelPrinterSettings.get_RepeatRows()位于 OfficeOpenXml.ExcelPrinterSettings.set_RepeatColumns(ExcelAddress 值)在ExcelHandler.cExcel。。。vb:718行

第718行是RepeatColumns行。 如果我注释掉那一行,代码就不会出错

我也试过了

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

但我也犯了同样的错误


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

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

尽管在设置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
恭喜-您可能在ePlus中发现了一个bug

同时,我建议以下可行的解决办法:

  • 保存更新版本之前,请确保磁盘上不存在目标文档
  • 重新编写代码,这样就不必调用DeleteColumn

  • 我将DeleteColumn行向下移动到RepeatColumns下面。这将清除错误,但一旦发生删除,它将丢失repeatColumns设置。唉。回到绘图板上如何不需要删除列。。。
    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