如何使用互操作检查Excel中是否存在工作表。我尝试了以下但是如果不存在则抛出COMException ..是否有更好的方法来查找而不是实际查看异常
Worksheet sheet = null;
Sheets worksheets = some;
sheet = (Worksheet)worksheets.get_Item("sheetName");
if(sheet!=null)
{
//do something
}
编辑:
感谢输入人员。
我写了一个函数private Dictionary<string, Worksheet> GetSheetsMap(Sheets worksheets)
{
if (worksheets == null)
throw new ArgumentNullException("worksheets");
Dictionary<string, Worksheet> map = new Dictionary<string, Worksheet>(StringComparer.CurrentCultureIgnoreCase);
foreach (Worksheet s in worksheets)
{
map.Add(s.Name, s);
}
return map;
}
我用它如下
Dictionary<string, Worksheet> sheetMap = GetSheetsMap(worksheets);
Worksheet sheet = null;
if (sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate, out sheet))
{
//found it.
}
else
{
// not
}
答案 0 :(得分:11)
你有一个工作簿对象吗?如果是这样,您可以迭代Workbook.Sheets数组并检查每个Sheet的Name属性。
foreach (Sheet sheet in workbook.Sheets)
{
if (sheet.Name.equals("sheetName"))
{
//do something
}
}
答案 1 :(得分:3)
首先考虑异常是否真的不合适。您希望有一个具有特定名称的工作表。如果不是,你仍然有意义继续运行你的程序吗?
如果可以,您可以通过迭代工作表集合并在Name属性上查找匹配来避免异常。
答案 2 :(得分:3)
这是一种LINQ方式(如果工作表不存在,此方法返回null):
workbook.Worksheets.Cast<Worksheet>().FirstOrDefault(worksheet => worksheet.Name == worksheetName);
答案 3 :(得分:0)
如果您有工作表和工作簿对象,则可以进行父检查
if(sheet.Parent == workbook)