summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorh-hishida <h-hishida@quartetcom.co.jp>2015-04-28 09:45:00 +0900
committerh-hishida <h-hishida@quartetcom.co.jp>2015-04-28 09:45:00 +0900
commit373ae12ca5db9837f84fef44f3f7077e766aca08 (patch)
treec515f2cccceaa886282ac40f89785da072a3627e
downloadPHPExcelFixer.StyleFixer-373ae12ca5db9837f84fef44f3f7077e766aca08.zip
PHPExcelFixer.StyleFixer-373ae12ca5db9837f84fef44f3f7077e766aca08.tar.gz
PHPExcelFixer.StyleFixer-373ae12ca5db9837f84fef44f3f7077e766aca08.tar.bz2
initial commit
-rw-r--r--.gitignore12
-rw-r--r--.php_cs20
-rw-r--r--.travis.yml15
-rw-r--r--Licence.txt24
-rw-r--r--README.md4
-rw-r--r--build.xml175
-rw-r--r--composer.json28
-rw-r--r--composer.lock436
-rwxr-xr-xphpcs.xml19
-rw-r--r--phpmd.xml40
-rw-r--r--phpunit.xml.dist19
-rw-r--r--src/Plugin/CellStyleFixer.php120
-rw-r--r--src/Plugin/ConditionalFormatFixer.php77
-rw-r--r--src/Plugin/Plugin.php10
-rw-r--r--src/StyleFixer.php77
-rw-r--r--src/Util/Book.php146
-rw-r--r--src/Util/Sheet.php70
-rw-r--r--src/Util/XmlNamespace.php16
-rw-r--r--tests/Plugin/BasePluginTest.php49
-rw-r--r--tests/Plugin/CellStyleFixerTest.php67
-rw-r--r--tests/Plugin/ConditionalFormatFixerTest.php44
-rw-r--r--tests/StyleFixerTest.php133
-rw-r--r--tests/Util/BookTest.php90
-rw-r--r--tests/Util/SheetTest.php38
-rw-r--r--tests/bootstrap.php4
-rw-r--r--tests/xml/output/xl/_rels/workbook.xml.rels5
-rw-r--r--tests/xml/output/xl/styles.xml2
-rw-r--r--tests/xml/output/xl/workbook.xml10
-rw-r--r--tests/xml/output/xl/worksheets/sheet1.xml8
-rw-r--r--tests/xml/output/xl/worksheets/sheet2.xml12
-rw-r--r--tests/xml/template/xl/_rels/workbook.xml.rels6
-rw-r--r--tests/xml/template/xl/drawings/drawing1.xml68
-rw-r--r--tests/xml/template/xl/sharedStrings.xml5
-rw-r--r--tests/xml/template/xl/styles.xml2
-rw-r--r--tests/xml/template/xl/workbook.xml12
-rw-r--r--tests/xml/template/xl/worksheets/_rels/sheet1.xml.rels4
-rw-r--r--tests/xml/template/xl/worksheets/_rels/sheet2.xml.rels6
-rw-r--r--tests/xml/template/xl/worksheets/_rels/sheet3.xml.rels5
-rw-r--r--tests/xml/template/xl/worksheets/sheet1.xml8
-rw-r--r--tests/xml/template/xl/worksheets/sheet2.xml12
40 files changed, 1898 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..da98356
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+nbproject
+._*
+.~lock.*
+.buildpath
+.DS_Store
+.idea
+.project
+.settings
+cache.properties
+build
+vendor/
+composer.phar
diff --git a/.php_cs b/.php_cs
new file mode 100644
index 0000000..141f75b
--- /dev/null
+++ b/.php_cs
@@ -0,0 +1,20 @@
+<?php
+$config = Symfony\CS\Config\Config::create();
+$config->level(null);
+$config->fixers(
+ array(
+ 'indentation',
+ 'linefeed',
+ 'trailing_spaces',
+ 'short_tag',
+ 'visibility',
+ 'php_closing_tag',
+ 'braces',
+ 'function_declaration',
+ 'psr0',
+ 'elseif',
+ 'eof_ending',
+ 'unused_use',
+ )
+);
+return $config;
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..ef48a65
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,15 @@
+language: php
+
+php:
+ - 5.4
+ - 5.5
+ - 5.6
+ - hhvm
+
+script:
+ - composer install --prefer-source
+ - phpunit --coverage-text --coverage-clover=coverage.clover
+
+after_script:
+ - wget https://scrutinizer-ci.com/ocular.phar
+ - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
diff --git a/Licence.txt b/Licence.txt
new file mode 100644
index 0000000..983f17b
--- /dev/null
+++ b/Licence.txt
@@ -0,0 +1,24 @@
+Copyright (c) 2015, Hiromi Hishida
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the <organization> nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0f658d3
--- /dev/null
+++ b/README.md
@@ -0,0 +1,4 @@
+# PHPExcel.StyleFixer
+
+Fixes cell styles broken through [PHPExcel](https://github.com/phpoffice/phpexcel) read & write process.
+
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..24a53ea
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project default="build">
+ <property name="composer.path" value="${basedir}/composer.phar" />
+ <available property="composer.exists" file="${composer.path}" />
+
+ <target name="build" depends="require, prepare, test, report"/>
+ <target name="build-parallel" depends="prepare,lint,tools-parallel,phpunit,phpcb"/>
+ <target name="test" depends="lint,phpunit"/>
+ <target name="report" depends="phploc,pdepend,phpmd-ci,phpcs-ci,phpcpd,phpcb,apigen"/>
+
+ <target name="require" depends="composer" description="Install QA tools">
+ <exec executable="php">
+ <arg value="composer.phar" />
+ <arg value="global" />
+ <arg value="require" />
+ <arg value="covex-nn/phpcb:*" />
+ <arg value="fabpot/php-cs-fixer:*" />
+ <arg value="apigen/apigen:~4.0@dev" />
+ <arg value="phpmd/phpmd:dev-master" />
+ <arg value="phpunit/phpunit:*" />
+ <arg value="squizlabs/php_codesniffer:*" />
+ <arg value="sebastian/phpcpd:*" />
+ <arg value="mayflower/php-codebrowser:*" />
+ <arg value="sensiolabs/security-checker:*" />
+ <arg value="phploc/phploc:*" />
+ </exec>
+ </target>
+
+ <target name="tools-parallel" description="Run tools in parallel">
+ <parallel threadCount="2">
+ <sequential>
+ <antcall target="pdepend"/>
+ <antcall target="phpmd-ci"/>
+ </sequential>
+ <antcall target="phpcpd"/>
+ <antcall target="phpcs-ci"/>
+ <antcall target="phploc"/>
+ </parallel>
+ </target>
+
+ <target name="clean" description="Cleanup build artifacts">
+ <delete dir="${basedir}/build/api"/>
+ <delete dir="${basedir}/build/code-browser"/>
+ <delete dir="${basedir}/build/coverage"/>
+ <delete dir="${basedir}/build/logs"/>
+ <delete dir="${basedir}/build/pdepend"/>
+ </target>
+
+ <target name="prepare" depends="clean, vendor" description="Prepare for build">
+ <mkdir dir="${basedir}/build/api"/>
+ <mkdir dir="${basedir}/build/docblox"/>
+ <mkdir dir="${basedir}/build/code-browser"/>
+ <mkdir dir="${basedir}/build/coverage"/>
+ <mkdir dir="${basedir}/build/logs"/>
+ <mkdir dir="${basedir}/build/pdepend"/>
+ </target>
+
+ <target name="vendor" description="Load composer repositories" depends="composer-update">
+ <exec executable="${composer.path}" failonerror="true">
+ <arg value="install" />
+ </exec>
+ </target>
+
+ <target name="composer-update" description="Load composer repositories" depends="composer">
+ <exec executable="${composer.path}" failonerror="true">
+ <arg value="self-update" />
+ </exec>
+ </target>
+
+ <target name="composer" description="Download composer" unless="composer.exists">
+ <get src="http://getcomposer.org/composer.phar" dest="${composer.path}" />
+ <chmod file="${composer.path}" perm="775" />
+ </target>
+
+ <target name="lint" description="Perform syntax check of sourcecode files">
+ <apply executable="php" failonerror="true">
+ <arg value="-l" />
+
+ <fileset dir="${basedir}/src">
+ <include name="**/*.php" />
+ <modified />
+ </fileset>
+
+ <fileset dir="${basedir}/tests">
+ <include name="**/*.php" />
+ <modified />
+ </fileset>
+ </apply>
+ </target>
+
+ <target name="phploc" description="Measure project size using PHPLOC">
+ <exec executable="phploc">
+ <arg value="--log-csv" />
+ <arg value="${basedir}/build/logs/phploc.csv" />
+ <arg path="${basedir}/src" />
+ </exec>
+ </target>
+
+ <target name="pdepend" description="Calculate software metrics using PHP_Depend">
+ <exec executable="pdepend">
+ <arg value="--jdepend-xml=${basedir}/build/logs/jdepend.xml" />
+ <arg value="--jdepend-chart=${basedir}/build/pdepend/dependencies.svg" />
+ <arg value="--overview-pyramid=${basedir}/build/pdepend/overview-pyramid.svg" />
+ <arg path="${basedir}/src" />
+ </exec>
+ </target>
+
+ <target name="phpmd"
+ description="Perform project mess detection using PHPMD and print human readable output. Intended for usage on the command line before committing.">
+ <exec executable="phpmd">
+ <arg path="${basedir}/src" />
+ <arg value="text" />
+ <arg value="${basedir}/phpmd.xml" />
+ </exec>
+ </target>
+
+ <target name="phpmd-ci" description="Perform project mess detection using PHPMD creating a log file for the continuous integration server">
+ <exec executable="phpmd">
+ <arg path="${basedir}/src" />
+ <arg value="xml" />
+ <arg value="${basedir}/phpmd.xml" />
+ <arg value="--reportfile" />
+ <arg value="${basedir}/build/logs/pmd.xml" />
+ </exec>
+ </target>
+
+ <target name="phpcs"
+ description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
+ <exec executable="phpcs">
+ <arg value="-s" />
+ <arg value="--standard=${basedir}/phpcs.xml" />
+ <arg path="${basedir}/src" />
+ </exec>
+ </target>
+
+ <target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
+ <exec executable="phpcs" output="/dev/null">
+ <arg value="--report=checkstyle" />
+ <arg value="--report-file=${basedir}/build/logs/checkstyle.xml" />
+ <arg value="--standard=${basedir}/phpcs.xml" />
+ <arg path="${basedir}/src" />
+ </exec>
+ </target>
+
+ <target name="phpcpd" description="Find duplicate code using PHPCPD">
+ <exec executable="phpcpd">
+ <arg value="--log-pmd" />
+ <arg value="${basedir}/build/logs/pmd-cpd.xml" />
+ <arg path="${basedir}/src" />
+ </exec>
+ </target>
+
+ <target name="phpunit" description="Run unit tests with PHPUnit">
+ <exec executable="phpunit" failonerror="true"/>
+ </target>
+
+ <target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser">
+ <exec executable="phpcb">
+ <arg value="--log" />
+ <arg path="${basedir}/build/logs" />
+ <arg value="--source" />
+ <arg path="${basedir}/src" />
+ <arg value="--output" />
+ <arg path="${basedir}/build/code-browser" />
+ </exec>
+ </target>
+
+ <target name="apigen" description="Generate API documentation using ApiGen">
+ <exec executable="apigen">
+ <arg line="generate -s src -d ${basedir}/build/api" />
+ </exec>
+ </target>
+
+</project>
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..9780eb1
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,28 @@
+{
+ "name": "phpexcel/stylefixer",
+ "description":" ",
+ "keywords":[
+ ],
+ "license": "BSD-3-Clause",
+ "autoload":{
+ "psr-4":{
+ "PHPExcel\\StyleFixer\\": "src/"
+ }
+ },
+ "autoload-dev":{
+ "psr-4":{
+ "PHPExcel\\StyleFixer\\": "tests/",
+ "PHPExcel\\StyleFixer\\": "tests/Fake"
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "extra": {
+ "branch-alias": {
+ "dev-develop": "0.1.x-dev"
+ }
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~3.7"
+ }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..6434e31
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,436 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "dcacf7bfdb465305180f799aba27659a",
+ "packages": [],
+ "packages-dev": [
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "1.2.18",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
+ "reference": "fe2466802556d3fe4e4d1d58ffd3ccfd0a19be0b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-file-iterator": ">=1.3.0@stable",
+ "phpunit/php-text-template": ">=1.2.0@stable",
+ "phpunit/php-token-stream": ">=1.1.3,<1.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.*@dev"
+ },
+ "suggest": {
+ "ext-dom": "*",
+ "ext-xdebug": ">=2.0.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "PHP/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2014-09-02 10:13:14"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb",
+ "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.4.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2015-04-02 05:19:05"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+ "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "Text/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2014-01-30 17:20:04"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "1.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+ "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "PHP/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2013-08-02 07:42:54"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/ad4e1e23ae01b483c16f600ff1bebec184588e32",
+ "reference": "ad4e1e23ae01b483c16f600ff1bebec184588e32",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "PHP/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2014-03-03 05:10:30"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "3.7.38",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/38709dc22d519a3d1be46849868aa2ddf822bcf6",
+ "reference": "38709dc22d519a3d1be46849868aa2ddf822bcf6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=5.3.3",
+ "phpunit/php-code-coverage": "~1.2",
+ "phpunit/php-file-iterator": "~1.3",
+ "phpunit/php-text-template": "~1.1",
+ "phpunit/php-timer": "~1.0",
+ "phpunit/phpunit-mock-objects": "~1.2",
+ "symfony/yaml": "~2.0"
+ },
+ "require-dev": {
+ "pear-pear.php.net/pear": "1.9.4"
+ },
+ "suggest": {
+ "phpunit/php-invoker": "~1.1"
+ },
+ "bin": [
+ "composer/bin/phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.7.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "PHPUnit/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ "",
+ "../../symfony/yaml/"
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "http://www.phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2014-10-17 09:04:17"
+ },
+ {
+ "name": "phpunit/phpunit-mock-objects",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
+ "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875",
+ "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "phpunit/php-text-template": ">=1.1.1@stable"
+ },
+ "suggest": {
+ "ext-soap": "*"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "PHPUnit/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "include-path": [
+ ""
+ ],
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sb@sebastian-bergmann.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Mock Object library for PHPUnit",
+ "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
+ "keywords": [
+ "mock",
+ "xunit"
+ ],
+ "time": "2013-01-13 10:24:48"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v2.6.6",
+ "target-dir": "Symfony/Component/Yaml",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Yaml.git",
+ "reference": "174f009ed36379a801109955fc5a71a49fe62dd4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Yaml/zipball/174f009ed36379a801109955fc5a71a49fe62dd4",
+ "reference": "174f009ed36379a801109955fc5a71a49fe62dd4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "~2.7"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.6-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\Yaml\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Symfony Yaml Component",
+ "homepage": "http://symfony.com",
+ "time": "2015-03-30 15:54:10"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": []
+}
diff --git a/phpcs.xml b/phpcs.xml
new file mode 100755
index 0000000..76dc14b
--- /dev/null
+++ b/phpcs.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<ruleset>
+ <!-- 2. General -->
+ <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
+ <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
+ <rule ref="Generic.Strings.UnnecessaryStringConcat"/>
+ <!-- Include the whole PSR-2 standard -->
+ <rule ref="PSR2">
+ <exclude name="Generic.Files.LineLength"/>
+ </rule>
+ <rule ref="PEAR.Commenting.FunctionComment">
+ <exclude name="PEAR.Commenting.FunctionComment.MissingReturn"/>
+ <exclude name="PEAR.Commenting.FunctionComment.MissingParamComment"/>
+ <exclude name="PEAR.Commenting.FunctionComment.SpacingBeforeTags"/>
+ <exclude name="PEAR.Commenting.FunctionComment.MissingParamTag"/>
+ <exclude name="PEAR.Commenting.FunctionComment.Missing"/>
+ <exclude name="PEAR.Commenting.FunctionComment.ParameterCommentsNotAligned"/>
+ </rule>
+</ruleset>
diff --git a/phpmd.xml b/phpmd.xml
new file mode 100644
index 0000000..0412e29
--- /dev/null
+++ b/phpmd.xml
@@ -0,0 +1,40 @@
+<ruleset xmlns="http://pmd.sf.net/ruleset/1.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
+ xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
+ <!--codesize-->
+ <rule ref="rulesets/codesize.xml/CyclomaticComplexity" />
+ <rule ref="rulesets/codesize.xml/NPathComplexity" />
+ <rule ref="rulesets/codesize.xml/ExcessiveClassComplexity" />
+ <rule ref="rulesets/codesize.xml/ExcessiveClassLength" />
+ <rule ref="rulesets/codesize.xml/ExcessiveMethodLength" />
+ <rule ref="rulesets/codesize.xml/ExcessiveParameterList" />
+ <rule ref="rulesets/codesize.xml/ExcessivePublicCount" />
+ <rule ref="rulesets/codesize.xml/TooManyFields" />
+ <rule ref="rulesets/codesize.xml/TooManyMethods" />
+ <!--design-->
+ <rule ref="rulesets/design.xml/EvalExpression" />
+ <rule ref="rulesets/design.xml/ExitExpression" />
+ <rule ref="rulesets/design.xml/GotoStatement" />
+ <rule ref="rulesets/design.xml/NumberOfChildren" />
+ <rule ref="rulesets/design.xml/DepthOfInheritance" />
+ <rule ref="rulesets/design.xml/CouplingBetweenObjects" />
+ <!--naming-->
+ <rule ref="rulesets/naming.xml/ConstantNamingConventions" />
+ <rule ref="rulesets/naming.xml/BooleanGetMethodName" />
+ <!--unusedcode-->
+ <rule ref="rulesets/unusedcode.xml/UnusedFormalParameter" />
+ <rule ref="rulesets/unusedcode.xml/UnusedLocalVariable" />
+ <rule ref="rulesets/unusedcode.xml/UnusedPrivateField" />
+ <rule ref="rulesets/unusedcode.xml/UnusedPrivateMethod" />
+ <!--controversial-->
+ <rule ref="rulesets/controversial.xml/Superglobals" />
+ <rule ref="rulesets/controversial.xml/CamelCaseClassName" />
+ <rule ref="rulesets/controversial.xml/CamelCasePropertyName" />
+ <rule ref="rulesets/controversial.xml/CamelCaseMethodName" />
+ <rule ref="rulesets/controversial.xml/CamelCaseParameterName" />
+ <rule ref="rulesets/controversial.xml/CamelCaseVariableName" />
+ <!--cleancode-->
+ <rule ref="rulesets/cleancode.xml/BooleanArgumentFlag" />
+ <rule ref="rulesets/cleancode.xml/ElseExpression" />
+</ruleset>
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
new file mode 100644
index 0000000..0c37fb9
--- /dev/null
+++ b/phpunit.xml.dist
@@ -0,0 +1,19 @@
+<phpunit bootstrap="tests/bootstrap.php">
+ <testsuites>
+ <testsuite>
+ <directory suffix="Test.php">tests</directory>
+ </testsuite>
+ </testsuites>
+
+ <logging>
+ <log type="coverage-html" target="build/coverage"/>
+ <log type="coverage-clover" target="build/logs/clover.xml"/>
+ <log type="junit" target="build/logs/junit.xml" logIncompleteSkipped="false"/>
+ </logging>
+
+ <filter>
+ <whitelist>
+ <directory suffix=".php">src</directory>
+ </whitelist>
+ </filter>
+</phpunit>
diff --git a/src/Plugin/CellStyleFixer.php b/src/Plugin/CellStyleFixer.php
new file mode 100644
index 0000000..cbbb4af
--- /dev/null
+++ b/src/Plugin/CellStyleFixer.php
@@ -0,0 +1,120 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Plugin;
+
+
+use PHPExcel\StyleFixer\Util\Book as BookUtil;
+use PHPExcel\StyleFixer\Util\Sheet as SheetUtil;
+use PHPExcel\StyleFixer\Util\XmlNamespace;
+
+class CellStyleFixer implements Plugin
+{
+ /**
+ * @var \PHPExcel\StyleFixer\Util\Book
+ */
+ private $bookUtil;
+
+ /**
+ * @var \PHPExcel\StyleFixer\Util\Sheet
+ */
+ private $sheetUtil;
+
+ /**
+ * @param BookUtil $bookUtil
+ * @param SheetUtil $sheetUtil
+ */
+ public function __construct(BookUtil $bookUtil, SheetUtil $sheetUtil)
+ {
+ $this->bookUtil = $bookUtil;
+ $this->sheetUtil = $sheetUtil;
+ }
+
+ /**
+ * 各ワークシート内の各セルに付属している書式設定を修復する
+ *
+ * @param \ZipArchive $output
+ * @param \ZipArchive $template
+ */
+ public function execute(\ZipArchive $output, \ZipArchive $template)
+ {
+ // テンプレート側のシート名のマッピング
+ $srcSheetMap = $this->bookUtil->makeSheetMap($template);
+ // 出力ファイル側のシート名のマッピング
+ $distSheetMap = $this->bookUtil->makeSheetMap($output);
+ // 出力ファイル側のシートの印刷範囲マッピング
+ $distPrintAreas = $this->bookUtil->makePrintAreaMap($output);
+
+ foreach ($distSheetMap as $sheetName => $distSheetPath) {
+ $distXml = $output->getFromName($distSheetPath);
+ $distDom = new \DOMDocument;
+ $distDom->loadXML($distXml);
+ $distXPath = new \DOMXPath($distDom);
+ $distXPath->registerNamespace('s', XmlNamespace::SPREADSHEETML_NS_URL);
+
+ $srcXml = $template->getFromName($srcSheetMap[$sheetName]);
+ $srcDom = new \DOMDocument;
+ $srcDom->loadXML($srcXml);
+ $srcXPath = new \DOMXPath($srcDom);
+ $srcXPath->registerNamespace('s', XmlNamespace::SPREADSHEETML_NS_URL);
+
+ $printArea = null;
+ if (isset($distPrintAreas[$sheetName])) {
+ list(,$printArea) = explode('!', $distPrintAreas[$sheetName]);
+ }
+
+ // セル番地 => スタイル番号
+ $styleMap = [];
+ foreach ($srcXPath->query('//s:worksheet/s:sheetData/s:row') as $srcRow) {
+ /** @var \DOMElement $srcRow */
+ if ($srcRow->hasAttribute('s')) {
+ /** @var \DOMElement $distRow */
+ $distRow = $distXPath->query('//s:worksheet/s:sheetData/s:row[@r="'.$srcRow->getAttribute('r').'"]')->item(0);
+ if ($distRow) {
+ $distRow->setAttribute('s', $srcRow->getAttribute('s'));
+ }
+ }
+
+ if ($srcRow->hasChildNodes()) {
+ foreach ($srcRow->childNodes as $srcCell) {
+ if ($srcCell instanceOf \DOMElement && $srcCell->tagName == 'c' && $srcCell->hasAttribute('s')) {
+ $styleMap[$srcCell->getAttribute('r')] = $srcCell->getAttribute('s');
+ }
+ }
+ }
+ }
+
+ foreach ($distXPath->query('//s:worksheet/s:sheetData/s:row/s:c') as $distCell) {
+ /** @var \DOMElement $distCell */
+ $coordinate = $distCell->getAttribute('r');
+ if (isset($styleMap[$coordinate]) && ($this->cellHasValue($distCell) || !$printArea || $this->sheetUtil->inRange($coordinate, $printArea))) {
+ $distCell->setAttribute('s', $styleMap[$coordinate]);
+ } else {
+ $distCell->removeAttribute('s');
+ }
+ }
+
+ $output->addFromString($distSheetPath, $distDom->saveXML());
+ }
+ }
+
+ /**
+ * @param \DOMElement $cell
+ * @return bool
+ */
+ private function cellHasValue(\DOMElement $cell)
+ {
+ $hasValue = false;
+
+ if ($cell->hasChildNodes()) {
+ foreach ($cell->childNodes as $child) {
+ if ($child instanceOf \DOMElement && $child->tagName == 'v') {
+ $hasValue = true;
+ break;
+ }
+ }
+ }
+
+ return $hasValue;
+ }
+}
diff --git a/src/Plugin/ConditionalFormatFixer.php b/src/Plugin/ConditionalFormatFixer.php
new file mode 100644
index 0000000..2c6638b
--- /dev/null
+++ b/src/Plugin/ConditionalFormatFixer.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace PHPExcel\StyleFixer\Plugin;
+
+use PHPExcel\StyleFixer\Util\Book as BookUtil;
+use PHPExcel\StyleFixer\Util\XmlNamespace;
+
+/**
+ * Class ConditionalFormatFixer
+ * PHPExcelが壊した条件付き書式を修復する
+ */
+class ConditionalFormatFixer implements Plugin
+{
+ /**
+ * @var \PHPExcel\StyleFixer\Util\Book
+ */
+ private $bookUtil;
+
+ public function __construct(BookUtil $bookUtil)
+ {
+ $this->bookUtil = $bookUtil;
+ }
+
+ /**
+ * 各ワークシート内の条件付き書式設定を修復する
+ *
+ * @param \ZipArchive $output
+ * @param \ZipArchive $template
+ */
+ public function execute(\ZipArchive $output, \ZipArchive $template)
+ {
+ // テンプレート側のシート名のマッピング
+ $srcSheetMap = $this->bookUtil->makeSheetMap($template);
+ // 出力ファイル側のシート名のマッピング
+ $distSheetMap = $this->bookUtil->makeSheetMap($output);
+
+ foreach ($distSheetMap as $sheetName => $distSheetPath) {
+ $distXml = $output->getFromName($distSheetPath);
+ if (false !== strpos($distXml, 'conditionalFormatting')) {
+ $distDom = new \DOMDocument;
+ $distDom->loadXML($distXml);
+ $distXPath = new \DOMXPath($distDom);
+ $distXPath->registerNamespace('s', XmlNamespace::SPREADSHEETML_NS_URL);
+ $distRoot = $distXPath->query('//s:worksheet')->item(0);
+ $distConditionalFormattings = $distXPath->query('//s:worksheet/s:conditionalFormatting');
+ $elementAfterConditionalFormatting = null;
+ foreach ($distConditionalFormattings as $distConditionalFormatting) {
+ $elementAfterConditionalFormatting = $distConditionalFormatting->nextSibling;
+ $distRoot->removeChild($distConditionalFormatting);
+ }
+
+ while ($elementAfterConditionalFormatting instanceOf \DOMNode && !$elementAfterConditionalFormatting instanceOf \DOMElement) {
+ $elementAfterConditionalFormatting = $elementAfterConditionalFormatting->nextSibling;
+ }
+ if (!$elementAfterConditionalFormatting instanceOf \DOMElement) {
+ break;
+ }
+
+ $srcSheetPath = $srcSheetMap[$sheetName];
+ $srcXml = $template->getFromName($srcSheetPath);
+ $srcDom = new \DOMDocument;
+ $srcDom->loadXML($srcXml);
+ $srcXPath = new \DOMXPath($srcDom);
+ $srcXPath->registerNamespace('s', XmlNamespace::SPREADSHEETML_NS_URL);
+
+ $conditionalFormattings = $srcXPath->query('//s:worksheet/s:conditionalFormatting');
+ foreach ($conditionalFormattings as $conditionalFormatting) {
+ /** @var \DOMElement $conditionalFormatting */
+ $newDistConditionalFormatting = $distDom->importNode($conditionalFormatting, true);
+ $distRoot->insertBefore($newDistConditionalFormatting, $elementAfterConditionalFormatting);
+ }
+
+ $output->addFromString($distSheetPath, $distDom->saveXML());
+ }
+ }
+ }
+}
diff --git a/src/Plugin/Plugin.php b/src/Plugin/Plugin.php
new file mode 100644
index 0000000..8229040
--- /dev/null
+++ b/src/Plugin/Plugin.php
@@ -0,0 +1,10 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Plugin;
+
+
+interface Plugin
+{
+ public function execute(\ZipArchive $output, \ZipArchive $template);
+}
diff --git a/src/StyleFixer.php b/src/StyleFixer.php
new file mode 100644
index 0000000..2e4457a
--- /dev/null
+++ b/src/StyleFixer.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace PHPExcel\StyleFixer;
+
+use PHPExcel\StyleFixer\Plugin\Plugin;
+
+/**
+ * Class StyleFixer
+ * PHPExcelが壊した書式設定を修復(テンプレートからコピー)する
+ */
+class StyleFixer
+{
+ const STYLES_XML_PATH = 'xl/styles.xml';
+
+ /**
+ * @var Plugin[]
+ */
+ private $plugins;
+
+ public function __construct(array $plugins = null)
+ {
+ $this->plugins = $plugins;
+ }
+
+ /**
+ * @param string $outputPath
+ * @param string $templatePath
+ */
+ public function execute($outputPath, $templatePath)
+ {
+ $output = $this->openFile($outputPath);
+ $template = $this->openFile($templatePath);
+
+ // スタイル定義を修復
+ $this->fixStyles($output, $template);
+ $output->close();
+
+ // 個別のシートを修復
+ if (null !== $this->plugins) {
+ foreach ($this->plugins as $fixer) {
+
+ $output = $this->openFile($outputPath);
+
+ $fixer->execute($output, $template);
+
+ $output->close();
+ }
+ }
+
+ $template->close();
+ }
+
+ /**
+ * @param string $path
+ * @return \ZipArchive
+ */
+ protected function openFile($path)
+ {
+ $zip = new \ZipArchive;
+ $zip->open($path);
+
+ return $zip;
+ }
+
+ /**
+ * xl/styles.xml全体を修復(テンプレートからコピー)する
+ *
+ * @param \ZipArchive $output
+ * @param \ZipArchive $template
+ */
+ private function fixStyles(\ZipArchive $output, \ZipArchive $template)
+ {
+ $srcStylesXml = $template->getFromName(self::STYLES_XML_PATH);
+
+ $output->addFromString(self::STYLES_XML_PATH, $srcStylesXml);
+ }
+}
diff --git a/src/Util/Book.php b/src/Util/Book.php
new file mode 100644
index 0000000..ac8d557
--- /dev/null
+++ b/src/Util/Book.php
@@ -0,0 +1,146 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Util;
+
+
+class Book
+{
+ /**
+ * 人間可読なシート名 => シートのリレーションファイルのパス の連想配列を作る
+ *
+ * @param \ZipArchive $zip
+ * @return array
+ */
+ public function makeSheetRelationMap(\ZipArchive $zip)
+ {
+ $sheetMap = $this->makeSheetMap($zip);
+
+ array_walk($sheetMap, function(&$xmlPath){
+ $xmlPath = str_replace('worksheets/', 'worksheets/_rels/', $xmlPath).'.rels';
+ });
+
+ return $sheetMap;
+ }
+
+ /**
+ * 人間可読なシート名 => シートファイルのパス の連想配列を作る
+ *
+ * @param \ZipArchive $zip
+ * @return array
+ */
+ public function makeSheetMap(\ZipArchive $zip)
+ {
+ $relXml = $zip->getFromName('xl/_rels/workbook.xml.rels');
+
+ $relDom = new \DOMDocument;
+ $relDom->loadXml($relXml);
+ $relXPath = new \DOMXPath($relDom);
+ $relXPath->registerNamespace('r', XmlNamespace::RELATIONSHIPS_NS_URL);
+
+ $sheetRelationIdMaps = $this->makeSheetRelationIdMap($zip);
+
+ $map = [];
+ foreach ($sheetRelationIdMaps as $sheetName => $relId) {
+ /** @var null|\DOMElement $relEntry */
+ $relEntry = $relXPath->query('//r:Relationships/r:Relationship[@Id="'.$relId.'"]')->item(0);
+ if ($relEntry) {
+ $map[$sheetName] = 'xl/'.$relEntry->getAttribute('Target');
+ }
+ }
+
+ return $map;
+ }
+
+ /**
+ * 人間可読なシート名 => relationship id の連想配列を作る
+ * @param \ZipArchive $zip
+ * @return array
+ */
+ private function makeSheetRelationIdMap(\ZipArchive $zip)
+ {
+ $xml = $zip->getFromName('xl/workbook.xml');
+
+ $dom = new \DOMDocument;
+ $dom->loadXML($xml);
+ $xpath = new \DOMXPath($dom);
+ $xpath->registerNamespace('s', XmlNamespace::SPREADSHEETML_NS_URL);
+
+ $map = [];
+ foreach ($xpath->query('//s:workbook/s:sheets/s:sheet') as $sheet) {
+ /** @var \DOMElement $sheet */
+ $map[$sheet->getAttribute('name')] = $sheet->getAttribute('r:id');
+ }
+
+ return $map;
+ }
+
+ /**
+ * 人間可読なシート名 => 印刷範囲 の連想配列を作る
+ *
+ * @param \ZipArchive $zip
+ * @return array
+ */
+ public function makePrintAreaMap(\ZipArchive $zip)
+ {
+ $xml = $zip->getFromName('xl/workbook.xml');
+
+ $dom = new \DOMDocument;
+ $dom->loadXML($xml);
+ $xpath = new \DOMXPath($dom);
+ $xpath->registerNamespace('s', XmlNamespace::SPREADSHEETML_NS_URL);
+
+ $sheets = $xpath->query('//s:workbook/s:sheets/s:sheet');
+ $printAreas = $xpath->query('//s:workbook/s:definedNames/s:definedName[@name="_xlnm.Print_Area"]');
+ $map = [];
+ $localSheetId = 0;
+ foreach ($sheets as $sheet) {
+ /** @var \DOMElement $definedName */
+ $definedName = $printAreas->item($localSheetId);
+ if ($definedName) {
+ /** @var \DOMElement $sheet */
+ $map[$sheet->getAttribute('name')] = $definedName->nodeValue;
+ }
+ $localSheetId++;
+ }
+
+ return $map;
+ }
+
+ /**
+ * 人間可読なシート名 => drawing.xmlファイルの配列 の連想配列を作る
+ *
+ * @param \ZipArchive $zip
+ * @return array
+ */
+ public function makeDrawingMap(\ZipArchive $zip)
+ {
+ $map = [];
+
+ $sheetRelationMap = $this->makeSheetRelationMap($zip);
+ foreach ($sheetRelationMap as $sheetName => $sheetRelFile) {
+ $drawings = [];
+
+ $relXml = $zip->getFromName($sheetRelFile);
+ $dom = new \DOMDocument();
+ $dom->loadXML($relXml);
+ $xpath = new \DOMXPath($dom);
+ $xpath->registerNamespace('r', XmlNamespace::RELATIONSHIPS_NS_URL);
+
+ $drawingFiles = $xpath->query('//r:Relationships/r:Relationship[@Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing"]');
+ foreach ($drawingFiles as $drawingFile) {
+ /** @var \DOMElement $drawingFile */
+ $drawings[] = str_replace('../', 'xl/', $drawingFile->getAttribute('Target'));
+ }
+
+ $xpath = null;
+ $dom = null;
+
+ if (0 !== count($drawings)) {
+ $map[$sheetName] = $drawings;
+ }
+ }
+
+ return $map;
+ }
+}
diff --git a/src/Util/Sheet.php b/src/Util/Sheet.php
new file mode 100644
index 0000000..6e11e1d
--- /dev/null
+++ b/src/Util/Sheet.php
@@ -0,0 +1,70 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Util;
+
+
+class Sheet
+{
+
+ /**
+ * セル番地がExcel形式のセル範囲(コロン区切りのみ対応)に含まれるかどうか
+ *
+ * @param string $coordinate
+ * @param string $cellRange
+ * @return bool
+ */
+ public function inRange($coordinate, $cellRange)
+ {
+ // 絶対参照の$を削除
+ $cellRange = str_replace('$', '', $cellRange);
+ list($startCell, $endCell) = explode(':', $cellRange);
+
+ // 行の範囲チェック
+ $rowNumber = $this->detectRowNumberFromCoordinate($coordinate);
+ if ($rowNumber < $this->detectRowNumberFromCoordinate($startCell) || $rowNumber > $this->detectRowNumberFromCoordinate($endCell)) {
+ return false;
+ }
+
+ // 列の範囲チェック
+ $colNumber = $this->detectColNumberFromCoordinate($coordinate);
+ if ($colNumber < $this->detectColNumberFromCoordinate($startCell) || $colNumber > $this->detectColNumberFromCoordinate($endCell)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * セル番地から行番号を取り出す
+ *
+ * @param string $coordinate
+ * @return int
+ */
+ private function detectRowNumberFromCoordinate($coordinate)
+ {
+ return intval(preg_replace('/[A-Z]+/', '', $coordinate));
+ }
+
+ /**
+ * セル番地から列番号を取り出す
+ *
+ * @param string $coordinate
+ * @return int
+ */
+ private function detectColNumberFromCoordinate($coordinate)
+ {
+ $char = preg_replace('/\d+/', '', $coordinate);
+
+ $charA = 65;
+
+ if (strlen($char) == 1) {
+ return ord($char) - $charA + 1;
+ }
+
+ $quot = ord($char[0]) - $charA + 1;
+ $mod = ord($char[1]) - $charA + 1;
+
+ return $quot * 26 + $mod;
+ }
+}
diff --git a/src/Util/XmlNamespace.php b/src/Util/XmlNamespace.php
new file mode 100644
index 0000000..581510e
--- /dev/null
+++ b/src/Util/XmlNamespace.php
@@ -0,0 +1,16 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Util;
+
+
+class XmlNamespace
+{
+ const SPREADSHEETML_NS_URL = 'http://schemas.openxmlformats.org/spreadsheetml/2006/main';
+ const RELATIONSHIPS_NS_URL = 'http://schemas.openxmlformats.org/package/2006/relationships';
+
+ // drawing関係
+ const SPREADSHEETDRAWING_NS_URL = 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheet';
+ const DRAWINGML_NS_URL = 'http://schemas.openxmlformats.org/drawingml/2006/main';
+ const DRAWINGML_CHART_NS_URL = 'http://schemas.openxmlformats.org/drawingml/2006/chart';
+}
diff --git a/tests/Plugin/BasePluginTest.php b/tests/Plugin/BasePluginTest.php
new file mode 100644
index 0000000..0686eb4
--- /dev/null
+++ b/tests/Plugin/BasePluginTest.php
@@ -0,0 +1,49 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Plugin;
+
+
+abstract class BasePluginTest extends \PHPUnit_Framework_TestCase
+{
+ private $basePath;
+
+ public function setUp()
+ {
+ $this->basePath = __DIR__.'/../xml';
+ }
+
+ public function getOutputXml($path)
+ {
+ return file_get_contents($this->basePath.'/output/'.$path);
+ }
+
+ public function getTemplateXml($path)
+ {
+ return file_get_contents($this->basePath.'/template/'.$path);
+ }
+
+ /**
+ * @param int $count
+ * @param array $map
+ * @return \PHPUnit_Framework_MockObject_MockObject
+ */
+ protected function createBookUtil($count, $map)
+ {
+ $bookUtil = $this->getMock('PHPExcel\StyleFixer\Util\Book');
+ $bookUtil
+ ->expects($this->exactly($count))
+ ->method('makeSheetMap')
+ ->with($this->isInstanceOf('\ZipArchive'))
+ ->will($this->returnValue($map))
+ ;
+
+ return $bookUtil;
+ }
+
+ public function tearDown()
+ {
+ $this->output_stylesXml = '';
+ $this->template_stylesXml = '';
+ }
+}
diff --git a/tests/Plugin/CellStyleFixerTest.php b/tests/Plugin/CellStyleFixerTest.php
new file mode 100644
index 0000000..a30478a
--- /dev/null
+++ b/tests/Plugin/CellStyleFixerTest.php
@@ -0,0 +1,67 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Plugin;
+
+use PHPExcel\StyleFixer\Util\Sheet;
+
+class CellStyleFixerTest extends BasePluginTest
+{
+ public function test_execute()
+ {
+ $output = $this->getMock('\ZipArchive');
+ $template = $this->getMock('\ZipArchive');
+ $bookUtil = $this->createBookUtil(2, ['Sheet1' => 'xl/worksheets/sheet1.xml', 'Sheet2' => 'xl/worksheets/sheet2.xml']);
+ $bookUtil
+ ->expects($this->once())
+ ->method('makePrintAreaMap')
+ ->with($this->isInstanceOf('\ZipArchive'))
+ ->will($this->returnValue(['Sheet1' => 'Sheet1!$A$18:$A$18', 'Sheet2' => 'Sheet2!$A$18:$A$18']))
+ ;
+ $sheetUtil = new Sheet();
+
+ $output
+ ->expects($this->exactly(2))
+ ->method('getFromName')
+ ->with($this->logicalOr('xl/worksheets/sheet1.xml', 'xl/worksheets/sheet2.xml'))
+ ->will($this->returnCallback([$this, 'getOutputXml']))
+ ;
+ $template
+ ->expects($this->exactly(2))
+ ->method('getFromName')
+ ->with($this->logicalOr('xl/worksheets/sheet1.xml', 'xl/worksheets/sheet2.xml'))
+ ->will($this->returnCallback([$this, 'getTemplateXml']))
+ ;
+ $output
+ ->expects($this->exactly(2))
+ ->method('addFromString')
+ ->with($this->logicalOr('xl/worksheets/sheet1.xml', 'xl/worksheets/sheet2.xml'), $this->callback([$this, 'assertXmlHasExpectedContent']))
+ ;
+
+ $fixer = new CellStyleFixer($bookUtil, $sheetUtil);
+ $fixer->execute($output, $template);
+ }
+
+ public function assertXmlHasExpectedContent($xml)
+ {
+ // 行スタイルが修復されている
+ $this->assertContains('<row r="18" s="99">', $xml);
+ $this->assertNotContains('<row r="18" s="11">', $xml);
+ // セルスタイルが修復されている
+ $this->assertContains('<c r="A18" s="33"', $xml);
+ $this->assertNotContains('<c r="A18" s="11"', $xml);
+ if (strpos($xml, 'B18')) {
+ // 印刷範囲外でも値があるセルは修復する
+ $this->assertContains('<c r="B18" s="33"', $xml);
+ $this->assertNotContains('<c r="B18" s="11"', $xml);
+ }
+ if (strpos($xml, 'C18')) {
+ // 印刷範囲外で値もないセルは修復せずスタイル情報を破棄
+ $this->assertContains('<c r="C18"/>', $xml);
+ $this->assertNotContains('<c r="C18" s="33"', $xml);
+ $this->assertNotContains('<c r="C18" s="11"', $xml);
+ }
+
+ return true;
+ }
+}
diff --git a/tests/Plugin/ConditionalFormatFixerTest.php b/tests/Plugin/ConditionalFormatFixerTest.php
new file mode 100644
index 0000000..e0d97ac
--- /dev/null
+++ b/tests/Plugin/ConditionalFormatFixerTest.php
@@ -0,0 +1,44 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Plugin;
+
+
+class ConditionalFormatFixerTest extends BasePluginTest
+{
+ public function test_execute()
+ {
+ $output = $this->getMock('\ZipArchive');
+ $template = $this->getMock('\ZipArchive');
+ $bookUtil = $this->createBookUtil(2, ['Sheet1' => 'xl/worksheets/sheet1.xml', 'Sheet2' => 'xl/worksheets/sheet2.xml']);
+
+ $output
+ ->expects($this->exactly(2))
+ ->method('getFromName')
+ ->with($this->logicalOr('xl/worksheets/sheet1.xml', 'xl/worksheets/sheet2.xml'))
+ ->will($this->returnCallback([$this, 'getOutputXml']))
+ ;
+ $template
+ ->expects($this->once())
+ ->method('getFromName')
+ ->with($this->equalTo('xl/worksheets/sheet2.xml'))
+ ->will($this->returnCallback([$this, 'getTemplateXml']))
+ ;
+ $output
+ ->expects($this->once())
+ ->method('addFromString')
+ ->with($this->equalTo('xl/worksheets/sheet2.xml'), $this->callback([$this, 'assertXmlHasExpectedContent']))
+ ;
+
+ $fixer = new ConditionalFormatFixer($bookUtil);
+ $fixer->execute($output, $template);
+ }
+
+ public function assertXmlHasExpectedContent($xml)
+ {
+ $this->assertContains('<conditionalFormatting><font/></conditionalFormatting>', $xml);
+ $this->assertNotContains('<conditionalFormatting/>', $xml);
+
+ return true;
+ }
+}
diff --git a/tests/StyleFixerTest.php b/tests/StyleFixerTest.php
new file mode 100644
index 0000000..8351525
--- /dev/null
+++ b/tests/StyleFixerTest.php
@@ -0,0 +1,133 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer;
+
+
+class StyleFixerTest extends \PHPUnit_Framework_TestCase
+{
+ private $basePath;
+
+ public function setUp()
+ {
+ $this->basePath = __DIR__.'/xml';
+ }
+
+ public function getOutputXml($path)
+ {
+ return file_get_contents($this->basePath.'/output/'.$path);
+ }
+
+ public function getTemplateXml($path)
+ {
+ return file_get_contents($this->basePath.'/template/'.$path);
+ }
+
+ /**
+ * @test
+ */
+ public function プラグインなし()
+ {
+ $output = $this->getMock('\ZipArchive');
+ $template = $this->getMock('\ZipArchive');
+ $outputPath = '/path/to/output.xlsx';
+ $templatePath = '/path/to/template.xlsx';
+ $zips = [
+ $outputPath => $output,
+ $templatePath => $template,
+ ];
+
+ $fixer = $this->getMockBuilder('PHPExcel\StyleFixer\StyleFixer')
+ ->setMethods(['openFile'])
+ ->getMock()
+ ;
+ $fixer
+ ->expects($this->exactly(2))
+ ->method('openFile')
+ ->with($this->logicalOr($outputPath, $templatePath))
+ ->will($this->returnCallback(function($path) use ($zips){
+ return $zips[$path];
+ }))
+ ;
+ $template
+ ->expects($this->once())
+ ->method('getFromName')
+ ->with('xl/styles.xml')
+ ->will($this->returnCallback([$this, 'getTemplateXml']))
+ ;
+ $output
+ ->expects($this->once())
+ ->method('addFromString')
+ ->with('xl/styles.xml', $this->callback(function($xml){
+
+ $this->assertEquals($this->getTemplateXml('xl/styles.xml'), $xml);
+
+ return true;
+ }))
+ ;
+ $output
+ ->expects($this->once())
+ ->method('close')
+ ;
+
+ $fixer->execute($outputPath, $templatePath);
+ }
+
+ /**
+ * @test
+ */
+ public function プラグインあり()
+ {
+ $output = $this->getMock('\ZipArchive');
+ $template = $this->getMock('\ZipArchive');
+ $outputPath = '/path/to/output.xlsx';
+ $templatePath = '/path/to/template.xlsx';
+ $zips = [
+ $outputPath => $output,
+ $templatePath => $template,
+ ];
+ $plugin = $this->getMockForAbstractClass('PHPExcel\StyleFixer\Plugin\Plugin');
+
+ $fixer = $this->getMockBuilder('PHPExcel\StyleFixer\StyleFixer')
+ ->setMethods(['openFile'])
+ ->setConstructorArgs([[$plugin]])
+ ->getMock()
+ ;
+ $fixer
+ ->expects($this->exactly(3))
+ ->method('openFile')
+ ->with($this->logicalOr($outputPath, $templatePath))
+ ->will($this->returnCallback(function($path) use ($zips){
+ return $zips[$path];
+ }))
+ ;
+ $plugin
+ ->expects($this->once())
+ ->method('execute')
+ ->with($output, $template)
+ ;
+ $template
+ ->expects($this->once())
+ ->method('getFromName')
+ ->with('xl/styles.xml')
+ ->will($this->returnCallback([$this, 'getTemplateXml']))
+ ;
+ $output
+ ->expects($this->once())
+ ->method('addFromString')
+ ->with('xl/styles.xml', $this->isType('string'))
+ ;
+ $output
+ ->expects($this->exactly(2))
+ ->method('close')
+ ;
+
+ $fixer->execute($outputPath, $templatePath);
+ }
+
+ public function tearDown()
+ {
+ $this->output_stylesXml = '';
+ $this->template_stylesXml = '';
+ }
+}
diff --git a/tests/Util/BookTest.php b/tests/Util/BookTest.php
new file mode 100644
index 0000000..2e0c26c
--- /dev/null
+++ b/tests/Util/BookTest.php
@@ -0,0 +1,90 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Util;
+
+class BookTest extends \PHPUnit_Framework_TestCase
+{
+ public function test_makeSheetMap()
+ {
+ $zip = $this->makeZipMock(['xl/workbook.xml', 'xl/_rels/workbook.xml.rels']);
+
+ $bookUtil = new Book();
+ $map = $bookUtil->makeSheetMap($zip);
+
+ $this->assertInternalType('array', $map);
+ $this->assertArrayHasKey('表紙', $map);
+ $this->assertArrayHasKey('日別_Y', $map);
+ $this->assertArrayHasKey('日別_YDN', $map);
+ $this->assertArrayNotHasKey('日別_G', $map);
+ $this->assertEquals('xl/worksheets/sheet1.xml', $map['表紙']);
+ }
+
+ public function test_makePrintAreaMap()
+ {
+ $zip = $this->makeZipMock(['xl/workbook.xml']);
+ $bookUtil = new Book();
+ $map = $bookUtil->makePrintAreaMap($zip);
+
+ $this->assertInternalType('array', $map);
+ $this->assertArrayHasKey('表紙', $map);
+ $this->assertArrayHasKey('日別_Y', $map);
+ $this->assertArrayHasKey('日別_YDN', $map);
+ $this->assertArrayNotHasKey('日別_G', $map);
+ $this->assertEquals('\'日別_Y\'!$A$18:$A$18', $map['日別_Y']);
+ }
+
+ public function test_makeSheetRelationMap()
+ {
+ $zip = $this->makeZipMock(['xl/workbook.xml', 'xl/_rels/workbook.xml.rels']);
+
+ $bookUtil = new Book();
+ $map = $bookUtil->makeSheetRelationMap($zip);
+
+ $this->assertInternalType('array', $map);
+ $this->assertArrayHasKey('表紙', $map);
+ $this->assertArrayHasKey('日別_Y', $map);
+ $this->assertArrayHasKey('日別_YDN', $map);
+ $this->assertArrayNotHasKey('日別_G', $map);
+ $this->assertEquals('xl/worksheets/_rels/sheet1.xml.rels', $map['表紙']);
+ }
+
+ public function test_makeDrawingMap()
+ {
+ $zip = $this->makeZipMock(['xl/workbook.xml', 'xl/_rels/workbook.xml.rels', 'xl/worksheets/_rels/sheet1.xml.rels', 'xl/worksheets/_rels/sheet2.xml.rels', 'xl/worksheets/_rels/sheet3.xml.rels']);
+
+ $bookUtil = new Book();
+ $map = $bookUtil->makeDrawingMap($zip);
+
+ $this->assertInternalType('array', $map);
+ $this->assertArrayNotHasKey('表紙', $map);
+ $this->assertArrayHasKey('日別_Y', $map);
+ $this->assertArrayHasKey('日別_YDN', $map);
+ $this->assertEquals(['xl/drawings/drawing1.xml', 'xl/drawings/drawing2.xml'], $map['日別_Y']);
+ }
+
+ /**
+ * @param string $fileNames
+ * @return \ZipArchive|\PHPUnit_Framework_MockObject_MockObject
+ */
+ private function makeZipMock($fileNames)
+ {
+ $zip = $this->getMock('\ZipArchive');
+ $zip
+ ->expects($this->exactly(count($fileNames)))
+ ->method('getFromName')
+ ->with($this->callback(
+ function($fileName) use ($fileNames){
+ return in_array($fileName, $fileNames);
+ }))
+ ->will($this->returnCallback([$this, 'getXml']))
+ ;
+
+ return $zip;
+ }
+
+ public function getXml($path)
+ {
+ return file_get_contents(__DIR__.'/../xml/template/'.$path);
+ }
+}
diff --git a/tests/Util/SheetTest.php b/tests/Util/SheetTest.php
new file mode 100644
index 0000000..339e731
--- /dev/null
+++ b/tests/Util/SheetTest.php
@@ -0,0 +1,38 @@
+<?php
+
+
+namespace PHPExcel\StyleFixer\Util;
+
+
+class SheetTest extends \PHPUnit_Framework_TestCase
+{
+ /**
+ * @param string $cell
+ * @param string $range
+ * @param bool $expect
+ * @test
+ * @dataProvider provideInRangeTestData
+ */
+ public function test_inRange($cell, $range, $expect)
+ {
+ $sheetUtil = new Sheet();
+ $this->assertEquals($expect, $sheetUtil->inRange($cell, $range));
+ }
+
+ public function provideInRangeTestData()
+ {
+ return [
+ ['A1', 'A2:A10', false],
+ ['A2', 'A2:A10', true],
+ ['A5', 'A2:A10', true],
+ ['A10', 'A2:A10', true],
+ ['A11', 'A2:A10', false],
+ ['A1', 'B1:Z1', false],
+ ['B1', 'B1:Z1', true],
+ ['C1', 'B1:Z1', true],
+ ['Z1', 'B1:Z1', true],
+ ['AA1', 'B1:Z1', false],
+ ['A1', 'AA1:AA2', false],
+ ];
+ }
+}
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
new file mode 100644
index 0000000..dd79cfa
--- /dev/null
+++ b/tests/bootstrap.php
@@ -0,0 +1,4 @@
+<?php
+
+/** @var $loader \Composer\Autoload\ClassLoader */
+$loader = require dirname(__DIR__) . '/vendor/autoload.php';
diff --git a/tests/xml/output/xl/_rels/workbook.xml.rels b/tests/xml/output/xl/_rels/workbook.xml.rels
new file mode 100644
index 0000000..21fc1eb
--- /dev/null
+++ b/tests/xml/output/xl/_rels/workbook.xml.rels
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet2.xml"/>
+</Relationships>
diff --git a/tests/xml/output/xl/styles.xml b/tests/xml/output/xl/styles.xml
new file mode 100644
index 0000000..3905982
--- /dev/null
+++ b/tests/xml/output/xl/styles.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<styleSheet xml:space="preserve" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><numFmts count="4"><numFmt numFmtId="164" formatCode="yyyy/mm/dd\ \(aaa\)"/><numFmt numFmtId="165" formatCode="&quot;¥&quot;#,##0&quot;&quot;"/><numFmt numFmtId="166" formatCode="&quot;¥&quot;#,##0.00"/><numFmt numFmtId="167" formatCode="0.0"/></numFmts><fonts count="10"><font><b val="0"/><i val="0"/><strike val="0"/><u val="none"/><sz val="9"/><color rgb="FF000000"/><name val="MS Pゴシック"/></font><font><b val="1"/><i val="0"/><strike val="0"/><u val="none"/><sz val="9"/><color rgb="FF000000"/><name val="MS Pゴシック"/></font><font><b val="0"/><i val="0"/><strike val="0"/><u val="none"/><sz val="10"/><color rgb="FF000000"/><name val="MS Pゴシック"/></font><font><b val="1"/><i val="0"/><strike val="0"/><u val="none"/><sz val="10"/><color rgb="FFFFFFFF"/><name val="Arial"/></font><font><b val="1"/><i val="0"/><strike val="0"/><u val="none"/><sz val="10"/><color rgb="FF000000"/><name val="MS Pゴシック"/></font><font><b val="1"/><i val="0"/><strike val="0"/><u val="none"/><sz val="9"/><color rgb="FFFFFFFF"/><name val="MS Pゴシック"/></font><font><b val="0"/><i val="0"/><strike val="0"/><u val="none"/><sz val="11"/><color rgb="FF000000"/><name val="MS Pゴシック"/></font><font><b val="1"/><i val="0"/><strike val="0"/><u val="none"/><sz val="24"/><color rgb="FF009900"/><name val="MS Pゴシック"/></font><font><b val="1"/><i val="0"/><strike val="0"/><u val="none"/><sz val="20"/><color rgb="FF000000"/><name val="MS Pゴシック"/></font><font><b val="1"/><i val="0"/><strike val="0"/><u val="none"/><sz val="28"/><color rgb="FF009900"/><name val="MS Pゴシック"/></font></fonts><fills count="6"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"><fgColor rgb="FFFFFFFF"/><bgColor rgb="FF000000"/></patternFill></fill><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FF33CC33"/><bgColor rgb="FFFFFFFF"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FF99FF99"/><bgColor rgb="FFFFFFFF"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFDDFFDD"/><bgColor rgb="FFFFFFFF"/></patternFill></fill></fills><borders count="13"><border/><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom></border><border><bottom style="medium"><color rgb="FF009900"/></bottom></border><border><left style="thin"><color rgb="FF009900"/></left><top style="thin"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom></border><border><left style="thin"><color rgb="FF009900"/></left><top style="thin"><color rgb="FF009900"/></top></border><border><top style="thin"><color rgb="FF009900"/></top></border><border><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top></border><border><left style="thin"><color rgb="FF009900"/></left><bottom style="thin"><color rgb="FF009900"/></bottom></border><border><bottom style="thin"><color rgb="FF009900"/></bottom></border><border><right style="thin"><color rgb="FF009900"/></right><bottom style="thin"><color rgb="FF009900"/></bottom></border><border><bottom style="double"><color rgb="FF009900"/></bottom></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><bottom style="thin"><color rgb="FF009900"/></bottom></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="82"><xf xfId="0" fontId="0" numFmtId="0" fillId="2" borderId="0" applyFont="0" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="1" numFmtId="0" fillId="2" borderId="1" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="2" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="1"><alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="true" shrinkToFit="false"/></xf><xf xfId="0" fontId="3" numFmtId="0" fillId="3" borderId="1" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="3" quotePrefix="1" numFmtId="0" fillId="3" borderId="1" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="1"><alignment horizontal="general" vertical="top" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="4" borderId="1" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="9" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="164" fillId="2" borderId="3" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="4" numFmtId="0" fillId="2" borderId="3" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="9" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="9" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="10" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="166" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="167" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="5" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="5" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="165" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="3" fillId="2" borderId="1" applyFont="1" applyNumberFormat="1" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="2" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="1"><alignment horizontal="general" vertical="top" textRotation="0" wrapText="true" shrinkToFit="false"/></xf><xf xfId="0" fontId="0" numFmtId="0" fillId="2" borderId="1" applyFont="0" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="true" shrinkToFit="false"/></xf><xf xfId="0" fontId="5" numFmtId="0" fillId="3" borderId="4" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="5" numFmtId="0" fillId="3" borderId="5" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="5" numFmtId="0" fillId="3" borderId="6" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="5" numFmtId="0" fillId="3" borderId="7" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="5" numFmtId="0" fillId="3" borderId="8" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="5" numFmtId="0" fillId="3" borderId="9" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="0" numFmtId="0" fillId="2" borderId="1" applyFont="0" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="1" numFmtId="0" fillId="2" borderId="1" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="6" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="7" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="7" numFmtId="0" fillId="2" borderId="2" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="8" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="5" numFmtId="0" fillId="3" borderId="1" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="2" borderId="10" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="9" numFmtId="0" fillId="2" borderId="0" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="0" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="9" numFmtId="0" fillId="2" borderId="10" applyFont="1" applyNumberFormat="0" applyFill="0" applyBorder="1" applyAlignment="0"><alignment horizontal="general" vertical="center" textRotation="0" wrapText="false" shrinkToFit="false"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="3" borderId="1" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="3" borderId="11" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf><xf xfId="0" fontId="2" numFmtId="0" fillId="3" borderId="12" applyFont="1" applyNumberFormat="0" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" textRotation="0" wrapText="false" shrinkToFit="true"/></xf></cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles><dxfs count="4"><dxf><font><sz val="10"/><color rgb="FF0000FF"/><name val="Calibri"/></font><numFmt numFmtId="164" formatCode="General"/><alignment/><border/></dxf><dxf><font><sz val="10"/><color rgb="FFFF0000"/><name val="Calibri"/></font><numFmt numFmtId="164" formatCode="General"/><alignment/><border/></dxf><dxf><font><sz val="10"/><color rgb="FF0000FF"/><name val="Calibri"/></font><numFmt numFmtId="164" formatCode="General"/><alignment/><border/></dxf><dxf><font><sz val="10"/><color rgb="FFFF0000"/><name val="Calibri"/></font><numFmt numFmtId="164" formatCode="General"/><alignment/><border/></dxf></dxfs><tableStyles defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotTableStyle1"/></styleSheet>
diff --git a/tests/xml/output/xl/workbook.xml b/tests/xml/output/xl/workbook.xml
new file mode 100644
index 0000000..dd4364c
--- /dev/null
+++ b/tests/xml/output/xl/workbook.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<workbook xml:space="preserve" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4505"/><workbookPr codeName="ThisWorkbook"/><bookViews><workbookView activeTab="0" autoFilterDateGrouping="1" firstSheet="0" minimized="0" showHorizontalScroll="1" showSheetTabs="1" showVerticalScroll="1" tabRatio="600" visibility="visible"/></bookViews><sheets>
+ <sheet name="表紙" sheetId="1" r:id="rId4"/><!-- 条件付き書式なしのシート -->
+ <sheet name="日別_Y" sheetId="2" r:id="rId5"/><!-- 条件付き書式ありのシート -->
+</sheets><calcPr calcId="999999" calcMode="auto" calcCompleted="0" fullCalcOnLoad="1"/>
+<definedNames>
+ <definedName name="_xlnm.Print_Area" localSheetId="0">'表紙'!$A$18:$A:$18</definedName>
+ <definedName name="_xlnm.Print_Area" localSheetId="1">'日別_Y'!$A$18:$A:$18</definedName>
+</definedNames>
+</workbook>
diff --git a/tests/xml/output/xl/worksheets/sheet1.xml b/tests/xml/output/xl/worksheets/sheet1.xml
new file mode 100644
index 0000000..3ec2727
--- /dev/null
+++ b/tests/xml/output/xl/worksheets/sheet1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<worksheet xml:space="preserve" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
+ <sheetData>
+ <row r="18" s="11">
+ <c r="A18" s="11"><v>41111</v></c>
+ </row>
+ </sheetData>
+</worksheet>
diff --git a/tests/xml/output/xl/worksheets/sheet2.xml b/tests/xml/output/xl/worksheets/sheet2.xml
new file mode 100644
index 0000000..9846bae
--- /dev/null
+++ b/tests/xml/output/xl/worksheets/sheet2.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<worksheet xml:space="preserve" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
+ <sheetData>
+ <row r="18" s="11">
+ <c r="A18" s="11"><v>41111</v></c>
+ <c r="B18" s="11"><v>1234</v></c>
+ <c r="C18" s="11"/>
+ </row>
+ </sheetData>
+<conditionalFormatting />
+<pageMargins />
+</worksheet>
diff --git a/tests/xml/template/xl/_rels/workbook.xml.rels b/tests/xml/template/xl/_rels/workbook.xml.rels
new file mode 100644
index 0000000..62b8d16
--- /dev/null
+++ b/tests/xml/template/xl/_rels/workbook.xml.rels
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet2.xml"/>
+ <Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet3.xml"/>
+</Relationships>
diff --git a/tests/xml/template/xl/drawings/drawing1.xml b/tests/xml/template/xl/drawings/drawing1.xml
new file mode 100644
index 0000000..5222e6f
--- /dev/null
+++ b/tests/xml/template/xl/drawings/drawing1.xml
@@ -0,0 +1,68 @@
+<xdr:wsDr xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing"
+ xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <xdr:twoCellAnchor>
+ <xdr:from>
+ <xdr:col>0</xdr:col>
+ <xdr:colOff>0</xdr:colOff>
+ <xdr:row>108</xdr:row>
+ <xdr:rowOff>0</xdr:rowOff>
+ </xdr:from>
+ <xdr:to>
+ <xdr:col>6</xdr:col>
+ <xdr:colOff>619124</xdr:colOff>
+ <xdr:row>125</xdr:row>
+ <xdr:rowOff>0</xdr:rowOff>
+ </xdr:to>
+ <xdr:graphicFrame macro="">
+ <xdr:nvGraphicFramePr>
+ <xdr:cNvPr id="9" name="グラフ 8"/>
+ <xdr:cNvGraphicFramePr>
+ <a:graphicFrameLocks/>
+ </xdr:cNvGraphicFramePr>
+ </xdr:nvGraphicFramePr>
+ <xdr:xfrm>
+ <a:off x="0" y="0"/>
+ <a:ext cx="0" cy="0"/>
+ </xdr:xfrm>
+ <a:graphic>
+ <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/chart">
+ <c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
+ xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId3"/>
+ </a:graphicData>
+ </a:graphic>
+ </xdr:graphicFrame>
+ <xdr:clientData/>
+ </xdr:twoCellAnchor>
+ <xdr:twoCellAnchor>
+ <xdr:from>
+ <xdr:col>7</xdr:col>
+ <xdr:colOff>285751</xdr:colOff>
+ <xdr:row>108</xdr:row>
+ <xdr:rowOff>0</xdr:rowOff>
+ </xdr:from>
+ <xdr:to>
+ <xdr:col>15</xdr:col>
+ <xdr:colOff>9525</xdr:colOff>
+ <xdr:row>125</xdr:row>
+ <xdr:rowOff>0</xdr:rowOff>
+ </xdr:to>
+ <xdr:graphicFrame macro="">
+ <xdr:nvGraphicFramePr>
+ <xdr:cNvPr id="10" name="グラフ 9"/>
+ <xdr:cNvGraphicFramePr>
+ <a:graphicFrameLocks/>
+ </xdr:cNvGraphicFramePr>
+ </xdr:nvGraphicFramePr>
+ <xdr:xfrm>
+ <a:off x="0" y="0"/>
+ <a:ext cx="0" cy="0"/>
+ </xdr:xfrm>
+ <a:graphic>
+ <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/chart">
+ <c:chart xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId4"/>
+ </a:graphicData>
+ </a:graphic>
+ </xdr:graphicFrame>
+ <xdr:clientData/>
+ </xdr:twoCellAnchor>
+</xdr:wsDr>
diff --git a/tests/xml/template/xl/sharedStrings.xml b/tests/xml/template/xl/sharedStrings.xml
new file mode 100644
index 0000000..d96aa8b
--- /dev/null
+++ b/tests/xml/template/xl/sharedStrings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="2" uniqueCount="2">
+ <si><t>test01</t></si>
+ <si><t>test02</t></si>
+</sst>
diff --git a/tests/xml/template/xl/styles.xml b/tests/xml/template/xl/styles.xml
new file mode 100644
index 0000000..7dab59d
--- /dev/null
+++ b/tests/xml/template/xl/styles.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><numFmts count="9"><numFmt numFmtId="7" formatCode="&quot;¥&quot;#,##0.00;&quot;¥&quot;\-#,##0.00"/><numFmt numFmtId="176" formatCode="&quot;¥&quot;#,##0&quot;&quot;"/><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/><numFmt numFmtId="178" formatCode="yyyy/mm"/><numFmt numFmtId="179" formatCode="00&quot;:00&quot;"/><numFmt numFmtId="180" formatCode="\+0.00;\-0.00;0"/><numFmt numFmtId="181" formatCode="\+0.0;\-0.0;0"/><numFmt numFmtId="182" formatCode="&quot;¥&quot;#,##0.00"/><numFmt numFmtId="183" formatCode="0.0"/></numFmts><fonts count="17" x14ac:knownFonts="1"><font><sz val="9"/><color theme="1"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><sz val="6"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/></font><font><b/><sz val="9"/><color theme="0"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><b/><sz val="9"/><color theme="1"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><sz val="11"/><color theme="1"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><sz val="10"/><color theme="1"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><b/><sz val="10"/><color theme="1"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><b/><sz val="24"/><color rgb="FF009900"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><b/><sz val="20"/><color theme="1"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><b/><sz val="10"/><color theme="0"/><name val="Arial"/><family val="2"/></font><font><sz val="6"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><b/><sz val="10"/><color theme="0"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><b/><sz val="28"/><color rgb="FF009900"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><sz val="10"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><sz val="10"/><color theme="0" tint="-0.499984740745262"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><sz val="9"/><color rgb="FF0000FF"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font><font><sz val="9"/><color rgb="FF006600"/><name val="MS Pゴシック"/><family val="3"/><charset val="128"/><scheme val="minor"/></font></fonts><fills count="8"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FF33CC33"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FF99FF99"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFFFFFCC"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor theme="3" tint="0.79998168889431442"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFFFCCFF"/><bgColor indexed="64"/></patternFill></fill><fill><patternFill patternType="solid"><fgColor rgb="FFDDFFDD"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="33"><border><left/><right/><top/><bottom/><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right/><top/><bottom style="double"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right/><top/><bottom style="medium"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top style="thin"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top style="thin"><color rgb="FF009900"/></top><bottom/><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top/><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="hair"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="hair"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top/><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="double"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top style="thin"><color rgb="FF009900"/></top><bottom style="double"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right/><top style="thin"><color rgb="FF009900"/></top><bottom style="double"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom/><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top/><bottom/><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="double"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom/><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top/><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top/><bottom/><diagonal/></border><border><left/><right/><top style="thin"><color rgb="FF009900"/></top><bottom/><diagonal/></border><border><left/><right/><top/><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top style="double"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top style="double"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top style="double"><color rgb="FF009900"/></top><bottom/><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="double"><color rgb="FF009900"/></top><bottom style="thin"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="medium"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right style="thin"><color rgb="FF009900"/></right><top/><bottom style="double"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top/><bottom style="medium"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top/><bottom style="medium"><color rgb="FF009900"/></bottom><diagonal/></border><border><left style="thin"><color rgb="FF009900"/></left><right/><top style="thin"><color rgb="FF009900"/></top><bottom style="medium"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top style="thin"><color rgb="FF009900"/></top><bottom style="medium"><color rgb="FF009900"/></bottom><diagonal/></border><border><left/><right style="thin"><color rgb="FF009900"/></right><top style="double"><color rgb="FF009900"/></top><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"><alignment vertical="center"/></xf></cellStyleXfs><cellXfs count="311"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="3" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="3" xfId="0" applyFont="1" applyBorder="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment wrapText="1"/></xf><xf numFmtId="0" fontId="9" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="9" fillId="2" borderId="1" xfId="0" quotePrefix="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="top"/></xf><xf numFmtId="0" fontId="5" fillId="3" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="left" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="7" fontId="5" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="3" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="5" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="5" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="5" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="6" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="6" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="6" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="11" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="177" fontId="5" fillId="0" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="177" fontId="5" fillId="5" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="177" fontId="5" fillId="6" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="7" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="0" borderId="4" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="14" fillId="0" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="180" fontId="14" fillId="0" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="181" fontId="14" fillId="0" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="7" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="14" fillId="7" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="180" fontId="14" fillId="7" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="181" fontId="14" fillId="7" borderId="8" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="left" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="left" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="14" fillId="0" borderId="0" xfId="0" applyFont="1"><alignment vertical="center"/></xf><xf numFmtId="178" fontId="14" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1"><alignment vertical="center"/></xf><xf numFmtId="10" fontId="14" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1"><alignment vertical="center"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="14" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1"><alignment vertical="center"/></xf><xf numFmtId="182" fontId="14" fillId="0" borderId="0" xfId="0" applyNumberFormat="1" applyFont="1"><alignment vertical="center"/></xf><xf numFmtId="3" fontId="5" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="5" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="6" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="5" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="6" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="5" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="6" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="4" borderId="27" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="4" borderId="27" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="4" borderId="27" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="4" borderId="27" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="4" borderId="27" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="4" borderId="27" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="0" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="9" fontId="5" fillId="7" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="26" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="11" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="0" xfId="0" applyFont="1" applyFill="1"><alignment vertical="center"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="177" fontId="5" fillId="7" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="4" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="7" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="7" fillId="0" borderId="3" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="8" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="3" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="2" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="3" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="top" wrapText="1"/></xf><xf numFmtId="0" fontId="2" fillId="2" borderId="5" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="2" fillId="2" borderId="20" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="2" fillId="2" borderId="17" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="2" fillId="2" borderId="6" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="2" fillId="2" borderId="21" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="2" fillId="2" borderId="18" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="178" fontId="5" fillId="0" borderId="13" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="7" borderId="13" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="7" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="1" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="2" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="12" fillId="0" borderId="0" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="12" fillId="0" borderId="2" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="13" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="9" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="0" borderId="1" xfId="0" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="0" xfId="0" applyFont="1" applyAlignment="1"><alignment vertical="center"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="6" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="21" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="18" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="6" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="21" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="18" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="5" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="20" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="17" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="6" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="21" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="2" borderId="18" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="11" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="12" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="5" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="17" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="14" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="19" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="28" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="29" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="30" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="31" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="22" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="23" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="16" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="7" borderId="16" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="15" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="30" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="31" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="6" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="18" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="7" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="7" borderId="16" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="0" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="178" fontId="5" fillId="0" borderId="16" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="179" fontId="5" fillId="7" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="179" fontId="5" fillId="7" borderId="16" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="179" fontId="5" fillId="0" borderId="4" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="179" fontId="5" fillId="0" borderId="16" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="13" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="9" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="5" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="6" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="6" fillId="4" borderId="10" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="5" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" wrapText="1" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="16" fillId="7" borderId="14" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="16" fillId="7" borderId="19" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="0" fillId="7" borderId="6" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="0" fillId="7" borderId="18" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="15" fillId="7" borderId="5" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="15" fillId="7" borderId="17" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="13" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="7" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="15" fillId="0" borderId="5" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="15" fillId="0" borderId="17" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="13" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="1" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="16" fillId="0" borderId="14" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="16" fillId="0" borderId="19" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="6" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="0" fillId="0" borderId="18" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="15" fillId="0" borderId="14" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="15" fillId="0" borderId="19" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="13" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="9" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="5" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="17" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="6" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="18" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="15" fillId="0" borderId="24" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="15" fillId="0" borderId="32" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="177" fontId="6" fillId="4" borderId="11" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="177" fontId="6" fillId="4" borderId="12" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="177" fontId="6" fillId="4" borderId="15" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="13" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" wrapText="1"/></xf><xf numFmtId="0" fontId="11" fillId="2" borderId="9" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="center" vertical="center" wrapText="1"/></xf><xf numFmtId="176" fontId="5" fillId="0" borderId="25" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="10" fontId="5" fillId="0" borderId="25" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="3" fontId="5" fillId="0" borderId="25" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="0" fontId="13" fillId="0" borderId="25" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment vertical="center" shrinkToFit="1"/></xf><xf numFmtId="183" fontId="5" fillId="0" borderId="25" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf><xf numFmtId="182" fontId="5" fillId="0" borderId="25" xfId="0" applyNumberFormat="1" applyFont="1" applyFill="1" applyBorder="1" applyAlignment="1"><alignment horizontal="right" vertical="center" shrinkToFit="1"/></xf></cellXfs><cellStyles count="1"><cellStyle name="標準" xfId="0" builtinId="0"/></cellStyles><dxfs count="82"><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><b/><i val="0"/></font></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FF0000FF"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf><dxf><font><strike val="0"/><color rgb="FFFF0000"/></font><numFmt numFmtId="177" formatCode="yyyy/mm/dd\ \(aaa\)"/></dxf></dxfs><tableStyles count="0" defaultTableStyle="TableStyleMedium2" defaultPivotStyle="PivotStyleLight16"/><colors><mruColors><color rgb="FF0000FF"/><color rgb="FFFF0000"/><color rgb="FFDDFFDD"/><color rgb="FF009900"/><color rgb="FFFF99CC"/><color rgb="FFFFFF99"/><color rgb="FFFFFFCC"/><color rgb="FFFFCCFF"/><color rgb="FFD3FFD3"/><color rgb="FF006600"/></mruColors></colors><extLst><ext uri="{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"><x14:slicerStyles defaultSlicerStyle="SlicerStyleLight1"/></ext></extLst></styleSheet>
diff --git a/tests/xml/template/xl/workbook.xml b/tests/xml/template/xl/workbook.xml
new file mode 100644
index 0000000..51c6bb7
--- /dev/null
+++ b/tests/xml/template/xl/workbook.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<workbook xml:space="preserve" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4505"/><workbookPr codeName="ThisWorkbook"/><bookViews><workbookView activeTab="0" autoFilterDateGrouping="1" firstSheet="0" minimized="0" showHorizontalScroll="1" showSheetTabs="1" showVerticalScroll="1" tabRatio="600" visibility="visible"/></bookViews><sheets>
+ <sheet name="表紙" sheetId="4" r:id="rId4"/><!-- 条件付き書式なしのシート -->
+ <sheet name="日別_Y" sheetId="5" r:id="rId5"/><!-- 条件付き書式ありのシート -->
+ <sheet name="日別_YDN" sheetId="6" r:id="rId6"/><!-- 出力側に存在しないシート -->
+</sheets><calcPr calcId="999999" calcMode="auto" calcCompleted="0" fullCalcOnLoad="1"/>
+<definedNames>
+ <definedName name="_xlnm.Print_Area" localSheetId="0">'表紙'!$A$18:$A$18</definedName><!-- 表紙の印刷範囲設定 -->
+ <definedName name="_xlnm.Print_Area" localSheetId="1">'日別_Y'!$A$18:$A$18</definedName><!-- 日別Yの印刷範囲設定 -->
+ <definedName name="_xlnm.Print_Area" localSheetId="2">'日別_YDN'!$A$18:$A$18</definedName><!-- 日別YDNの印刷範囲設定 -->
+</definedNames>
+</workbook>
diff --git a/tests/xml/template/xl/worksheets/_rels/sheet1.xml.rels b/tests/xml/template/xl/worksheets/_rels/sheet1.xml.rels
new file mode 100644
index 0000000..4439079
--- /dev/null
+++ b/tests/xml/template/xl/worksheets/_rels/sheet1.xml.rels
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings" Target="../printerSettings/printerSettings1.bin"/>
+</Relationships>
diff --git a/tests/xml/template/xl/worksheets/_rels/sheet2.xml.rels b/tests/xml/template/xl/worksheets/_rels/sheet2.xml.rels
new file mode 100644
index 0000000..d11cff2
--- /dev/null
+++ b/tests/xml/template/xl/worksheets/_rels/sheet2.xml.rels
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" Target="../drawings/drawing1.xml"/>
+ <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" Target="../drawings/drawing2.xml"/>
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings" Target="../printerSettings/printerSettings2.bin"/>
+</Relationships>
diff --git a/tests/xml/template/xl/worksheets/_rels/sheet3.xml.rels b/tests/xml/template/xl/worksheets/_rels/sheet3.xml.rels
new file mode 100644
index 0000000..ea29b7a
--- /dev/null
+++ b/tests/xml/template/xl/worksheets/_rels/sheet3.xml.rels
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" Target="../drawings/drawing3.xml"/>
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings" Target="../printerSettings/printerSettings2.bin"/>
+</Relationships>
diff --git a/tests/xml/template/xl/worksheets/sheet1.xml b/tests/xml/template/xl/worksheets/sheet1.xml
new file mode 100644
index 0000000..d1e903e
--- /dev/null
+++ b/tests/xml/template/xl/worksheets/sheet1.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<worksheet xml:space="preserve" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
+ <sheetData>
+ <row r="18" s="99">
+ <c r="A18" s="33"><v>41111</v></c>
+ </row>
+ </sheetData>
+</worksheet>
diff --git a/tests/xml/template/xl/worksheets/sheet2.xml b/tests/xml/template/xl/worksheets/sheet2.xml
new file mode 100644
index 0000000..dd793db
--- /dev/null
+++ b/tests/xml/template/xl/worksheets/sheet2.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<worksheet xml:space="preserve" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
+ <sheetData>
+ <row r="18" s="99">
+ <c r="A18" s="33"><v>41111</v></c>
+ <c r="B18" s="33"/>
+ <c r="C18" s="33"/>
+ </row>
+ </sheetData>
+<conditionalFormatting><font /></conditionalFormatting>
+<pageMargins />
+</worksheet>