If somebody like the post and its helpful in your work then, add comments.

Friday, July 17, 2009

Open XML : Retrieving Word Content Based on Styles

To find or retrive content style based conetent from created word document:

Follow this code:

public static string paraStyle = "Heading1";
public static string paraStyle2 = "Heading2";

using (WordprocessingDocument WorDocument = WordprocessingDocument.Create(@"c:\Test.docx", WordprocessingDocumentType.Document))
{
// Add a new main document part.
MainDocumentPart mainPart = WorDocument.AddMainDocumentPart();
//Create Document tree for simple document.
mainPart.Document = new Document();
//Create Body (this element contains other elements that we want to include
Body body = new Body();
mainPart.Document.Append(body);
// Save changes to the main document part.
mainPart.Document.Save();


int countHeading1= mainPart.ParagraphsByStyleName(paraStyle).Count();
int countHeading2 = mainPart.ParagraphsByStyleName(paraStyle2).Count();
}
}


//Content Serch code.

#region Content

public static string GetStyleIdFromStyleName(MainDocumentPart mainPart, string styleName)
{
StyleDefinitionsPart stylePart = mainPart.StyleDefinitionsPart;
string styleId = stylePart.Styles.Descendants <StyleId >().Where
(s = > s.Val.Value.Equals(styleName))
.Select(n = > ((Style)n.Parent).StyleId).FirstOrDefault();
return styleId ?? styleName;
}
public static IEnumerable <Paragraph > ParagraphsByStyleName(this MainDocumentPart mainPart, string styleName)
{
string styleId = GetStyleIdFromStyleName(mainPart, styleName);
IEnumerable <Paragraph > paraList =
mainPart.Document.Descendants <Paragraph >()
.Where(p = > IsParagraphInStyle(p, styleId));
return paraList;
}

private static bool IsParagraphInStyle(Paragraph p, string styleId)
{
ParagraphProperties pPr = p.GetFirstChild <ParagraphProperties >();
if (pPr != null)
{
ParagraphStyleId paraStyle = pPr.ParagraphStyleId;
if (paraStyle != null)
{
return paraStyle.Val.Value.Equals(styleId);
}
}
return false;
}
public static IEnumerable <Run > RunsByStyleName(this MainDocumentPart mainPart, string styleName)
{
string styleId = GetStyleIdFromStyleName(mainPart, styleName);
IEnumerable <Run > runList = mainPart.Document.Descendants <Run >()
.Where(r = > IsRunInStyle(r, styleId));
return runList;
}
private static bool IsRunInStyle(Run r, string styleId)
{
RunProperties rPr = r.GetFirstChild <RunProperties >();
if (rPr != null)
{
RunStyleId runStyle = rPr.RunStyleId;
if (runStyle != null)
{
return runStyle.Val.Value.Equals(styleId);
}
}
return false;
}
//For Table style
public static IEnumerable <Table > TablesByStyleName(this MainDocumentPart mainPart, string styleName)
{
string styleId = GetStyleIdFromStyleName(mainPart, styleName);
IEnumerable <Table > tableList = mainPart.Document.Descendants <Table >()
.Where(t = > IsTableInStyle(t, styleId));
return tableList;
}
private static bool IsTableInStyle(Table tbl, string styleId)
{
TableProperties tblPr = tbl.GetFirstChild <TableProperties >();
if (tblPr != null)
{
TableStyleId tblStyle = tblPr.TableStyleId;
if (tblStyle != null)
{
return tblStyle.Val.Value.Equals(styleId);
}
}
return false;
}

#endregion

No comments:

Post a Comment