2017-05-30 3 views
1

J'ai un document OpenXML-Excel dans une version spécifique avec des propriétés personnalisées. Quand je regarde la structure xml-de ce fichier, ces propriétés sont stockées sous .\customXml\item2.xml:Obtention de propriétés personnalisées et d'une version avec openXML

(partie de celui-ci)

<xsd:all> 
<xsd:element ref="ns2:Status"/> 
<xsd:element ref="ns2:Duedate" minOccurs="0"/> 
<xsd:element ref="ns2:SpId" minOccurs="0"/> 
<xsd:element ref="ns2:TemplateName" minOccurs="0"/> 
<xsd:element ref="ns2:MailSent" minOccurs="0"/> 
<xsd:element ref="ns2:Company" minOccurs="0"/> 
<xsd:element ref="ns2:WeeklyReminderSent" minOccurs="0"/> 
<xsd:element ref="ns2:DailyReminderSent" minOccurs="0"/> 
</xsd:all> 

En outre, ce fichier a également permis des révisions.

Maintenant je dois lire ces valeurs à l'aide OpenXML (ou ClosedXML)

J'essayées à la suite de ces données reçues. ClosedXML:

var workBook = new ClosedXML.Excel.XLWorkbook("myfile.xlsx"); 
var props = workBook.Properties; 
var custProps = workBook.CustomProperties; 

OpenXML:

using (FileStream fs = new FileStream("myfile.xlsx", FileMode.Open, FileAccess.Read, FileShare.Read)) 
{ 
    using (SpreadsheetDocument doc = SpreadsheetDocument.Open(fs, false)) 
    { 
    var coreprops = doc.CoreFilePropertiesPart; 
    var custprops = doc.CustomFilePropertiesPart; 
    var extprops = doc.ExtendedFilePropertiesPart; 
    } 
} 

Les deux approches ne contenaient aucune des propriétés personnalisées stockées dans l'un des objets (accessoires, custprops, coreprops, extrprops)

Comment Je collectionne ces informations sur OpenXML-Way?

Répondre

-1

En utilisant OpenXML sdk 2.5

Vous obtenez le CustomPropertiesPart mais vous devez obtenir les propriétés de ce:

CustomFilePropertiesPart customPropsPart = doc.CustomFilePropertiesPart; 
DocumentFormat.OpenXml.CustomProperties.Properties props = customPropsPart.Properties; 

foreach (DocumentFormat.OpenXml.CustomProperties.CustomDocumentProperty prop in props) 
{ 
    //do what you want to do... in my case I have only one Text property... 
    String propName = prop.Name; 
    String value = prop.VTLPWSTR.InnerText; 
} 
+0

Mes propriétés sont ** ** PAS stockés à l'intérieur des CustomProperties. J'ai seulement une propriété personnalisée avec le nom "ContentTypeId" là, qui est de "\ docProps \ custom.xml", mais PAS du chemin mentionné ci-dessus –

+0

Avez-vous déjà essayé de fouiner autour de la partie de chaque document? par exemple IEnumerable parts = doc.GetPartsOfType (); –