列ヘッダを縦書きで表示したい

文書番号 : 38941     文書種別 : 使用方法     登録日 : 2015/07/01     最終更新日 : 2015/07/01
文書を印刷する
対象製品
SPREAD for Windows Forms 8.0J
詳細
EnhancedColumnHeaderRendererクラスのTextOrientationプロパティの設定によってヘッダの縦書き表示を行うことができます。
また、列ヘッダレンダラを継承したカスタムクラスを作成し、PaintCellメソッドのオーバーライドにより.NET Frameworkの文字列描画機能を用いることもできます。

なお、下記サンプルではGraphicsクラスのMeasureStringメソッドを使って最適な列ヘッダの高さを取得しています。

【列ヘッダレンダラ描画イメージ】【カスタムクラス描画イメージ】


◎サンプルコード(VB)
Public Class Form1
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  FpSpread1.Sheets.Count = 2
  FpSpread1.Sheets(0).ColumnCount = 3
  FpSpread1.Sheets(1).ColumnCount = 3

  '---------------------------------------------------
  ' 列ヘッダレンダラによる縦書き
  '---------------------------------------------------
  FpSpread1.Sheets(0).SheetName = "列ヘッダレンダラ"
  Dim ch As New FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
  ch.TextOrientation = FarPoint.Win.TextOrientation.TextTopDown
  ch.WordWrap = True
  FpSpread1.Sheets(0).ColumnHeader.DefaultStyle.Renderer = ch
  FpSpread1.Sheets(0).ColumnHeader.Cells(0, 0).Text = "データ(A)"
  FpSpread1.Sheets(0).ColumnHeader.Cells(0, 1).Text = "データ(BB)"
  FpSpread1.Sheets(0).ColumnHeader.Cells(0, 2).Text = "データ(CCC)"

  ' 列ヘッダの高さの設定(微調整含む)
  Using g As Graphics = FpSpread1.CreateGraphics()
    Dim maxHeight As Single = 0
    For i As Integer = 0 To FpSpread1.Sheets(0).ColumnCount - 1
      Dim caption As String = FpSpread1.Sheets(0).ColumnHeader.Cells(0, i).Text
      Dim temp As Single = g.MeasureString(caption, FpSpread1.Font, 10).Height
      If temp > maxHeight Then
        maxHeight = temp
      End If
    Next
    FpSpread1.Sheets(0).ColumnHeader.Rows(0).Height = maxHeight + 15
  End Using

  '---------------------------------------------------
  ' カスタムクラスによる縦書き
  '---------------------------------------------------
  FpSpread1.Sheets(1).SheetName = "カスタム"
  Dim cch As New CustomRenderer
  cch.WordWrap = True
  FpSpread1.Sheets(1).ColumnHeader.DefaultStyle.Renderer = cch
  FpSpread1.Sheets(1).ColumnHeader.Cells(0, 0).Text = "データ(A)"
  FpSpread1.Sheets(1).ColumnHeader.Cells(0, 1).Text = "データ(BB)"
  FpSpread1.Sheets(1).ColumnHeader.Cells(0, 2).Text = "データ(CCC)"

  ' 列ヘッダの高さの設定
  Using g As Graphics = FpSpread1.CreateGraphics()
    Dim maxHeight As Single = 0
    For i As Integer = 0 To FpSpread1.Sheets(1).ColumnCount - 1
      Dim caption As String = FpSpread1.Sheets(1).ColumnHeader.Cells(0, i).Text
      Dim temp As Single = g.MeasureString(caption, FpSpread1.Font, 10).Height
      If temp > maxHeight Then
        maxHeight = temp
      End If
    Next
    FpSpread1.Sheets(1).ColumnHeader.Rows(0).Height = maxHeight
  End Using

  End Sub
End Class

Public Class CustomRenderer
  Inherits FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer

  Public Overrides Sub PaintCell(ByVal g As System.Drawing.Graphics, ByVal r As System.Drawing.Rectangle, ByVal appearance As FarPoint.Win.Spread.Appearance, ByVal value As Object, ByVal isSelected As Boolean, ByVal isLocked As Boolean, ByVal zoomFactor As Single)
    MyBase.PaintCell(g, r, appearance, Nothing, isSelected, isLocked, zoomFactor)
    Using foreColorBrush As New SolidBrush(appearance.ForeColor)
      Dim sf As New StringFormat
      sf.Alignment = StringAlignment.Center
      sf.LineAlignment = StringAlignment.Center
      sf.FormatFlags = StringFormatFlags.DirectionVertical
      If TypeOf value Is String Then
        g.DrawString(value.ToString, appearance.Font, foreColorBrush, New RectangleF(r.X, r.Y, r.Width, r.Height), sf)
      End If
    End Using
  End Sub
