Interop 检查excel中是否存在工作表
如何使用互操作检查excel中是否存在工作表。我尝试了以下方法,但如果没有,它会抛出一个COMException。。有没有比实际查看异常更好的方法Interop 检查excel中是否存在工作表,interop,excel-2007,Interop,Excel 2007,如何使用互操作检查excel中是否存在工作表。我尝试了以下方法,但如果没有,它会抛出一个COMException。。有没有比实际查看异常更好的方法 Worksheet sheet = null; Sheets worksheets = some; sheet = (Worksheet)worksheets.get_Item("sheetName"); if(sheet!=null) { //do something } 编辑: 谢谢大家的意见 我写了一个函数
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;
}
private Dictionary GetSheetsMap(工作表)
{
如果(工作表==null)
抛出新的ArgumentNullException(“工作表”);
字典映射=新字典(StringComparer.CurrentCultureInoRecase);
foreach(工作表中的工作表)
{
地图。添加(s.名称,s);
}
返回图;
}
我使用它如下
Dictionary<string, Worksheet> sheetMap = GetSheetsMap(worksheets);
Worksheet sheet = null;
if (sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate, out sheet))
{
//found it.
}
else
{
// not
}
Dictionary sheetMap=GetSheetsMap(工作表);
工作表=空;
if(sheetMap.TryGetValue(ExtendedTemplateManager.BasicUserTemplate,表外))
{
//找到了。
}
其他的
{
//不是
}
您有工作簿对象吗?如果是这样,您可以遍历工作簿.Sheets数组并检查每个工作表的Name属性
foreach (Sheet sheet in workbook.Sheets)
{
if (sheet.Name.equals("sheetName"))
{
//do something
}
}
首先考虑一个异常是否真的合适。您希望有一张具有特定名称的工作表。如果不是,你还能继续运行你的程序吗
如果可以,可以通过迭代sheets集合并在Name属性上查找匹配项来避免异常。以下是一种LINQ方法(如果工作表不存在,此方法将返回null):
workbook.Worksheets.Cast().FirstOrDefault(工作表=>worksheet.Name==worksheetName);
如果您有工作表和工作簿对象,您可以进行家长检查
如果(sheet.Parent==工作簿)我必须根据是否存在工作表来实现逻辑。
workbook.Worksheets.Cast<Worksheet>().FirstOrDefault(worksheet => worksheet.Name == worksheetName);