Vb.net 使用EPPlus Sheet.PrinterSettings.RepeatColumns接收错误
我正在VB.Net中使用EPPlus 我有一些代码可以在两个Excel文档之间复制数据,然后清除这些数据。在我尝试将目标文档的A列设置为在所有页面上重复之前,一切正常 我有以下代码: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
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行向下移动到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