[NPOI] "A part with the name '/xl/styles.xml' already exists" エラーへの対処

### 概要

NPOIワークブックオブジェクトの生成時に、以下のような例外が発生する原因と対処方法。

```
A part with the name '/xl/styles.xml' already exists : Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]
```

### ケース1. XLSXファイル読み込み時にImportOptionパラメーターを指定している

```cs:エラー再現用プログラム
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;

namespace NPOITest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("XLSXファイルの読み込み開始");
                using (var stream = new FileStream(@"C:\Temp\MyBook2007.xlsx", FileMode.Open))
                {
                    var book = WorkbookFactory.Create(stream, ImportOption.TextOnly);
                }
                Console.WriteLine("正常終了");
            }
            catch (Exception ex)
            {
                Console.Write("例外発生:{0}{1}{0}", Environment.NewLine, ex.ToString());
            }
            Console.ReadLine();
        }
    }
}
```
```:実行結果
XLSXファイルの読み込み開始
例外発生:
NPOI.OpenXml4Net.Exceptions.PartAlreadyExistsException: A part with the name '/xl/styles.xml' already exists : Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]
   場所 NPOI.POIXMLDocumentPart.CreateRelationship(POIXMLRelation descriptor, POIXMLFactory factory, Int32 idx, Boolean noRelation)
   場所 NPOI.XSSF.UserModel.XSSFWorkbook.OnDocumentRead()
   場所 NPOI.POIXMLDocument.Load(POIXMLFactory factory)
   場所 NPOI.XSSF.UserModel.XSSFWorkbook..ctor(OPCPackage pkg)
   場所 NPOI.SS.UserModel.WorkbookFactory.Create(Stream inputStream)
   場所 NPOI.SS.UserModel.WorkbookFactory.Create(Stream inputStream, ImportOption importOption)
   場所 NPOITest.Program.Main(String[] args) 場所 C:\Source\Repos\NPOITest\NPOITest\Program.cs:行 18
```

- 原因
 - `WorkbookFactory.Create()`でワークブック生成する場合、第2パラメーター`ImportOption`を指定できるのは、ファイルがXLS形式（Excel2003以前）の場合のみ。XLSX形式（Excel2007以降）の場合は指定してはいけない。
- 対処
 - 以下のとおり、第2パラメーターを指定しないように書き換える。
 - `var book = WorkbookFactory.Create(stream);`

### ケース2. XLSXファイルを読み込む前にXLSファイルをImportOptionパラメーターありで読み込んでいる

```cs:エラー再現用プログラム
using System;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;

namespace NPOITest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("1. XLSファイルの読み込み開始");
                using (var stream = new FileStream(@"C:\Temp\MyBook2003.xls", FileMode.Open))
                {
                    var book2003 = WorkbookFactory.Create(stream, ImportOption.TextOnly);
                }
                Console.WriteLine("2. XLSXファイルの読み込み開始");
                using (var stream = new FileStream(@"C:\Temp\MyBook2007.xlsx", FileMode.Open))
                {
                    var book2007 = WorkbookFactory.Create(stream);
                }
                Console.WriteLine("正常終了");
            }
            catch (Exception ex)
            {
                Console.Write("例外発生:{0}{1}{0}", Environment.NewLine, ex.ToString());
            }
            Console.ReadLine();
        }
    }
}
```

```:実行結果
1. XLSファイルの読み込み開始
2. XLSXファイルの読み込み開始
例外発生:
NPOI.OpenXml4Net.Exceptions.PartAlreadyExistsException: A part with the name '/xl/styles.xml' already exists : Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]
   場所 NPOI.POIXMLDocumentPart.CreateRelationship(POIXMLRelation descriptor, POIXMLFactory factory, Int32 idx, Boolean noRelation)
   場所 NPOI.XSSF.UserModel.XSSFWorkbook.OnDocumentRead()
   場所 NPOI.POIXMLDocument.Load(POIXMLFactory factory)
   場所 NPOI.XSSF.UserModel.XSSFWorkbook..ctor(OPCPackage pkg)
   場所 NPOI.SS.UserModel.WorkbookFactory.Create(Stream inputStream)
   場所 NPOITest.Program.Main(String[] args) 場所 C:\Source\Repos\NPOITest\NPOITest\Program.cs:行 23
```

- 原因
 - 2つの`WorkbookFactory.Create()`を個別に実行した場合はエラーにならないが、この順で実行した場合はエラーとなる。ファイルがXLS形式（Excel2003以前）であっても、その後でXLSX形式（Excel2007以降）のファイルを読み込む可能性がある場合は`ImportOption`を指定してはいけない。
- 対処
 - XLSの読み込み処理をケース1と同様、第2パラメーターを指定しないように書き換える。
 - `var book2003 = WorkbookFactory.Create(stream);`

### 補足
- NPOI version 2.4.1で確認した。