c# – 打开XML SDK 2.0,通过名称访问excel 2010工作表

我有一个Excel 2010电子表格,有3个工作表名为Sheet1,Sheet2和Sheet3.

我试图通过名称获得对工作表的引用.

我使用的代码

using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(FileName,true))
{
    //Access the main Workbook part,which contains all references 
    WorkbookPart workbookPart = myWorkbook.WorkbookPart;

    WorksheetPart worksheetPart = workbookPart.WorksheetParts.Last(); 

    // this gives me Sheet1
    SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>();
}

我试图获得对Sheet2的引用,但是我找不到一个方法来做到这一点.

我越来越近了,但我还没有:

var x = workbookPart.Workbook.Sheets.Where(s=> s.GetAttribute("name","").Value == "Sheet2").FirstOrDefault();

这让我参考了工作表,但不是表格上的数据

谢谢

解决方法

你真正想要的是WorksheetPart,它是包含您正在寻找的SheetData.在“工作簿”下抓取工作表将只会提供有关工作表的某些元数据.下面是一个关于如何抓取WorksheetPart的例子(可以随意添加错误检查,因为我认为通过调用First而不是FirstOrDefault已经存在sheetName)
public WorksheetPart GetWorksheetPart(WorkbookPart workbookPart,string sheetName)
{
    string relId = workbookPart.Workbook.Descendants<Sheet>().First(s => sheetName.Equals(s.Name)).Id;
    return (WorksheetPart)workbookPart.GetPartById(relId);
}

然后只需使用上面的代码获取正确的SheetData参考,您就可以从中找到所需的数据.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...