SoftArtisans.OfficeWriter.Shared.SARuntimeException:不能有隐藏的工作表被选中
我在我的web API中使用软文officewriter。 我试图从源Excel文件复制工作表数据到目标Excel文件。 保存目标excel时遇到上述错误。 我已经添加了一段代码以供参考。 任何帮助,将不胜感激。
工作表PrevSheet = SourceExcel.Workbook.GetWorksheet(Sheet.sheetName); DestinationExcel.Workbook.Worksheets.Delete(PrevSheet.Name); DestinationExcel.Workbook.Worksheets.CopySheet(PrevSheet,PrevSheet.Position,PrevSheet.Name);
DestinationExcel.Save(); / /错误在这一行
错误信息在这里很清楚“不能有一个隐藏的工作表被选中”。 这是因为在Excel中,工作簿总是有一个可见的工作表被选中。 这就是为什么您不能删除工作簿中的每个工作表。
可能发生的情况是通过您的工作stream程select隐藏的工作表。 OfficeWriter总是试图保持一个工作表select,但由于我们正在编程使用该文件,你可以进入一个临时坏的状态。 (例如删除所有可见的工作表,但在保存之前添加一个可见的工作表)
没有工作簿,实际上运行你的用例,这是我相信正在发生的事情。
//Here you are deleting a worksheet, which might mean that the destination workbook no longer has visible sheets. DestinationExcel.Workbook.Worksheets.Delete(PrevSheet.Name); //Now you are copying in a new worksheet from a source workbook, it might be visible. DestinationExcel.Workbook.Worksheets.CopySheet(PrevSheet,PrevSheet.Position,PrevSheet.Name);
有几种方法可以解决这个问题
- 更改代码stream程,所以您始终在工作簿中有一个可见工作表,如果您select的工作表被删除,OfficeWriter将尝试select下一个可见工作表。
- 显式设置您select的工作表请参阅http://wiki.softartisans.com/pages/viewpage.action?pageId=5308872 ,如DestinationExcel.Workbook.Worksheets [0] .Select();
您可以在更通用的方法中检查工作表可见性( http://wiki.softartisans.com/display/EW9/Worksheet.Visibility ),并确保select一个可见
Dan SoftArtisans