2012-06-23 105 views
2

我需要閱讀Worksheet.CustomProperies。有什麼方法可以讀取這些屬性?Worksheet.CustomProperites OpenXML

我也曾嘗試使用

XmlDocument xlDoc = ws.WorksheetXml; 

得到一個簿和工作表中的XmlDocument給我:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> 
<dimension ref="A3:K24" /> 
<sheetViews> 
<sheetView tabSelected="1" workbookViewId="0"><selection activeCell="H14" sqref="H14" /></sheetView> 
</sheetViews> 
<sheetFormatPr defaultRowHeight="15" /> 
<cols></cols><sheetData /> 
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" /> 
<pageSetup orientation="portrait" horizontalDpi="4294967293" verticalDpi="4294967293" r:id="rId2" /> 
**<customProperties><customPr name="My_CustomProperty" r:id="rId3" /></customProperties>** 
</worksheet> 

我可以看到一個CustomProperty的存在,但不能夠看到CustomProperty的價值。當我轉到CustomProperty bin文件(Zip xlsx並提取內容)時,值就在那裏。

我已經上傳文檔here

+0

你可以上傳文件的地方嗎? – emd

+0

已上傳到此:https://www.dropbox.com/s/ljph3nnbmddycyn/Users_Template_12_22_Template.xlsx – Cannon

回答

1

我不熟悉這些自定義屬性,但這裏是使用最新版本的EPPlus從你的樣本文檔中提取customProperty1.bin文件的內容的一種方法:

using (ExcelPackage p = new ExcelPackage(new FileInfo(@"C:\Users_Template_12_22_Template.xlsx"))) 
{ 
    var parts = p.Package.GetParts(); 
    foreach (var part in parts) 
    { 
     if (part.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty") 
     { 
      using (var stream = part.GetStream()) 
      { 
       byte[] data = new byte[stream.Length]; 
       stream.Read(data, 0, (int)stream.Length); 
       stream.Close(); 

       string customPropertyInfo = System.Text.Encoding.Unicode.GetString(data); 
      } 
     } 
    } 
} 

如果你知道customProperty1.bin名/文件位置,你可以使用GetPart(訪問),而不是GETPARTS():

var u = new Uri("/xl/customProperty1.bin", UriKind.Relative); 
var part = p.Package.GetPart(u);    

請注意,您需要添加對WindowsBase.dll的引用(在添加引用中的.NET選項卡下)才能使用與打包相關的方法。

+0

是的。你提到的解決方案讀取customProperty.bin的內容,但後來引發了獲取CustomProperty名稱的問題。我需要獲取CustomPropertyName和相關的值。是否有任何具有此名稱 - 值關係的XML的一部分,即.customProperty1.bin屬於X CustomProeprty名稱? – Cannon

+0

在你的示例文件中,我甚至不確定你對CA_Users_16有什麼樣的價值,但是如果你弄清楚內容是如何分隔的,你可以以某種方式獲得這個值。這裏是我從示例文件中看到的:用戶 - 用戶| 16 | 4 | False | True | False | CA_Users_16 | 20 | UserID:0,名字:3,RoleID:5,RoleIDs:6,IsActive:8,IsRememberPassword: 10 – Gloopy

+0

在我的示例中,CA_Users_16是CustomProperty Name。而'|'分隔的字符串是它的相關值。在客戶端的VSTO中,我可以通過Worksheet和Get CustomProperty對象來遍歷CustomProperties對象,並給出了名稱和值。但我試圖在服務器上實現辦公自動化,因爲我無法使用VSTO。蠻力的方法是獲取我正在做的事情。然後使用您的方法獲取所有bin數據。再進行一次映射將名稱映射到值,這不會是一個解決方案。 – Cannon