<html>
<head>
    <title>Books about OpenOffice</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
    <style>
    @import url(print.css);
    </style>
</head>
<body>
	<h1>Books about OpenOffice</h1>
	<p>
		The following list of books may be of interest to OpenOffice users.  Authors and publishers who wish to see their book listed here are encouraged to send these details to our
		public <a href="http://openoffice.apache.org/mailing-lists.html#development-mailing-list">dev mailing list</a> for consideration.  Although we do not endorse books, we are glad to 
		offer this listing as a service to the community.  We would also be interested in interviewing book authors for our <a href="http://blogs.apache.org/ooo/">Apache OpenOffice blog</a>. 
	</p>
	<hr/>
    <a name="books" id="books"></a> 
    <span class='supporthead'>
    Books (Sorted by Date Published)
    </span>
    <div class="support">

        <ul>

			<!-- 2016-->
			 <li class="ooo3x">
                <span class="pubdate">
                2016
                </span>
				<span class='title'>
                Ik wil... metOpenOffice aan het werk
                </span>
                (<a href="http://ipaa.nl/uitgeverij/computerboeken/4-ik-wil-met-openoffice-aan-het-werk">Ipaa Service</a>)
				<b> - Book is in Dutch language only! </b>
                <br />
				In Netherlands language by Gerrit Bruijnes, publisher Ipaa Service, February 2016, ISBN 978-9072445513<br />
				Introductie in alle apps van OpenOffice 4.x. Plus een naslagwerk rond vijftien thema's zoals correspondentie, (e)mailingen,
				presenteren, een c.v. schrijven, gegevensbeheer, financiële administratie en meer. Het boek wordt doorlopend geactualiseerd als een
				nieuwe versie van de software daar aanleiding toe geeft. 

            </li>


			<!-- 2013 -->
			 <li class="ooo3x">
                <span class="pubdate">
                2013
                </span>
                <span class='title'>
                Taming Apache OpenOffice: Getting Started
                </span>
                (<a href="http://www.lulu.com/shop/jean-hollis-weber/taming-apache-openoffice-getting-started/paperback/product-21012480.html">Lulu</a>)
                <br />
                Jean Hollis Weber, Friends of OpenDocument, Inc., May 2013, ISBN 978-1921320323<br />
                This book is for anyone who wants to get up to speed quickly with Apache OpenOffice.org 3.4. It introduces Writer (word processing), Calc (spreadsheets), 
				 Impress (presentations), Draw (vector drawings), Math (equation editor) and Base (database), as well as common features including styles, templates, printing, a gallery of graphics, and macros.
            </li>
			
			<!-- 2012 -->
			 <li class="ooo3x">
                <span class="pubdate">
                2012
                </span>
                <span class='title'>
                Open Office Basic: An Introduction
                </span>
                (<a href="http://www.amazon.com/Open-Office-Basic-James-Steinberg/dp/1481270931">Amazon</a>)
                <br />
                Prof. James Steinberg, Gold Turtle Publishing, December 2012, ISBN 978-1481270939<br />
                This book starts by giving an overview of the language and its structure, before detailing the various commands and functions that are available in OpenOffice.org Basic.
            </li>
			
			
			<li class="ooo3x">
                <span class="pubdate">
                2012
                </span>
                <span class='title'>
                OpenOffice 3.4 Volume I: Writer
                </span>
                (<a href="http://www.amazon.com/OpenOffice-3-4-Writer-Black-White/dp/1480224324/">Amazon</a>)
                <br />
                Christopher N. Cain and Riley W. Walker, Quantum Scientific Publishing, November 2012, ISBN 978-1480224322<br />
                The OpenOffice series provides step-by-step instructions on navigating basic, as well as advanced features within the Apache OpenOffice 3.4.
            </li>
			
			<li class="ooo3x">
                <span class="pubdate">
                2012
                </span>
                <span class='title'>
                OpenOffice 3.4 Volume II: Calc
                </span>
                (<a href="http://www.amazon.com/OpenOffice-3-4-II-Black-White/dp/1480224340">Amazon</a>)
                <br />
                Christopher N. Cain and Riley W. Walker, Quantum Scientific Publishing, November 2012, ISBN 978-1480224346<br />
                The OpenOffice series provides step-by-step instructions on navigating basic, as well as advanced features within the Apache OpenOffice 3.4.
            </li>
			
			<li class="ooo3x">
                <span class="pubdate">
                2012
                </span>
                <span class='title'>
                OpenOffice 3.4 Volume III: Base
                </span>
                (<a href="http://www.amazon.com/OpenOffice-3-4-III-Black-White/dp/1480224367">Amazon</a>)
                <br />
                Christopher N. Cain and Riley W. Walker, Quantum Scientific Publishing, November 2012, ISBN 978-1480224360<br />
                The OpenOffice series provides step-by-step instructions on navigating basic, as well as advanced features within the Apache OpenOffice 3.4.
            </li>
			
			<li class="ooo3x">
                <span class="pubdate">
                2012
                </span>
                <span class='title'>
                OpenOffice 3.4 Volume IV: Impress
                </span>
                (<a href="http://www.amazon.com/OpenOffice-3-4-IV-Impress-Black/dp/1480224383">Amazon</a>)
                <br />
                Christopher N. Cain and Riley W. Walker, Quantum Scientific Publishing, November 2012, ISBN 978-1480224384<br />
                The OpenOffice series provides step-by-step instructions on navigating basic, as well as advanced features within the Apache OpenOffice 3.4.
            </li>
            <!-- 2011 -->
            <li class="ooo3x">
                <span class="pubdate">
                2011
                </span>
                <span class='title'>
                Beginning OpenOffice Calc
                </span>
                (<a href="http://www.amazon.com/Beginning-OpenOffice-Calc-Spreadsheets-Forecasting/dp/1430231599/">Amazon</a>)
                <br />
                Jacek Artymiak, Apress, September 2011, ISBN 978-1430231592<br />
                Covers topics from setting up simple spreadsheets to business forecasting.
            </li>

            <li class="ooo3x">
                <span class="pubdate">
                2011
                </span>
                <span class='title'>
                OpenOffice.org 3.3 Draw Guide
                </span>
                (<a
                href="http://www.lulu.com/product/paperback/openofficeorg-33-draw-guide/16687937">Lulu</a>)
                <br />
                A free PDF version is also available from the <a href="http://wiki.services.openoffice.org/wiki/Documentation">Documentation 
                wiki</a>.<br />
                The OOoAuthors team, Friends of OpenDocument Inc., August 2011, ISBN 978-1921320187.
            </li>

            <li class="ooo3x">
                <span class="pubdate">
                2011
                </span>
                <span class='title'>
                OpenOffice.org 3.3 Math Guide
                </span>
                (<a
                href="http://www.lulu.com/product/paperback/openofficeorg-33-math-guide/16684212">Lulu</a>)
                <br />
                A free PDF version is also available from the <a href="http://wiki.services.openoffice.org/wiki/Documentation">Documentation 
                wiki</a>.<br />
                The OOoAuthors team, Friends of OpenDocument Inc., August 2011.</a>
            </li>

            <li class="ooo3x">
                <span class="pubdate">
                2011
                </span>
                <span class='title'>
                OpenOffice.org 3.3 Impress Guide
                </span>
                (<a
                href="http://www.lulu.com/product/paperback/openofficeorg-33-impress-guide/16113442">Lulu</a>)
                <br />
                A free PDF version is also available from the <a href="http://wiki.services.openoffice.org/wiki/Documentation">Documentation 
                wiki</a>.<br />
                The OOoAuthors team, Friends of OpenDocument Inc., June 2011, ISBN 978-1921320170.
            </li>

            <li class="ooo3x">
                <span class="pubdate">
                2011
                </span>
                <span class='title'>
                OpenOffice.org 3.3 Calc Guide
                </span>
                (<a
                href="http://www.lulu.com/product/paperback/openofficeorg-33-calc-guide/15593269">Lulu</a>)
                <br />
                A free PDF version is also available from the <a href="http://wiki.services.openoffice.org/wiki/Documentation">Documentation 
                wiki</a>.<br />
                The OOoAuthors team, Friends of OpenDocument Inc., May 2011. ISBN 978-1921320149.
            </li>

            <li class="ooo3x">
                <span class="pubdate">
                2011
                </span>
                <span class='title'>
                OpenOffice.org 3.3 Writer Guide
                </span>
                (<a
                href="http://www.lulu.com/product/paperback/openofficeorg-33-writer-guide/14622749">Lulu</a>)
                <br />
                A free PDF version is also available from the <a href="http://wiki.services.openoffice.org/wiki/Documentation">Documentation 
                wiki</a>.<br />
                The OOoAuthors team, Friends of OpenDocument Inc., February 2011, ISBN 978-1921320132.
            </li>
            <!-- 2010 -->
            <li class="ooo3x">
                <span class="pubdate">
                2010
                </span>
                <span class='title'>
                Getting Started with OpenOffice.org 3.3
                </span>
                (<a href="http://www.lulu.com/product/paperback/getting-started-with-openofficeorg-33/15160721">Lulu</a>)
                <br />
                A free PDF version is also available from the <a href="http://wiki.services.openoffice.org/wiki/Documentation">Documentation 
                wiki</a>.<br />
                The OOoAuthors team, Friends of OpenDocument Inc., November 2010, ISBN 978-1921320118.
            </li>

            <li>
                <span class="pubdate">
                2010
                </span>
                <span class='title'>
                OpenOffice Basic Crash Course
                </span>
                (<a href="http://www.lulu.com/product/paperback/openofficeorg-basic-crash-course/12471538">Lulu</a>)
                <br />
                Learn how to use the OpenOffice.org Basic programming language to automate the 
                suite's applications and create nifty solutions. No programming experience 
                required.<br />
                Dmitri Popov, 2010, ISBN 978-8799306800.
            </li>

            <li>
                <span class="pubdate">
                2010
                </span>
                <span class='title'>
                Writer for Writers and Advanced Users</a>
                </span>
                (<a href="http://www.lulu.com/product/paperback/writer-for-writers-and-advanced-users/6520648">Lulu</a>)
                <br />
                Learn how to design book templates, format bibliographies, digitally sign 
                documents and much, much more. <br>
                Dmitri Popov, 2010, ISBN: 978-1411680388.
            </li>

            <li class="pubdate">
                <span class="pubdate">
                2010
                </span>
                <span class='title'>
                Sun Report Builder Guidebook
                </span>
                (<a
                href="http://www.lulu.com/product/paperback/sun-report-builder-guidebook/6510081">Lulu</a>)
                <br />
                Learn how to use the powerful <a href="http://extensions.openoffice.org/project/reportdesign">Sun 
                Report Builder extension</a> that works with a variety of databases including 
                OpenOffice Base.<br />
                Dmitri Popov, 2010.
            </li>

            <li class="pubdate">
                <span class="pubdate">
                2010
                </span>
                <span class='title'>
                Writer's Tools Manual
                </span>
                (<a
                href="http://www.lulu.com/product/paperback/sun-report-builder-guidebook/6510081">Lulu</a>)
                <br />
                Covers all the important topics to help you to get the most out of the Writer's 
                Tools extension for OpenOffice.org.<br />
                Dmitri Popov, 2010.
            </li>
            <!-- 2009 -->
            <li class="ooo3x">
                <span class="pubdate">
                2009
                </span>
                <span class='title'>
                Self-publishing using OOo3 Writer
                </span>
                (<a href="http://www.lulu.com/content/7801648">Lulu</a>) <br />
                How to use free software to write, design, and create PDFs for print-on-demand 
                books.<br />
                Jean Hollis Weber, October 2009, ISBN 978-1921320071.
            </li>
            <!-- 2008 -->
            <li>
                <span class="pubdate">
                2008
                </span>
                <span class='title'>
                Quick Start Cards
                </span>
                (<a href="http://www.brainstorminc.com/openoffice.org-training/openoffice.org-training.html">BrainStorm, 
                Inc.</a>)<br />
                6-page, tri-folded cards for a quick reference on basic and intermediate tasks 
                in Writer, Calc and Impress.
            </li>

            <li>
                <span class="pubdate">
                2008
                </span>
                <span class='title'>
                Beginning OpenOffice 3: From Novice to Professional
                </span>
                (<a href="http://www.amazon.com/Beginning-OpenOffice-Novice-Professional/dp/1430215909/">Amazon</a>)
                <br />
                Andy Channelle, 2008, Apress, ISBN 978-1430215905.
            </li>

            <li>
                <span class="pubdate">2006</span>
                <span class='title'>
                <a href="http://books.evc-cit.info/">OASIS OpenDocument Essentials--Using OASIS 
                OpenDocument XML</a>
                </span>
                Free introduction to the XML that serves as the native internal format of 
                OpenOffice.org, an open source, cross-platform office suite. 
                <br />
                J. David Eisenberg, 2006.
            </li>


        </ul>
    </div>
</body>
</html>
