固定行/列の一部を非表示にした場合、Excelファイルにエクスポートすると固定領域の位置がずれる

文書番号 : 39369     文書種別 : 不具合     登録日 : 2016/03/24     最終更新日 : 2016/12/07
文書を印刷する
対象製品
SPREAD for WPF 1.0J
状況
修正済み
詳細
固定行/列の一部を非表示にした場合、IgnoreHiddenCellsプロパティをTrueに指定してExcelファイルにエクスポートすると固定領域の位置がずれます。

【手順】
1.新規ウィンドウにSPREADとButtonを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.Buttonをクリックし、エクスポートされたExcelファイルを開きます
   --非スクロール領域の位置がSPREADと異なります(SPREADは2行、Excelは3行)

◎サンプルコード(VB)
Public Sub New()

  ' この呼び出しはデザイナーで必要です。
  InitializeComponent()

  ' 固定行の設定
  GcSpreadGrid1.FrozenRowCount = 3

  ' 1行目を非表示
  GcSpreadGrid1.Rows(0).IsVisible = False

  ' テストデータの設定
  For i As Integer = 0 To 9
    For j As Integer = 0 To 4
      GcSpreadGrid1.Cells(i, j).Value = "R=" & i.ToString() & "C=" & j.ToString()
    Next
  Next
End Sub

Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click
  ' Excel ファイルにエクスポート
  GcSpreadGrid1.SaveExcel("test.xls", New GrapeCity.Windows.SpreadGrid.ExcelSaveSettings() With {.IgnoreHiddenCells = True})
End Sub

◎サンプルコード(C#)
public MainWindow()
{
  InitializeComponent();

  // 固定行の設定
  gcSpreadGrid1.FrozenRowCount = 3;

  // 1行目を非表示
  gcSpreadGrid1.Rows[0].IsVisible = false;

  // テストデータの設定
  for (int i = 0; i < 10; i++)
  {
    for (int j = 0; j < 5; j++)
    {
      gcSpreadGrid1.Cells[i,j].Value = "R=" + i.ToString() + "C=" + j.ToString();
    }
  }

  button1.Click += Button1_Click;
}

private void Button1_Click(object sender, RoutedEventArgs e)
{
  // Excel ファイルにエクスポート
  gcSpreadGrid1.SaveExcel("test.xls", new GrapeCity.Windows.SpreadGrid.ExcelSaveSettings() { IgnoreHiddenCells = true });
}
回避方法
Service Pack 3(v1.0.2016.1207)で修正済みです。
Service Pack 3(v1.0.2016.1207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

Excelファイルにエクスポートする前に、FrozenRowCountプロパティを調整し、エクスポートの後に復元します。

◎サンプルコード(VB)
Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click
  Dim orgFrozenRowCount As Integer = GcSpreadGrid1.FrozenRowCount

  ' 非表示行を除いた行数を固定行に設定
  For i As Integer = 0 To GcSpreadGrid1.FrozenRowCount - 1
    If Not GcSpreadGrid1.Rows(i).IsVisible Then
      GcSpreadGrid1.FrozenRowCount -= 1
    End If
  Next

  ' Excel ファイルにエクスポート
  GcSpreadGrid1.SaveExcel("test.xls", New GrapeCity.Windows.SpreadGrid.ExcelSaveSettings() With {.IgnoreHiddenCells = True})

  ' 固定行数を元に戻す
  GcSpreadGrid1.FrozenRowCount = orgFrozenRowCount
End Sub

◎サンプルコード(C#)
private void Button1_Click(object sender, RoutedEventArgs e)
{
  int orgFrozenRowCount = gcSpreadGrid1.FrozenRowCount;

  // 非表示行を除いた行数を固定行に設定
  for (int i = 0; i < gcSpreadGrid1.FrozenRowCount; i++)
  {
    if (!gcSpreadGrid1.Rows[i].IsVisible)
      gcSpreadGrid1.FrozenRowCount -= 1;
  }

  // Excel ファイルにエクスポート
  gcSpreadGrid1.SaveExcel("test.xls", new GrapeCity.Windows.SpreadGrid.ExcelSaveSettings() { IgnoreHiddenCells = true });

  // 固定行数を元に戻す
  gcSpreadGrid1.FrozenRowCount = orgFrozenRowCount;
}