从行中获取 WorkbookPart
Getting WorkbookPart from row
我正在为示例中所示的 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 的强类型 类 的 none(例如,Workbook
、Worksheet
、Row
) 的属性指向它们所在的 OpenXmlPart
(例如,WorkbookPart
、WorksheetPart
)或与其直接容器相关的任何其他部分。除非您以其他方式修改 API,否则您将不得不通过 WorkbookPart
。
我正在为示例中所示的 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 的强类型 类 的 none(例如,Workbook
、Worksheet
、Row
) 的属性指向它们所在的 OpenXmlPart
(例如,WorkbookPart
、WorksheetPart
)或与其直接容器相关的任何其他部分。除非您以其他方式修改 API,否则您将不得不通过 WorkbookPart
。