End Class


◎サンプルコード(C#)
public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();
  }

  private void Form1_Load(object sender, EventArgs e)
  {
    FpSpread1.Sheets.Count = 2;
    FpSpread1.Sheets[0].ColumnCount = 3;
    FpSpread1.Sheets[1].ColumnCount = 3;
    
    //---------------------------------------------------
    // 列ヘッダレンダラによる縦書き
    //---------------------------------------------------
    FpSpread1.Sheets[0].SheetName = "列ヘッダレンダラ";
    FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer ch = new FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer();
    ch.TextOrientation = FarPoint.Win.TextOrientation.TextTopDown;
    ch.WordWrap = true;
    FpSpread1.Sheets[0].ColumnHeader.DefaultStyle.Renderer = ch;
    FpSpread1.Sheets[0].ColumnHeader.Cells[0, 0].Text = "データ(A)";
    FpSpread1.Sheets[0].ColumnHeader.Cells[0, 1].Text = "データ(BB)";
    FpSpread1.Sheets[0].ColumnHeader.Cells[0, 2].Text = "データ(CCC)";
    
    // 列ヘッダの高さの設定(微調整含む)
    using (Graphics g = FpSpread1.CreateGraphics()) {
      float maxHeight = 0;
      for (int i = 0; i <= FpSpread1.Sheets[0].ColumnCount - 1; i++) {
        string caption = FpSpread1.Sheets[0].ColumnHeader.Cells[0, i].Text;
        float temp = g.MeasureString(caption, FpSpread1.Font, 10).Height;
        if (temp > maxHeight) {
          maxHeight = temp;
        }
      }
      FpSpread1.Sheets[0].ColumnHeader.Rows[0].Height = maxHeight + 15;
    }
    
    //---------------------------------------------------
    // カスタムクラスによる縦書き
    //---------------------------------------------------
    FpSpread1.Sheets[1].SheetName = "カスタム";
    CustomRenderer cch = new CustomRenderer();
    cch.WordWrap = true;
    FpSpread1.Sheets[1].ColumnHeader.DefaultStyle.Renderer = cch;
    FpSpread1.Sheets[1].ColumnHeader.Cells[0, 0].Text = "データ(A)";
    FpSpread1.Sheets[1].ColumnHeader.Cells[0, 1].Text = "データ(BB)";
    FpSpread1.Sheets[1].ColumnHeader.Cells[0, 2].Text = "データ(CCC)";
    
    // 列ヘッダの高さの設定
    using (Graphics g = FpSpread1.CreateGraphics()) {
      float maxHeight = 0;
      for (int i = 0 ;i <= FpSpread1.Sheets[1].ColumnCount - 1; i++) {
        string caption = FpSpread1.Sheets[1].ColumnHeader.Cells[0, i].Text;
        float temp = g.MeasureString(caption, FpSpread1.Font, 10).Height;
        if (temp > maxHeight) {
          maxHeight = temp;
        }
      }
      FpSpread1.Sheets[1].ColumnHeader.Rows[0].Height = maxHeight;
      
    } 
  }
}

public class CustomRenderer : FarPoint.Win.Spread.CellType.EnhancedColumnHeaderRenderer
{

  public override void PaintCell(System.Drawing.Graphics g, System.Drawing.Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  {
    base.PaintCell(g, r, appearance, null, isSelected, isLocked, zoomFactor);
    using (SolidBrush foreColorBrush = new SolidBrush(appearance.ForeColor))
    {
      StringFormat sf = new StringFormat();
      sf.Alignment = StringAlignment.Center;
      sf.LineAlignment = StringAlignment.Center;
      sf.FormatFlags = StringFormatFlags.DirectionVertical;
      if (value is string)
      {
        g.DrawString(Convert.ToString(value), appearance.Font, foreColorBrush,new RectangleF(r.X, r.Y, r.Width, r.Height),sf);
      }
    }
  }
}
キーワード
ヘッダ