固定行/列の一部を非表示にした場合、Excelファイルにエクスポートすると固定領域の位置がずれる
対象製品
SPREAD for WPF 1.0J
状況
修正済み
詳細
固定行/列の一部を非表示にした場合、IgnoreHiddenCellsプロパティをTrueに指定してExcelファイルにエクスポートすると固定領域の位置がずれます。
【手順】
1.新規ウィンドウにSPREADとButtonを配置します
2.下記サンプルコードをコピーし、アプリケーションを実行します
3.Buttonをクリックし、エクスポートされたExcelファイルを開きます
--非スクロール領域の位置がSPREADと異なります(SPREADは2行、Excelは3行)
◎サンプルコード(VB)
◎サンプルコード(C#)
【手順】
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)
◎サンプルコード(C#)
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;
}