我需要將長文檔(特定於文檔)字符串保存到Excel文檔。 由於Office.Core.CustomDocumentProperty.value的長度限制只有255個字符,因此請告知如何克服此限制,或建議其他方式將數據存儲在Excel文檔中。如何克服自定義文檔屬性大小限制
(根據我的記憶,一個單元格公式只能存儲255字符,所以這不是一個可行的解決方案。)
我需要將長文檔(特定於文檔)字符串保存到Excel文檔。 由於Office.Core.CustomDocumentProperty.value的長度限制只有255個字符,因此請告知如何克服此限制,或建議其他方式將數據存儲在Excel文檔中。如何克服自定義文檔屬性大小限制
(根據我的記憶,一個單元格公式只能存儲255字符,所以這不是一個可行的解決方案。)
只是分裂你的價值爲多個屬性。像這樣的東西會奏效。
private static void WriteCustomDocumentProperty(Workbook workbook, string name, string value)
{
dynamic customDocumentProperties = workbook.CustomDocumentProperties;
var numParts = value.Length/255 + (value.Length%255 != 0 ? 1 : 0);
for (var i = 0; i < numParts; ++i)
{
var part = value.Substring(i*255, Math.Min(255, value.Length - i*255));
customDocumentProperties.Add(name + "." + i, false, MsoDocProperties.msoPropertyTypeString, part);
}
customDocumentProperties.Add(name + ".Count", false, MsoDocProperties.msoPropertyTypeNumber, numParts);
}
private static string ReadCustomDocumentProperty(Workbook workbook, string name)
{
dynamic customDocumentProperties = workbook.CustomDocumentProperties;
var numParts = Convert.ToInt32(customDocumentProperties[name + ".Count"].Value);
var value = new StringBuilder();
for (var i = 0; i < numParts; ++i)
value.Append(customDocumentProperties[name + "." + i].Value);
return value.ToString();
}
根據字符串的大小,這可能會很慢。更好的選擇可能是使用自定義XML部件。
private static void WriteCustomDocumentProperty(Workbook workbook, string name, string value)
{
var ns = "urn:custom-storage:" + name;
var document = new XDocument(new XElement(XName.Get("custom-storage", ns), value));
var xmlValue = document.ToString();
workbook.CustomXMLParts.Add(xmlValue);
}
private static string ReadCustomDocumentProperty(Workbook workbook, string name)
{
var ns = "urn:custom-storage:" + name;
var parts = workbook.CustomXMLParts.SelectByNamespace(ns);
switch (parts.Count)
{
case 0:
return null;
case 1:
return XDocument.Parse(parts[1].XML).Root.Value;
default:
throw new ApplicationException("Duplicate part in workbook.");
}
}
請指出自定義文檔屬性的數量是否有大小限制。 – Carson
我不知道答案是什麼,但測試(花了我1分鐘寫完,你自己可以做的)表明我可以安全地寫出10,000條長度爲255的字符串。如果你需要存儲比這更長的東西,我會留給你進一步測試。 –
僅供參考:您也可以將CustomXMLPart用於此存儲。這些東西沒有尺寸限制(或者很大)。 –
您正在使用什麼版本的互操作的(我高度建議更改名稱空間
"urn:custom-storage:XXX"
獨特和專有的東西,免得你相抵觸運行使用同樣的技術編寫其他軟件)。舊版本用於Excel 2003,其限制爲255個字符。 – jdwengVSTO for Excel 2010.似乎只有前255個字符被存儲... – Carson
您絕對可以在Excel 2010中的單元格中存儲**超過255個字符**文本。[Excel規範和限制文檔](https:/ /support.office.com/en-us/article/Excel-specifications-and-limits-1672b34d-7043-467e-8e27-269d656771c3#ID0EBABAAA=Excel_2010)指出:*「單元格可包含的字符總數:32,767字符「* –