我正在编写和扩展OpenXML,如示例中所示。我想避免必须将WorkbookPart作为参数传递。有什么方法可以直接从行中获取WorkbookPart吗?
public static string GetCellTextValue(this Row row, WorkbookPart workbookPart, string column)
{
var cells = row.Elements<Cell>();
var cell = cells.Where(p => p.CellReference == column + row.RowIndex.ToString()).FirstOrDefault();
if (cell.DataType != null)
{
if (cell.DataType == CellValues.SharedString)
{
int id = -1;
if (Int32.TryParse(cell.InnerText, out id))
{
SharedStringItem item = workbookPart.SharedStringTablePart.SharedStringTable.Elements<SharedStringItem>().ElementAt(id);
if (item.Text != null)
{
return item.Text.Text;
}
else if (item.InnerText != null)
{
return item.InnerText;
}
else if (item.InnerXml != null)
{
return item.InnerXml;
}
}
}
}
return string.Empty;
}
[不幸的是,Open XML SDK的强类型类(例如Workbook
,Worksheet
,Row
)都没有指向OpenXmlPart
的属性(例如WorkbookPart
,WorksheetPart
)包含在其中或与其直接容器有关的任何其他部分。除非您以其他方式修改API,否则您将必须传递WorkbookPart
。