Generating Word and Excel Documents Using the

advertisement
OPEN XML SDK FOR
MICROSOFT OFFICE
John DeVight
TechGate 2013 – Reston, VA
September 21, 2013
INTRODUCTIONS
• John DeVight
• Herndon, Virginia
• Senior Principal Software Engineer at ManTech
• Telerik MVP
• John.DeVight@gmail.com
AGENDA
• About the Open XML SDK Library (2 minutes)
• “Telerik Products” Demo (3 minutes)
• Getting Started (5 minutes)
• Installing the Open XML SDK Library
• Reference the Open XML SDK Library
• Open XML SDK 2.0 Productivity Tool
• Creating Word Documents (30 minutes)
• Using “Open XML SDK 2.0 Productivity Tool for MS Office”
• Using Bookmarks
• Using XSLT
• Creating Excel Documents (10 minutes)
• Using “Open XML SDK 2.0 Productivity Tool for MS Office”
• Using the SDK Directly
• Using SpreadsheetLight
ABOUT THE OPEN XML SDK LIBRARY:
WHAT IS IT?
• “The Open XML SDK 2.0 simplifies the task of manipulating Open XML
packages and the underlying Open XML schema elements within a
package. The Open XML SDK 2.0 encapsulates many common tasks
that developers perform on Open XML packages, so that you can
perform complex operations with just a few lines of code.” 1
• An Open XML Package is a zip file containing XML documents,
images and other files needed to display the document in a Microsoft
Office application.
1. http://msdn.microsoft.com/en-us/library/office/bb448854(v=office.14).aspx
50 min
“TELERIK PRODUCTS” DEMO
GETTING STARTED:
INSTALLING THE OPEN XML SDK LIBRARY
• Open XML SDK 2.0 for Microsoft Office Download
• Install the “Open XML SDK” from the OpenXMLSDKv2.msi
installer.
• Install the “Open XML SDK Productivity Tool for Microsoft
Office” from the OpenXMLSDKTool.msi installer.
5 min
45 min
GETTING STARTED:
REFERENCE THE OPEN XML SDK LIBRARY
• In the .NET application, reference:
Assembly
Visual Studio 2012
DocumentFormat.OpenXml
Assemblies -> Extensions
WindowsBase
Assemblies -> Framework
*WordLite
Browse
** SpreadsheetLight
Browse
* WordLite is a class library that I created to make it easier to work with Word
Documents.
** SpreadsheetLight is freely available under the MIT License that simplifies using the
Open XML SDK Library when creating Excel Documents.
GETTING STARTED:
OPEN XML SDK 2.0 PRODUCTIVITY TOOL
• Open Microsoft Office document and generate C# code
to create the same document.
• View the Open XML SDK Documentation.
CREATING WORD DOCUMENTS:
OPTIONS
• Open XML SDK 2.0 Productivity Tool for MS Office
• Bookmarks
• XSLT
10 min
40 min
CREATING WORD DOCUMENTS:
USING “OPEN XML SDK 2.0 PRODUCTIVITY TOOL”
• Pros
• All the code is generated for you.
• Fast and Easy.
• Cons
• The tool generates a lot of code.
• Every change requires the code to be updated and
deployed.
CREATING WORD DOCUMENTS:
USING “OPEN XML SDK 2.0 PRODUCTIVITY TOOL”
• Create and Save Word Document
• Open the Word Document using “Open XML SDK 2.0 Productivity Tool”
• In “Document Explorer”, right-click on root and select “Reflect Code”.
• Create console app in Visual Studio. Add references to required
assemblies.
• Create new class for the “generated code”.
• Instantiate class and call CreatePackage from Main.
CREATE WORD DOCUMENTS:
USING BOOKMARKS
• Pros
• Easy to create and update the “template” document
without having to write code.
• The end user could create their own “template”
documents.
• Cons
• Requires code to know about all the bookmarks.
15 min
35 min
CREATE WORD DOCUMENTS:
USING BOOKMARKS: “REAL WORLD” IMPLEMENTATION
• Application for police departments to create Wanted
Posters.
CREATE WORD DOCUMENTS:
USING BOOKMARKS – CREATE “TEMPLATE” DOCUMENT
• Create Word Document
• Insert Bookmark
• Insert -> Bookmark
• Give the bookmark a name
• Click “Add” button
• Making Bookmarks visible
• File -> Options
• Advanced -> Show document content
• Show bookmarks
CREATE WORD DOCUMENTS:
USING BOOKMARKS
• Demo Bookmarks in a Word Document
CREATE WORD DOCUMENTS:
USING BOOKMARKS
• Header and Footer Bookmarks
• Create Header
• Insert -> Header
• Insert Bookmark
• Insert -> Bookmark
• Give the bookmark a name
• Click “Add” button
• Design -> Close Header and Footer
20 min
30 min
CREATE WORD DOCUMENTS:
USING BOOKMARKS AND WORDLITE
• Open a word document with Bookmarks.
• Replace bookmarks with text.
• Replace image.
• Get the header and replace bookmark with text.
• Get the footer and replace bookmark with text.
CREATE WORD DOCUMENTS:
USING BOOKMARKS
• Identifying the header and footer
• Open the document in the “Open XML SDK 2.0 Productivity Tool”.
• Open each header and footer and look for the bookmark.
• Identifying the image name (option 1)
• Open the document in the “Open XML SDK 2.0 Productivity Tool”
• Locate the image.
• Identifying the image name (option 2)
• Change the extension on the Word document to .zip
• Extract the contents of the .zip file and look at each image.
CREATE WORD DOCUMENTS:
USING BOOKMARKS AND WORDLITE
• Review WordController.ProductBookmarks Controller Action.
CREATE WORD DOCUMENTS:
USING BOOKMARKS AND WORDLITE
• Add bookmark to the document.
• Replace bookmark with image.
doc.Bookmarks["Image"].ReplaceWithImage(
@“C:\Images", “kendo.png”, "image/png");
25 min
25 min
CREATE WORD DOCUMENTS:
USING BOOKMARKS
• Demo Allowing End User to Create Templates
CREATING WORD DOCUMENTS:
USING XSLT
• Pros
• Templates can be changed without having to recompile.
• .NET code is simplified.
• Good approach when the document format does not
change much over time.
• Cons
• Templates can get a bit complicated to manipulate.
30 min
20 min
CREATING WORD DOCUMENTS:
USING XSLT : “REAL WORLD” IMPLEMENTATION
• Creating Government Contracting Documents
CREATING WORD DOCUMENTS:
REVIEW OPEN XML PACKAGE DEFINITION
• An Open XML Package is a zip file containing XML
documents, images and other files needed to display the
document in a Microsoft Office application.
CREATING WORD DOCUMENTS:
USING XSLT
• Create Word Document
• Put “placeholders” for values
• Save document
• Create XSLT file
•
•
•
•
Rename .docx to .zip
Open zip file and get the word/document.xml file
Rename with .xslt extension
Replace:
• <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
• With:
• <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
•
<xsl:template match=“/">
• Add to the end of the file:
•
</xsl:template>
• </xsl:stylesheet>
CREATING WORD DOCUMENTS:
USING XSLT
• products.xml
<productList>
<products>
<product id=“…“ name=“…“ summary=“...“
image=“…“ price=“…“ overview=“..." />
</products>
</productList>
• XPath editor - http://qutoric.com/xmlquire/
CREATING WORD DOCUMENTS:
USING XSLT
• <xsl:value-of select=“”/>
• <xsl:if test=“”></xsl:if>
• <xsl:for-each select=“”></xsl:for-each>
CREATING WORD DOCUMENTS:
USING XSLT
• Demo Implementing XSL Template.
• Review WordController.ProductXslt Controller Action.
CREATING WORD DOCUMENTS:
USING XSLT
• Adding C# Support to XSLT
• xmlns:msxsl="urn:schemas-microsoft-com:xslt“
• xmlns:cs="urn:custom-csharp“
<msxsl:script language="C#" implements-prefix="cs">
<![CDATA[
public string FormatPrice(int price) {
return string.Format("{0:c0}", price);
}
]]>
</msxsl:script>
35 min
15 min
CREATING WORD DOCUMENTS:
USING XSLT
• Demo Implementing C# Support to XSLT
• Review WordController.ProductXsltWithScript Controller
Action.
CREATING WORD DOCUMENTS:
USING XSLT
• Adding Header and Footer
•
•
•
•
•
Create document with header and footer
Rename .docx to .zip
Open zip file and get the word/header.xml file and word/footer.xml file
Rename with .xslt extension
Replace:
• <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
• With:
• <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
•
<xsl:template match=“/">
• Add to the end of the file:
•
</xsl:template>
• </xsl:stylesheet>
CREATING WORD DOCUMENTS:
USING XSLT
• Review WordController.ProductXsltWithHeaderFooter
Controller Action.
CREATING EXCEL DOCUMENTS:
OPTIONS
• Open XML SDK 2.0 Productivity Tool for MS Office
• Using the SDK
• Using SpreadsheetLight
40 min
10 min
CREATING EXCEL DOCUMENTS:
“OPEN XML SDK 2.0 PRODUCTIVITY TOOL”
• Create and Save Excel Document
• Open the Excel Document using “Open XML SDK 2.0
Productivity Tool”
• In “Document Explorer”, right-click on root and select
“Reflect Code”.
• Create console app in Visual Studio. Add references to
required assemblies.
• Create new class for the “generated code”.
• Instantiate class and call CreatePackage from Main.
CREATING EXCEL DOCUMENTS:
USING THE SDK
• Code Project article: Creating basic Excel workbook with
Open XML by Mika Wendelius
CREATING EXCEL DOCUMENTS:
USING SPREADSHEETLIGHT
• http://spreadsheetlight.com/
• “SpreadsheetLight is an open source spreadsheet
library/component for .NET Framework written in C#. It is
freely available and uses the MIT License. It generates Open
XML spreadsheets that are compatible with Microsoft Excel
2007/2010/2013 (and even LibreOffice Calc).”
CREATING EXCEL DOCUMENTS:
USING SPREADSHEETLIGHT
• Features used:
• Setting Document Properties
• Rename Worksheet
• Set Column Heading Styles
• Set Column Widths
• Format Currency Cells
• Define Formulas
• Create Charts
• Protect Worksheet
CREATING EXCEL DOCUMENTS:
USING SPREADSHEETLIGHT
• Demo using SpreadsheetLight
• Review ExcelController.SalesByYear Controller Action.
CREATING EXCEL DOCUMENTS:
USING SPREADSHEETLIGHT
• Adding a Chart
• SLChart
• CreateChart – define the range for the data to be used.
• SetChartType – set the type of chart to create
• SetChartPosition – where the chart will appear in the worksheet
• SetChartStyle – style for the chart.
• SLDocument.InsertChart – insert the chart into the current
worksheet.
45 min
5 min
CREATING EXCEL DOCUMENTS:
USING SPREADSHEETLIGHT
• Demo creating Chart
• Review ExcelController.SalesByYearWithChart Controller Action.
PRESENTATION AND SOURCE CODE
• Where can I find the presentation and source code?
• www.aspnetwiki.com
QUESTIONS
FUTURE PRESENTATIONS
• Creating MVC Extensions for the jQuery UI Library that can be used with the
Razor and ASPX (WebForms) View Engines.
• Creating mobile application games using the “Crafty” JavaScript Gaming
Engine and PhoneGap.
• Creating Desktop/Mobile/Web Applications with HTML5 / JavaScript, node.js,
Kendo UI, and node-webkit using the same code base.
50 min
An email will be sent to all attendees on Monday, September 23
announcing location of slides received from presenters.
Download