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