DefaultStyleNameプロパティに設定したスタイルがExcelファイル出力時に無効になる

文書番号 : 39368     文書種別 : 不具合     登録日 : 2016/03/23     最終更新日 : 2016/12/07
文書を印刷する
対象製品
SPREAD for WPF 1.0J
状況
修正済み
詳細
SPREADコントロールのDefaultStyleNameプロパティに設定したスタイルがExcelファイル出力時に無効になります。SPREADコントロールのDefaultStyleプロパティ、CellsのDefaultStyleName/DefaultStyleプロパティでも同様の現象が発生します。

【手順】
1.新規ウィンドウにSPREADとButtonを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.Buttonをクリックします
   --1行目の条件付き書式の設定がクリアされます

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

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

  ' 名前付きスタイルの設定
  GcSpreadGrid1.NamedStyleInfos.Add("L", New GrapeCity.Windows.SpreadGrid.StyleInfo() With {
    .Background = New SolidColorBrush(Color.FromRgb(&H80, &H80, &H80)),
    .Foreground = New SolidColorBrush(Color.FromRgb(0, 0, 0))
  })
  GcSpreadGrid1.DefaultStyleName = "L"

  ' テストデータの設定
  GcSpreadGrid1.Cells(1, 1).Value = "test"
End Sub

Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click
  ' Excel ファイルにエクスポート
  GcSpreadGrid1.SaveExcel("test.xls")
End Sub

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

  // 名前付きスタイルの設定
  gcSpreadGrid1.NamedStyleInfos.Add("L", new GrapeCity.Windows.SpreadGrid.StyleInfo()
  {
    Background = new SolidColorBrush(Color.FromRgb(0x80, 0x80, 0x80)),
    Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 0))
  });
  gcSpreadGrid1.DefaultStyleName = "L";

  // テストデータの設定
  gcSpreadGrid1.Cells[1, 1].Value = "test";

  button1.Click += Button1_Click;
}

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

DefaultStyleNameプロパティの代わりにAlternatingRowsプロパティを使用して名前付きスタイルを設定します。

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

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

  ' 名前付きスタイルの設定
  GcSpreadGrid1.NamedStyleInfos.Add("L", New GrapeCity.Windows.SpreadGrid.StyleInfo() With {
    .Background = New SolidColorBrush(Color.FromRgb(&H80, &H80, &H80)),
    .Foreground = New SolidColorBrush(Color.FromRgb(0, 0, 0))
  })
  'GcSpreadGrid1.DefaultStyleName = "L"

  ' 行ヘッダのデフォルトスタイル定義
  GcSpreadGrid1.NamedStyleInfos.Add("rowheader", New GrapeCity.Windows.SpreadGrid.StyleInfo() With {
    .Background = SystemColors.WindowBrush,
    .Foreground = SystemColors.WindowTextBrush
  })

  GcSpreadGrid1.AlternatingRows.Add(New GrapeCity.Windows.SpreadGrid.AlternatingRow() With {
    .StyleName = "L"
  })
  GcSpreadGrid1.RowHeader.DefaultStyleName = "rowheader"

  ' テストデータの設定
  GcSpreadGrid1.Cells(1, 1).Value = "test"
End Sub

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

  // 名前付きスタイルの設定
  gcSpreadGrid1.NamedStyleInfos.Add("L", new GrapeCity.Windows.SpreadGrid.StyleInfo()
  {
    Background = new SolidColorBrush(Color.FromRgb(0x80, 0x80, 0x80)),
    Foreground = new SolidColorBrush(Color.FromRgb(0, 0, 0))
  });
  //gcSpreadGrid1.DefaultStyleName = "L";

  // 行ヘッダのデフォルトスタイル定義
  gcSpreadGrid1.NamedStyleInfos.Add("rowheader", new GrapeCity.Windows.SpreadGrid.StyleInfo()
  {
    Background = SystemColors.WindowBrush,
    Foreground = SystemColors.WindowTextBrush
  });

  gcSpreadGrid1.AlternatingRows.Add(new GrapeCity.Windows.SpreadGrid.AlternatingRow() { StyleName = "L" });
  gcSpreadGrid1.RowHeader.DefaultStyleName = "rowheader";

  // テストデータの設定
  gcSpreadGrid1.Cells[1, 1].Value = "test";

  button1.Click += Button1_Click;
}