1

我在我的 Web API 中使用了 softarisans 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);

目的地Excel.Save(); //这一行出错

4

1 回答 1

1

此处的错误消息非常清楚“无法选择隐藏的工作表。”。这是因为在 Excel 中,工作簿始终有 1 个被选中的可见工作表。这就是为什么您不能删除工作簿中的每个工作表的原因。

可能发生的情况是通过您的工作流程选择了一个隐藏的工作表。OfficeWriter 总是尝试保持选中工作表,但由于我们正在以编程方式处理文件,您可能会进入临时错误状态。(例如删除所有可见的工作表,然后在保存之前添加一个可见的工作表)

如果没有工作簿并实际运行您的用例,我相信这就是正在发生的事情。

//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); 

几种可能解决此问题的方法

  • 更改代码流,因此您在工作簿中始终有一个可见工作表,如果您选择的工作表被删除,OfficeWriter 将尝试选择下一个可见工作表。
  • 显式设置您选择的工作表参见http://wiki.softartisans.com/pages/viewpage.action?pageId=5308872例如 DestinationExcel.Workbook.Worksheets[0].Select();

你可以用一种更通用的方法来检查工作表的可见性(http://wiki.softartisans.com/display/EW9/Worksheet.Visibility)并确保选择一个可见的方法

丹软工匠

于 2015-02-12T16:03:19.343 回答