日本語環境、個別の機能に関する質問

日本語環境での動作や個別の機能についてなど、お客様からよく寄せられる質問です。


ファイル入出力、ワークブック、ワークシートに関する質問

  1. 全角かっこを含むシート名が名前定義されているファイルが開けません
  2. Excel 2010/2013 以降の読み取りパスワードが設定されたファイルを開けません
  3. Excel 2016 で生成されたシンプルなワークブックにも関わらず、読み込みエラーが発生します
  4. 出力したファイルを Excel で開くと「変更を保存しますか?」のメッセージが表示されます
  5. ワークブックを CSV 形式で出力すると日本語が文字化けします
  6. ワークシートを印刷する際に、改ページ位置が MS Excel と異なります
  7. 出力されたワークブックを iOS、Android または OpenOffice で読み込めますか
  8. 出力結果のワークブックにマクロを埋め込めますか
  9. ドキュメントのプロパティ情報 (ファイルの概要など) を取得、設定できますか
  10. 大量のデータを扱いたいのですが、パフォーマンスが気になります
  11. マルチ スレッドの処理は可能ですか

セル、書式設定、ワークシート内の設定に関する質問

  1. セルの値の取得や設定は、どのプロパティを使用すれば良いですか
  2. ワークブックのデフォルト フォントが日本語版 Excel と異なります
  3. セルに日本語フォントを指定するにはどうすれば良いですか
  4. セルの書式に設定した通貨記号の円マーク (¥) が正しく表示されません
  5. セルに設定された "=DOLLAR" 関数を参照すると、"=USDOLLAR" が返されます
  6. ワークブックの日付書式が正しく反映されません
  7. アスタリスク (*) 付きやユーザー定義の日付書式が正しく反映されません
  8. 出力結果のワークブックに、ふりがなが反映されません
  9. セルの文字列の先頭にある全角スペースが出力ファイルに正しく反映されません
  10. セルに設定した列幅が Excel ファイルに正しく反映されません
  11. 読み込んだワークブックのフォントや列幅が出力ファイルに正しく反映されません
  12. シートを保護 (ロック) する際に、保護対象のオプション項目を指定できますか
  13. 結合セルを含んだセル範囲に対する、行や列の挿入や削除ができません

シェイプ、フォーム コントロール、オブジェクトに関する質問

  1. オートシェイプやイメージのサイズが、出力ファイルに正しく反映されません
  2. ワークブックの読み込みや出力の際に、いくつかのオートシェイプが削除されます
  3. ワークブック上のコメントやコントロール (ボタン、チェックボックスなど) が消えてしまいます
  4. オートシェイプに関連付けられた VBA マクロが出力ファイルで動作しません
  5. ワークシート内の画像をシェイプ (IShape オブジェクト) として参照できません
  6. 縦書きテキストボックスが、出力結果のワークブックでは横書きに変更されてしまいます

その他の Excel 互換機能、WorkbookView コントロールに関する質問

  1. オートフィルターを設定、操作できますか
  2. ピボット テーブル付きのワークブックの読み込みや設定は可能ですか
  3. セルの書式設定「縮小して全体を表示する」が WorkbookView での表示に反映されません
  4. WorkbookView コントロールの UI を日本語で表示できますか
  5. Excel 上でコピーしたセルが最大で 65,536 行までしか WorkbookView コントロールに貼り付けられません

ページトップへ

