使用 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 中的错误。
与此同时,我建议将以下内容作为可行的解决方法:
- 在保存更新版本之前确保您的目标文档不存在于磁盘上
或
- 重新编写代码,这样您就不必调用 DeleteColumn
我在 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 中的错误。
与此同时,我建议将以下内容作为可行的解决方法:
- 在保存更新版本之前确保您的目标文档不存在于磁盘上
或
- 重新编写代码,这样您就不必调用 DeleteColumn