我正在嘗試使用實體框架數據創建Excel 2010工作簿(EF不是問題)。我或多或少地遵循以下代碼:CodeProject link保存OpenXML文檔時操作共享字符串表
在上面的鏈接中創建文本單元格的代碼將所有文本創建爲內嵌字符串。爲了遵循最佳實踐(至少據我瞭解OpenXML),我想將其更改爲使用共享字符串表,因此我正在查找代碼here以提供幫助。
爲此,我從工作簿中抓取Shared strings表,添加我的字符串,然後保存表。我的代碼:
private static int InsertSharedStringItem(WorkbookPart wbPart, string value)
{
int index = 0;
bool found = false;
var stringTablePart = wbPart.GetPartsOfType<SharedStringTablePart>()
.FirstOrDefault();
if (stringTablePart == null)
{
// Create it.
stringTablePart = wbPart.AddNewPart<SharedStringTablePart>();
}
var stringTable = stringTablePart.SharedStringTable;
if (stringTable == null)
{
stringTable = new SharedStringTable();
}
foreach (SharedStringItem item in stringTable.Elements<SharedStringItem>())
{
if (item.InnerText == value)
{
found = true;
break;
}
index += 1;
}
if (!found)
{
stringTable.AppendChild(new SharedStringItem(new Text(value)));
stringTable.Save();
}
return index;
}
我突出(顯然分離)的問題,區)
不幸的是我在得到一個InvalidOperationException: Cannot save DOM tree since this element is not associated with an OpenXmlPart
stringTable.Save();線
我試圖通過改變來糾正這一點,如果(!找到)阻止到:
if (!found)
{
stringTable.AppendChild(new SharedStringItem(new Text(value)));
wbPart.SharedStringTablePart.SharedStringTable = stringTable;
stringtable.Save();
}
當代碼擊中它返回一個UnhandledArgument Exception: Cannot set the given root element to this part. The given part root element has already been associated with another OpenXmlPart.
在這一點上新的生產線,我我不知道我的stringtable
是否與OpenXmlPart相關聯。
有人可以看到我做錯了什麼,或者指出一個更好的方法來做到這一點?