ファイル入出力、ワークブック、ワークシートに関する質問

  1. 全角かっこを含むシート名が名前定義されているファイルが開けません

    この現象は MS Excel で生成される Open XML (xlsx/xlsm) 形式のワークブックを読み込む場合にのみ発生する既知の制限で、Microsoft Excel 英語版と日本語版の互換性の問題になります (MS Excel 日本語版でシート名に全角かっこを含むワークブックを MS Excel 英語版で読み込み、xlsx/xlsm 形式で出力した場合にも同じ現象が発生します)。

    本来、全角かっこを含むシート名は xlsx/xlsm に含まれる workbook.xml ファイル内では単一引用符 (') で囲まれるべきですが、残念ながら、MS Excel (英語版) で書き出されたワークブックでは、シート名を単一引用符 (') で囲いません。そのため、例えば MS Excel 英語版にて全角かっこを含むシート名を「名前定義」したワークブックを、日本語版の MS Excel で開く場合にエラーが発生します。

    SpreadsheetGear は、MS Excel 英語版との互換性をベースに開発されていますので、出力されたワークブックを MS Excel 日本語版で読み込む際にも上記のエラーが発生します。残念ながら、現在までのところ、完全には Excel 日本語版にローカライズされていません。将来的に多言語へのローカライズも検討されていますが、具体的な対応予定はありません。

    現在の回避策は、

    • Excel 97-2003 (xls) 形式で出力する
    • 単一引用符 (') で囲まないとシート名として判断されない文字 (例えば、本件の全角小かっこ( や )、また、全角アンパサンド (&) など) を使用しない
    のいずれかになります。

    ページトップへ

  2. Excel 2010/2013 以降の読み取りパスワードが設定されたファイルを開けません
    xls 形式の場合

    SpreadsheetGear 製品では Excel 97-2003 (xls) 形式のワークブックの読み込み時に、下記の 2 つの暗号化のみをサポートしています。

    • 弱い暗号化 (XOR)
    • Office 97/2000 互換
    ここで、Excel 2013 以降ではワークブックを暗号化する際に上記の 2 つとは異なる
    • RC4, Microsoft Enhanced Cryptographic Provider v1.0
    の暗号化が設定されるように仕様が変更されたため、SpreadsheetGear では Excel 2013 以降から出力される暗号化された xls 形式のワークブックの読み込み時に「Unsupported encryption method」のエラーが発生します。

    回避策は Excel 2007 デフォルトの暗号化によりパスワード保護されたファイルを使用する方法になります。
    ※参考として、マイクロソフト社が公開する「Office 2013 の暗号化技術と暗号化設定の計画」をご確認ください。


    xlsx/xlsm 形式の場合

    SpreadsheetGear 2010 (Ver. 6) および 2012 (Ver. 7) では、Excel 2007 で作成された xlsx/xlsm 形式の読み取りパスワードが設定されたファイルを開くことは可能ですが、Excel 2010 以降で作成された xlsx/xlsm 形式の読み取りパスワード付きのファイルはサポートされていません。
    ※Excel 2013 以降で生成された xls 形式のワークブックも xlsx/xlsm と同様に、開くことができません。

    Excel 2010 以降で生成された、読み取りパスワード付きのファイルを開く際は「Unsupported or invalid Open XML encryption」のエラーが発生します。これは Excel 2010 以降において SpreadsheetGear でサポートされていない新しい Open XML 暗号形式が採用されているためです。

    回避策は [xls 形式の場合] と同様に、Excel 2007 デフォルトの暗号化によりパスワード保護されたファイルを使用する方法になります。

    なお、xlsx/xlsm 形式の読み込みは SpreadsheetGear 2017 (Ver. 8) 以降でサポートされています。最新版にて動作をご確認ください。

    ページトップへ

  3. Excel 2016 で生成されたシンプルなワークブックにも関わらず、読み込みエラーが発生します

    以前の SpreadsheetGear バージョンでは、Excel Mobile、Excel 2016、Office 365 などで生成されたワークブックを読み込む際に、"Corrupt OpenXML document" の例外がスローされる場合があります。これは旧バージョンにおける Excel の内部データの取り扱い方法が、これらの Excel バージョンに十分に対応していなかったためです。

    これらのワークブックの読み込みは SpreadsheetGear 2012 (7.4.17.102) 以降でサポートされています。最新版にて動作をご確認ください。

    ページトップへ

  4. 出力したファイルを Excel で開くと「変更を保存しますか?」のメッセージが表示されます

    Excel には、calcId というレコードが存在しますが、Excel の各ビルド毎にこの ID が異なるために、現象が発生しています。
    ※本製品では、意図的に古い calcId (Excel 2003 以前) を書き込んでいますが、これは Excel に再計算をさせる目的があるからです。

    回避策として、下記の 2 つの方法が考えられます。

    • 計算式の埋め込まれたセルを値に置き換える
      ワークブックをファイルとして保存する際に、セルに設定された数式の代わりに、数式の結果をセルに書き込むことでファイルを開く際に再計算が行われなくなりますので、変更保存メッセージを抑止することができます。
    • 再計算を [手動] に設定する
      ワークブックを保存する前に、IWorkbookSet.Calculation に Calculation.Manual を設定します。ただし、これにより [F9] ボタンを押下するまで再計算は行われない、という点にご注意ください。
                          // ワークブックのオープン
                          SpreadsheetGear.IWorkbookSet workbookset =
                                        SpreadsheetGear.Factory.GetWorkbookSet(System.Globalization.CultureInfo.CurrentCulture);
                          SpreadsheetGear.IWorkbook workbook = workbookset.Workbooks.Open(@"input.xlsx");
      
                          // 再計算を [手動] に設定する
                          workbookset.Calculation = SpreadsheetGear.Calculation.Manual;
      
                          // ワークブックを出力
                          workbook.SaveAs(@"output.xlsx", SpreadsheetGear.FileFormat.OpenXMLWorkbook);
                        
                          ' ワークブックのオープン
                          Dim workbookset As SpreadsheetGear.IWorkbookSet = _
                                        SpreadsheetGear.Factory.GetWorkbookSet(System.Globalization.CultureInfo.CurrentCulture)
                          Dim workbook As SpreadsheetGear.IWorkbook = workbookset.Workbooks.Open("input.xlsx")
      
                          ' 再計算を [手動] に設定する
                          workbookset.Calculation = SpreadsheetGear.Calculation.Manual
      
                          ' ワークブックを出力
                          workbook.SaveAs("output.xlsx", SpreadsheetGear.FileFormat.OpenXMLWorkbook)
                        

    ページトップへ

  5. ワークブックを CSV 形式で出力すると日本語が文字化けします

    残念ながら、現在までのところ CSV ファイル出力時の Unicode はサポートされていません。

    日本語文字を含むワークブックをテキスト ファイルとして出力する場合は、タブ区切りの Unicode テキスト ファイル形式 (UTF-8 形式) で出力する必要があります。

                  workbook.SaveAs("output.txt", SpreadsheetGear.FileFormat.UnicodeText);
                  // または
                  workbook.SaveToStream(Response.OutputStream, SpreadsheetGear.FileFormat.UnicodeText);
                
                  workbook.SaveAs("output.txt", SpreadsheetGear.FileFormat.UnicodeText)
                  ' または
                  workbook.SaveToStream(Response.OutputStream, SpreadsheetGear.FileFormat.UnicodeText)
                

    ページトップへ

  6. ワークシートを印刷する際に、改ページ位置が MS Excel と異なります

    MS Excel と SpreadsheetGear で、印刷結果の改ページ位置が異なる理由は、下記の 2 つが考えられます。

    • MS Excel と .NET 間の使用フォントによる差異
      SpreadsheetGear では、MS Excel と同じように印刷余白などを読み込み、MS Excel のレンダリング、配置、レイアウト方法など、できる限り同じように処理していますが、両者にはいくつかキーとなる違いがあります。これは主に .NET API での制限によるものです。
      SpreadsheetGear ではアンチエイリアス フォントを使用していますが、MS Excel ではこれを使用していないため、印刷余白やテキストのレイアウトなどに相違が生まれます。これは、印刷時だけでなく、セルに設定した列幅が Excel ファイルに正しく反映されませんなどにも影響します。
    • 自動改ページによる差異
      MS Excel の印刷設定は、プリンター ドライバーの用紙設定に依存せず、変換元のドキュメントにあらかじめ設定されている印刷設定 (用紙サイズ、用紙向きなど) がそのまま印刷結果に反映されます。その一方で、自動改ページ (青の点線で区切られた改ページ) の場合、ページ区切り位置は、出力するプリンターに依存します。
      そのため、SpreadsheetGear では IPageSetup にてワークブックの用紙サイズ、用紙の向き、明示的に設定されている改ページ位置などは参照が可能ですが、自動改ページの場合 (改ページが明示的に設定されていない場合) は、改ページ情報を取得できる API は提供されていません。

    上記の 2 点をふまえた回避策は、印刷範囲をいったんクリアした後で、必要な改ページ位置を明示的に設定する方法になります。

                    // 印刷範囲のクリア
                    worksheet.PageSetup.PrintArea = "";
    
                    // 改ページ情報をいったんクリア
                    worksheet.Cells.PageBreak = SpreadsheetGear.PageBreak.None;
    
                    // 列方向の改ページ位置設定 (10 列目と 20 列目)
                    worksheet.VPageBreaks.Add(cells["J1"]);
                    worksheet.VPageBreaks.Add(cells["T1"]);
    
                    // 行方向の改ページ位置設定 (10 行目と 20 行目)
                    worksheet.HPageBreaks.Add(cells["A11"]);
                    worksheet.HPageBreaks.Add(cells["A21"]);
                  
                    ' 印刷範囲のクリア
                    worksheet.PageSetup.PrintArea = ""
    
                    ' 改ページ情報をいったんクリア
                    worksheet.Cells.PageBreak = SpreadsheetGear.PageBreak.None
    
                    ' 列方向の改ページ位置設定 (10 列目と 20 列目)
                    worksheet.VPageBreaks.Add(cells("J1"))
                    worksheet.VPageBreaks.Add(cells("T1"))
    
                    ' 行方向の改ページ位置設定 (10 行目と 20 行目)
                    worksheet.HPageBreaks.Add(cells("A11"))
                    worksheet.HPageBreaks.Add(cells("A21"))
                  

    また、IPageSetup.FitToPagesWide および FitToPagesTall プロパティにて、各ページの内容が 1 ページに収まることを明示的に指定する方法により、自動改ページによる印刷レイアウトの崩れを抑止できるかと思われますのでそちらについてもご確認ください。

    ページトップへ

  7. 出力されたワークブックを iOS、Android または OpenOffice で読み込めますか

    SpreadsheetGear は Microsoft Excel のファイル仕様への準拠を第一とし、正式には iOS、Android または OpenOffice などのプラットフォームやサードパーティー社で提供される Excel 製品はサポートしていません。

    ただし、試験的に iOS などの環境で参照を可能にするためのオプション (IWorkbookSet.Experimental) を用意しています。下記のコードで出力されるワークブックは iOS などで開けるかと思われます。

                  SpreadsheetGear.IWorkbookSet workbookset = SpreadsheetGear.Factory.GetWorkbookSet(
                                new System.Globalization.CultureInfo(1041));
                  workbookset.Experimental = "OleDbOpenXmlWorkaround";    // サードパーティ向けの回避オプションを指定
    
                  SpreadsheetGear.IWorkbook workbook = workbookset.Workbooks.Add();
                  SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets[0];
                
                  Dim workbookset As SpreadsheetGear.IWorkbookSet = SpreadsheetGear.Factory.GetWorkbookSet(_
                                New System.Globalization.CultureInfo(1041))
                  workbookset.Experimental = "OleDbOpenXmlWorkaround"     ' サードパーティ向けの回避オプションを指定
    
                  Dim workbook As SpreadsheetGear.IWorkbook = workbookset.Workbooks.Add()
                  Dim worksheet As SpreadsheetGear.IWorksheet = workbook.Worksheets(0)
                
    • このオプションは、Open XML 形式のワークブックでのみ有効です
    • OleDb でも有効です
    • あくまでも「試験的」なオプションですので、完全な動作は保証されません

    ページトップへ

  8. 出力結果のワークブックにマクロを埋め込めますか

    VBA マクロを編集したり実行することはできません。

    ただし、VBA マクロを含んだ Excel ファイル (xls/xlsm) を読み込み後、同様のマクロを含んだ状態でワークブックを出力することが可能ですので、例えば、あらかじめマクロを定義してある Excel ファイルを入力ファイルとすることで、出力結果のワークブックに入力ファイルのマクロを反映させることはできます。

    なお、SpreadsheetGear 2009 (Ver. 5) までは Excel 97-2003 (xls) 形式のマクロ付きワークブックの出力のみがサポートされています。Excel 2007 Open XML 形式からの xlsm 出力は SpreadsheetGear 2010 (Ver. 6) 以降でサポートされています。

    ページトップへ

  9. ドキュメントのプロパティ情報 (ファイルの概要など) を取得、設定できますか

    いいえ。ドキュメントのプロパティ情報はサポートされていません。
    Excel ファイルを読み込む際に、これらのプロパティ情報は削除されます。

    ページトップへ

  10. 大量のデータを扱いたいのですが、パフォーマンスが気になります

    アプリケーションの構成はお客様ごとにさまざまですので、SpreadsheetGear ではベンチマーク資料を提供していません

    ただし、多くのお客様からは「他の製品から SpreadsheetGear に切り替えたことでパフォーマンスが顕著に向上した」とのフィードバックを多数いただいております。また SpreadsheetGear は 100% マネージ コードですのでメモリ リークが起こりません。安心してコーディングできるかと思われます。

    具体的な処理パフォーマンスに関しては、製品とともにインストールされるサンプル ソリューションが参照になります。
    Windows スタート メニューから [SpreadsheetGear 2017] の [SpreadsheetGear Explorer Sample C#] と [SpreadsheetGear Explorer Sample VB] を選択すると Visual Studio 2008 用のサンプル ソリューションで製品の機能と実装例を参照することができます。

    このサンプル ソリューションの [Advanced] - [Performance] のデモ サンプルで処理パフォーマンスをご確認いただけます。
    ここでのサンプルでは 50,000 行 x 4 列にデータを出力しています。

    ページトップへ

  11. マルチ スレッドの処理は可能ですか

    SpreadsheetGear は .NET ツールになりますので、マルチスレッドの扱いについては .NET 側の処理に依存します。

    ただし、SpreadsheetGear では、ワークブックセットのコンセプトに基づいて処理していますので、それぞれのワークブックセット毎に異なるスレッドで、そこに含まれる複数のワークブックを処理することが可能です。
    また、IWorkbookSet.GetLock、ReleaseLock、UnwindLock、RewindLock メソッドにより、同一ワークブックセット内のワークブックに対してマルチスレッド処理時の制御を行うことも可能です。

    なお、SpreadsheetGear 2012 (Ver. 7) からは .NET 4.0 以降のアセンブリを使用することでマルチスレッド演算処理がサポートされます。

    ページトップへ

セル、書式設定、ワークシート内の設定に関する質問

  1. セルの値の取得や設定は、どのプロパティを使用すれば良いですか

    Excel および SpreadsheetGear では、日付と時間は数値として格納されます。

    この点を踏まえ、使用用途に合わせて以下の各プロパティを参照します。

    • IRange.Formula: セルに設定された値または数式を取得、設定
    • IRange.Value: 数値を取得、設定
    • IRange.Entry: MS Excel の数式バーに表示されるテキストを取得
    • IRange.Text: 書式設定されたテキストを取得

    例えば、書式設定されたセルに対して値のみを設定する場合は IRange.Formula を使用します。
    日付形式などが書式設定されたセルのテキストを取得する場合は IRange.Text を参照します。

    ページトップへ

  2. ワークブックのデフォルト フォントが日本語版 Excel と異なります

    ワークブック生成時に明示的にロケールが指定されていない場合は、Microsoft Excel 英語版に基づいて表現されます。例えば WorkbookSet クラスにロケールを指定しない場合、生成されるワークブックのデフォルト フォントには Calibri 11 pt. が設定されます。
    ※ただし xlsx/xlsm 形式の場合は、MS Excel の言語バージョンのデフォルト設定に依存します。

    そこで日本語環境で使用する場合は、明示的に WorkbookSet クラスに地域 (ロケール) を設定することを推奨しています。[日本] の場合は CultureInfo(1041) や CultureInfo("ja-JP")、また日本語ロケールでの使用がはっきりしている場合は System.Globalization.CultureInfo.CurrentCulture を設定します。

                  // WorkbookSet クラスのロケールを「日本」に設定
                  SpreadsheetGear.IWorkbookSet workbookset = SpreadsheetGear.Factory.GetWorkbookSet(
                                new System.Globalization.CultureInfo(1041));
                  SpreadsheetGear.IWorkbook workbook = workbookset.Workbooks.Add();
                  SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets[0];
                
                  ' WorkbookSet クラスのロケールを「日本」に設定
                  Dim workbookset As SpreadsheetGear.IWorkbookSet = SpreadsheetGear.Factory.GetWorkbookSet( _
                                New System.Globalization.CultureInfo(1041))
                  Dim workbook As SpreadsheetGear.IWorkbook = workbookset.Workbooks.Add()
                  Dim worksheet As SpreadsheetGear.IWorksheet = workbook.Worksheets(0)
                

    ページトップへ

  3. セルに日本語フォントを指定するにはどうすれば良いですか

    セルのフォントの詳細を設定するには、IFont インターフェースを使用します。

                  SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
                  SpreadsheetGear.IWorksheet  worksheet = workbook.Worksheets[0];
                  SpreadsheetGear.IRange cells = worksheet.Cells;
    
                  // シート全体
                  worksheet.Cells.Font.Name = "MS P明朝";
                  // セル A1 から E5 まで
                  cells["A1:E5"].Font.Name = "MS Pゴシック";
                
                  Dim workbook As SpreadsheetGear.IWorkbook = SpreadsheetGear.Factory.GetWorkbook()
                  Dim worksheet As SpreadsheetGear.IWorksheet = workbook.Worksheets(0)
                  Dim cells As SpreadsheetGear.IRange = worksheet.Cells
    
                  ' シート全体
                  worksheet.Cells.Font.Name = "MS P明朝"
                  ' セル A1 から E5 まで
                  cells("A1:E5").Font.Name = "MS Pゴシック"
                

    ページトップへ

  4. セルの書式に設定した通貨記号の円マーク (¥) が正しく表示されません

    セルの書式設定には、NumberFormat プロパティを使用します。

    例えば、セル A1 に円マーク (¥) の通貨書式を適用するには、次のように記述します。

                  SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
                  SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets[0];
                  SpreadsheetGear.IRange cells = worksheet.Cells;
                  cells["A1"].Value = 12345.0;
                  cells["A1"].NumberFormat = @"¥¥#,##0.00;¥¥-#,##0.00"
                
                  Dim workbook As SpreadsheetGear.IWorkbook = SpreadsheetGear.Factory.GetWorkbook()
                  Dim worksheet As SpreadsheetGear.IWorksheet = workbook.Worksheets(0)
                  Dim cells As SpreadsheetGear.IRange = worksheet.Cells
                  cells("A1").Value = 12345.0
                  cells("A1").NumberFormat = "¥¥#,##0"
                

    ページトップへ

  5. セルに設定された "=DOLLAR" 関数を参照すると、"=USDOLLAR" が返されます

    関数名は、すべて Microsoft Excel 英語版に基づいて表現されます。例えば、Microsoft Excel の日本語版の DOLLAR 関数は USDOLLAR、また YEN 関数は DOLLAR と表現されます。YEN 関数は Microsoft Excel 日本語版の関数ですので、ご注意ください。

    ページトップへ

  6. ワークブックの日付書式が正しく反映されません

    作成されたワークブックに設定する日付書式が正しく反映されない場合があります。これは WorkbookSet クラスに地域 (ロケール) を設定することで回避できます。

    [日本] の場合は CultureInfo(1041) や CultureInfo("ja-JP")、または日本語ロケールでの使用がはっきりしている場合は System.Globalization.CultureInfo.CurrentCulture を設定します。

    コード例は「ワークブックのデフォルト フォントが日本語版 Excel と異なります」を参照してください。

    ページトップへ

  7. アスタリスク (*) 付きやユーザー定義の日付書式が正しく反映されません
    アスタリスク (*) 付きの日付書式について

    現在のところ Microsoft Excel で設定可能なアスタリスク (*) 付きの「長い形式の日付書式」に対する自動設定はサポートされていません。異なる日付書式を設定する場合は、日付データをセル範囲に読み込んだ後で IRange.NumberFormat で指定する方法になります。

                  worksheet.Cells["A1"].NumberFormat = @"yyyy/mm/dd;@";
                
                  worksheet.Cells("A1").NumberFormat = "yyyy/mm/dd;@"
                

    ユーザー定義の日付書式について

    セルの書式で明示的にロケールが指定されていない場合の日付書式は Microsoft Excel 英語版に基づいて表現されます。例えば、ユーザー定義の日付書式「yyyy"年"m"月"」を設定したセルは Microsoft Excel 英語版で読み込むと「* m/d/yyyy」(システムの短い日付書式) と表現されます。この書式は SpreadsheetGear でも同様に処理されるため、結果的に期待する書式が反映されません。これは Microsoft Excel 英語版に互換する動作になります。

    回避策として、特定のロケールに依存する日付書式を指定する際は、

    • [$-411]yyyy"年"m"月"
    • yyyy"年"m"月";@
    のように指定します。

    書式設定で使用可能な文字や記号については、Microsoft Excel のヘルプを参照してください。

    ページトップへ

  8. 出力結果のワークブックに、ふりがなが反映されません

    残念ながら、セルに設定された「ふりがなの表示」や、セルの文字列にふりがなを付与する PHONETIC 関数はサポートされておりません。これらの設定や関数はワークブックを読み込む際に無効になります。

    本件については今後の機能改善リストにファイルされていますが、現時点での対応時期は未定となっています。

    ページトップへ

  9. セルの文字列の先頭にある全角スペースが出力ファイルに正しく反映されません

    この現象は MS Excel で生成される Open XML (xlsx/xlsm) 形式のワークブックを読み込む場合にのみ発生し、97-2003 (xls) 形式の場合や、本製品で生成される xlsx/xlsm の場合には発生しません。これは XML ドキュメントの読み込み、解析方法に関連しています。

    Excel では、全角スペースが先頭や末尾に含まれる場合に XML 属性 (xml:space="preserve") を書き出しません。SpreadsheetGear の旧バージョンでは .NET の XmlReader をサブクラス化したものを Open XML ファイルの読み込みに使用していますが、xml:space="preserve" 属性が無い場合に、全角スペースを保持しない仕様となっているため、ここでの現象のような全角スペースの問題には対処できませんでした。

    文字列の先頭、末尾の全角スペースを保持するための回避策は、

    • Excel 97-2003 (xls) 形式を使用する
    • 半角スペースを使用する
    のいずれかになります。

    なお、この現象は SpreadsheetGear 2012 (7.3.2.104) 以降で改善されています。最新版にて動作をご確認ください。

    ページトップへ

  10. セルに設定した列幅が Excel ファイルに正しく反映されません

    セルの列幅はフォント マトリックスに基づいていますが、SpreadsheetGear が .NET から提供される GDI+ のフォント マトリックスを使用する一方で、MS Excel は GDI を使用しているために、両者の間で指定する列幅は微妙に異なります。

    回避策として、日本語環境で列幅を設定する場合には、設定したい数値から 0.2 を差し引いた数値を列幅に指定します。例えば、列幅「5」を A 列に設定する場合は以下のように指定します。

                  worksheet.Cells["A:A"].ColumnWidth = 5 - 0.2;
                
                  worksheet.Cells("A:A").ColumnWidth = 5 - 0.2
                

    上記の回避策は、生成するワークブックの地域 (ロケール) が [日本] に設定されている必要があります。詳細は「12. ワークブックのデフォルト フォントが日本語版 Excel と異なります」を参照してください。

    行高 (RowHeight プロパティ) に数値を指定する場合、設定値がそのまま出力結果にも反映されますので減算処理は必要ありません。

    ページトップへ

  11. 読み込んだワークブックのフォントや列幅が出力ファイルに正しく反映されません

    MS Excel では行/列のサイズを明示的に設定しない場合、内部の STANDARDWIDTH レコードには何も書き込まれませんので、その入力ファイルを読み込む場合には SpreadsheetGear のデフォルトの列幅を使用してワークブックを開くことになります。その際に設定される列幅は「セルに設定した列幅が Excel ファイルに正しく反映されません」で説明されるように GDI+ のフォント マトリックスが使用されるために MS Excel の列幅と差異が生じます。

    また、入力ファイルのフォントについて Excel 2007 以降では、明示的にセルのフォントやサイズを指定しない場合、フォント情報がファイルに書き込まれませんので、そのワークブックを開く際は各言語バージョンのデフォルト フォントが適用されます。例えばデフォルト設定で作成されたワークブックを MS Excel 日本語版で開く場合に設定されている "MS Pゴシック" は、MS Excel 英語版では "Calibri" フォントで表現されます。

    上記を踏まえた回避策として、列幅、デフォルト フォントを明示的に設定したワークブックを入力ファイルに使用します。具体的にはシート全体を選択して、列幅、フォントを明示的に設定する必要があります。

    • MS Excel 2007 以前のバージョンでファイルを生成する場合は、デフォルト フォントの明示的な指定は必要ありません (列幅の指定は必要です)。
    • MS Excel 2007 以降のバージョンでデフォルト フォントの指定が難しい場合は、API でデフォルト フォントを指定することが可能です (以下を参照)。
                  SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
    
                  // MS Excel 日本語版のデフォルト フォントを明示的に指定
                  workbook.Styles["Normal"].Font.Name = "MS Pゴシック";
                  workbook.Styles["Normal"].Font.Size = 11;
                
                  Dim workbook As SpreadsheetGear.IWorkbook = SpreadsheetGear.Factory.GetWorkbook()
    
                  ' MS Excel 日本語版のデフォルト フォントを明示的に指定
                  workbook.Styles("Normal").Font.Name = "MS Pゴシック"
                  workbook.Styles("Normal").Font.Size = 11
                

    ページトップへ

  12. シートを保護 (ロック) する際に、保護対象のオプション項目を指定できますか

    残念ながら、現時点ではシート保護機能ので個別の保護オプション (オブジェクトの編集、列の書式設定、オートフィルターの使用など) の指定はサポートされていません。

    そのため SpreadsheetGear でシート保護を設定する際に、シェイプの選択可否や列幅の変更可否などを個別に指定することはできません。またそれらの保護オプションが設定されたワークシートを SpreadsheetGear で読み込む際も、それらのオプション設定は無効になります。

    本件については今後の機能改善リストにファイルされていますが、現時点での対応時期は未定となっています。

    ページトップへ

  13. 結合セルを含んだセル範囲に対する、行や列の挿入や削除ができません

    残念ながら、既知の制限になります。

    SpreadsheetGear では、結合セルが含まれたセル範囲への行や列の挿入、削除を行う場合に "Operation is not valid for a partial merged cell." のエラーが発生します。可能性のある回避策 (行を挿入する場合) としては下記の手順が挙げられます。

    1. 挿入処理の前に対象行の結合セル状況 (IRange.MergeArea) を退避
    2. 結合セル範囲 (MergeArea.Address) を IRange.UnMerge() で解除
    3. IRange.EntireRow.Insert() で行を挿入
    4. 最初に退避させた結合セル状況を再度、IRange.Merge() にて反映

    上記の手順はあくまでも参考手順になります。処理対象となるセル範囲の結合状況によっては、より複雑なセル結合の判定や再結合の処理が必要になる場合もありますので、具体的な実装方法や実装可否については、お客様ご自身でご確認いただきますよう、お願いします。

    ページトップへ

シェイプ、フォーム コントロール、オブジェクトに関する質問

  1. オートシェイプやイメージのサイズが、出力ファイルに正しく反映されません

    シェイプやイメージのサイズの差異は、既知の制限事項になります。

    この現象の原因は以下の 2 点になります。

    • MS Excel と .NET で使用されるフォント マトリックスの差異
      ワークシート上のシェイプやイメージは 2 つのアンカー (左上のセルの行/列位置と、右下のセルの位置) によって位置決めされています。
      ここで、セルの行/列幅は、フォント マトリックスに基づいていますが、SpreadsheetGear が .NET から提供される GDI+ のフォント マトリックスを使用する一方で、MS Excel は GDI を使用しているために、両者の間で指定する列幅が微妙に異なります。そのためシェイプのサイズにもこの影響が及びます。
      列幅の差異については、「読み込んだワークブックのフォントや列幅が出力ファイルに正しく反映されません」もご確認ください。
    • xls と xlsx の互換性の問題
      xlsx/xlsm ではアンカーポイントを、行/列のオフセット + 行/列内のユニット距離 (English Metric Units: EMUs) により格納しており、これは xls 形式の場合の列のオフセット + 列からの小数距離による格納方法と異なります。
      列幅はフォント マトリックスにより算出されるため、異なるフォント マトリックスと EMU による位置計算によって、シェイプの位置やサイズには、それらの位置する列境界の相対距離の影響を受けて差異が生じてしまいます。

    上記の理由により、残念ながら MS Excel で使用されているフォント マトリックスが .NET から提供されない限り回避策を提示または製品機能を改善することができません。

    ページトップへ

  2. ワークブックの読み込みや出力の際に、いくつかのオートシェイプが削除されます

    サポートされないオートシェイプには、次の 2 種類があります。

    • WorkbookView コントロールで表示がサポートされていないシェイプ
      Windows スタートメニューから [SpreadsheetGear 2017] の [SpreadsheetGear 2017 for .NET] を開き、[SpreadsheetGear 2017 for Windows] をクリックしてください。
      任意のワークブックを [SpreadsheetGear 2017 for Windows] で開く場合に、画面上に表示されないオブジェクトやシェイプは、WorkbookView コントロールで表示がサポートされていない、とご判断ください。
      また、WorkbookView コントロールで "表示" が可能なオートシェイプの種類につきましては、上記の [SpreadsheetGear 2017 for Windows] を起動してメニューバーの [Insert] - [Shape] - [Auto Shape] で選択可能なものになります。
    • SpreadsheetGear の API を使用して出力したワークブックでサポートされないシェイプ
      上記で "表示" がサポートされていないオートシェイプについても、API でこれらのシェイプを読み込んで出力する際に「xls 形式の入力を xls/xlsx/xlsm 形式で出力する」場合は、元のシェイプをそのまま出力ファイルに反映させることができます。
      その一方で「xlsx/xlsm 形式の入力を xls/xlsx/xlsm 形式で出力する」場合、xlsx/xlsm 上のいくつかのオートシェイプは読み込みがサポートされていませんので、出力結果にも反映されません。ご注意ください。
      詳細は、上記の [SpreadsheetGear 2017 for Windows] で読み込んだワークブックを保存することでご確認いただけます。

      補足として、SpreadsheetGear ではコネクタ タイプのシェイプがサポートされていませんのであらかじめご了承ください。Excel 2007 以降では Line を挿入する場合、Excel は "直線コネクタ" として生成されますので、ワークブックを読み込むと、これらの "直線コネクタ" は削除されます。ご注意ください。

    ページトップへ

  3. ワークブック上のコメントやコントロール (ボタン、チェックボックスなど) が消えてしまいます

    "コントロール" タイプのコントロールはサポートされません。この形式のコントロールは、既存の Windows の OLE タイプの機能に基づいていませんので .NET の 100% マネージ コード環境での実装が非常に複雑なためです。

    その一方で "フォーム" タイプのコントロールやコメントについても、現在までのところ Excel 2007-2010 Open XML (xlsx/xlsm) 形式のワークブック上のものは読み書きがサポートされておりません。これらのコメントやコントロールはワークブックを読み込む際に削除されます。また SpreadsheetGear で追加されたコメントを Open XML (xlsx/xlsm) 形式で出力する場合、これらのコメントはテキストボックスに変換されます。

    なお、Excel 97-2003 (xls) 形式の場合は、フォーム コントロールもコメントも読み書きがサポートされます。

    ページトップへ

  4. オートシェイプに関連付けられた VBA マクロが出力ファイルで動作しません

    残念ながら、既知の制限になります。

    SpreadsheetGear では VBA マクロを含むワークブックの読み込み、出力をサポートしていますが、オートシェイプに関連付けられたマクロの場合は、出力時にその関連付けが保持されません (マクロそのものは削除されずに出力されます)。

    本件については今後の機能改善リストにファイルされていますが、現時点での対応時期は未定となっています。

    ページトップへ

  5. ワークシート内の画像をシェイプ (IShape オブジェクト) として参照できません

    Open XML (XLSX、XLSM) 形式のワークシートを開く場合、シート上の画像は PNG または JPG 形式のみ、読み込みがサポートされています。

    例えば、読み込み対象のワークシートに TIFF 形式の画像を挿入している場合、この画像は読み込むことができませんので、IShape オブジェクトとして参照することができません。ただし、Excel 97-2003 (XLS 形式) のワークシートの場合は、すべての画像形式がサポートされます。

    ページトップへ

  6. 縦書きテキストボックスが、出力結果のワークブックでは横書きに変更されてしまいます

    SpreadsheetGear における縦書きテキストボックスの [行の並び] (文字の方向) は「左から右」のみがサポートされています。

    縦書きや横書きを指定する [文字列の方向] と文字の方向を指定する [行の並び] の 2 つのプロパティは、Open XML 形式のファイル内部で連結して格納されています。その一方で、残念ながら現時点で SpreadsheetGear 製品での [行の並び] (文字の方向) は「左から右」のみがサポートされているため、結果的に出力時には、これら 2 つのプロパティが同時に欠落することで、縦書きテキストボックスが横書きに変更されてしまいます。

    完全な回避策ではありませんが、少なくとも「縦書き」のテキストボックスを出力結果に反映させるためには、行の並びを「左から右」に指定します。

    本件については今後の機能改善リストにファイルされていますが、現時点での対応時期は未定となっています。

    ページトップへ

Excel 互換機能、WorkbookView コントロールに関する質問

  1. オートフィルターを設定、操作できますか

    はい。SpreadsheetGear 2010 (Ver. 6) からオートフィルターがサポートされています。
    SpreadsheetGear 2009 (Ver. 5) およびそれ以前のバージョンでは、ワークブックにオートフィルターが含まれる場合は削除されますので、ご注意ください。

    ページトップへ

  2. ピボット テーブル付きのワークブックの読み込みや設定は可能ですか

    いいえ。残念ながら、現在までのところピボット テーブルはサポートされておりませんので API でピボット テーブルを生成、操作することができません。
    また、ピボット テーブルを含むワークブックを読み込む場合、ピボット テーブルはワークブックから削除されます。

    ページトップへ

  3. セルの書式設定「縮小して全体を表示する」が WorkbookView での表示に反映されません

    WorkbookView コントロールでは、MS Excel のセルの書式設定「縮小して全体を表示する」(Excel API の "ShrinkToFit" プロパティ) の設定がコントロール上の描画に反映されません (ただし、出力結果のワークブックには正常に反映されます)。

    本件については今後の機能改善リストにファイルされていますが、現時点での対応時期は未定となっています。

    ページトップへ

  4. WorkbookView コントロールの UI を日本語で表示できますか

    残念ながら、SpreadsheetGear で提供される WorkbookView コントロールおよび各種 Explorer ダイアログのユーザー インターフェースの日本語化の機能は提供されていません。

    コントロールやダイアログ画面の日本語化はできませんが、以下の 2 つについてはお客様ご自身でコーディングすることで表示をカスタマイズすることが可能です。

    • マウス右クリックで表示されるコンテキスト メニュー
      既存のコンテキスト メニューに対する変更はサポートされていません。ただしお客様ご自身で ContextMenuStrip を作成し WorkbookView.ContextMenuStrip プロパティを設定することでカスタマイズは可能です。
      例えば、コンテキスト メニューを表示させない場合は、下記のコードで制御できます。
                        WorkbookView.ContextMenuStrip = null;
                      
                        WorkbookView.ContextMenuStrip = Nothing
                      
    • WorkbookView コントロールで表示されるメッセージ
      SpreadsheetGear.Windows.Forms.ShowErrorEventArgs を活用することで日本語メッセージを表示できます。
      具体的なサンプルは、製品付属のサンプル ソリューション [SpreadsheetGear Explorer C#/VB Sample] 中の [WorkbookView] - [ShowError] を参照してください。

    ページトップへ

  5. Excel 上でコピーしたセルが最大で 65,536 行までしか WorkbookView コントロールに貼り付けられません

    残念ながら、既知の制限になります。

    SpreadsheetGear では、"Biff8" (*.xls) ファイル形式を使用して Windows のクリップボードとデータのやり取りを行っていますので、65,536 行 (および 256 列) の制限を受けることになります。Excel では、"Biff12" (*.xlsb) ファイル形式の変数を使用することで、拡張された Open XML 形式の行、列数制限でクリップボートとやり取りが可能になりますが、現時点で SpreadsheetGear には、この XLSB 形式が実装されていません。

    本件については今後の機能改善リストにファイルされていますが、現時点での対応時期は未定となっています。


ページトップへ