印刷する内容をカスタマイズしたい
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
下記のサンプルコードではヘッダーとフッターに文字列を挿入し、30行目で改ページします。
ここではRenderメソッドでSPREADのIsPrintプロパティの値を調べ、SPREADが印刷用に出力されているかどうかを判断します。SPREADの印刷時のレイアウトは以下のようになっています。
Me.Controls(0).Controls(0) (FpSpread)
|- .Controls(0) (bh)
|- .Controls(0) シート1のヘッダー(LiteralControl)
|- .Controls(1) シート1(Table)
|- .Controls(2) シート1のフッター(LiteralControl)
|- .Controls(3) シート2のヘッダー(LiteralControl)
|- .Controls(4) シート2(Table)
|- .Controls(5) シート2のフッター(LiteralControl)
|- ... 繰り返し
ここではSPREADが印刷用に出力されている時、スタイルシートのプロパティ「page-break-before」を使用して改ページを行います。
【VB サンプルコード】
【C# サンプルコード】
ここではRenderメソッドでSPREADのIsPrintプロパティの値を調べ、SPREADが印刷用に出力されているかどうかを判断します。SPREADの印刷時のレイアウトは以下のようになっています。
Me.Controls(0).Controls(0) (FpSpread)
|- .Controls(0) (bh)
|- .Controls(0) シート1のヘッダー(LiteralControl)
|- .Controls(1) シート1(Table)
|- .Controls(2) シート1のフッター(LiteralControl)
|- .Controls(3) シート2のヘッダー(LiteralControl)
|- .Controls(4) シート2(Table)
|- .Controls(5) シート2のフッター(LiteralControl)
|- ... 繰り返し
ここではSPREADが印刷用に出力されている時、スタイルシートのプロパティ「page-break-before」を使用して改ページを行います。
【VB サンプルコード】
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If IsPostBack Then Return
FpSpread1.ActiveSheetView.RowCount = 40
FpSpread1.ActiveSheetView.Cells(29, 0).Value = "Hello!"
End Sub
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim vp As Control
Dim header As LiteralControl
Dim footer As LiteralControl
If FpSpread1.IsPrint Then
vp = Me.Controls(0).Controls(0).Controls(0)
header = CType(vp.Controls(0), LiteralControl)
header.Text = "<DIV>ヘッダーテキスト</DIV>"
footer = CType(vp.Controls(2), LiteralControl)
footer.Text = "<BR><DIV>フッターテキスト</DIV><BR><BR>"
Dim t As Table = CType(vp.Controls(1), Table)
t.Style.Add("border-style", "none")
Dim tc As TableCell = CType(t.Rows(0).Controls(0), TableCell)
t = CType(tc.Controls(0), Table)
'列ヘッダを挿入
Dim tr As TableRow = t.Rows(0)
Dim trHd As New TableRow
Dim lc, lc_c As LiteralControl
Dim key, v As String
Dim senum As IEnumerator = tr.Cells(0).Style.Keys.GetEnumerator()
Dim i, j As Int32
For i = 0 To tr.Cells.Count - 1
lc = CType(tr.Cells(i).Controls(0), LiteralControl)
lc_c = New LiteralControl(lc.Text)
tc = New TableCell
tc.Controls.Add(lc_c)
senum.Reset()
While (senum.MoveNext())
key = CStr(senum.Current)
v = tr.Cells(0).Style(key)
tc.Style.Add(key, v)
End While
trHd.HorizontalAlign = HorizontalAlign.Center
trHd.Cells.Add(tc)
Next
t.Rows.AddAt(30, trHd)
'30行目で改ページ
tc = CType(t.Rows(30).Controls(0), TableCell)
tc.Style.Add("page-break-before", "always")
'30行目の前に空の行を挿入
tr = New TableRow
tc = New TableCell
tc.Text = " "
tc.Style.Add("border-style", "none")
tr.Controls.Add(tc)
tr.Height = Unit.Pixel(250)
t.Rows.AddAt(30, tr)
End If
MyBase.Render(writer)
End Sub
If IsPostBack Then Return
FpSpread1.ActiveSheetView.RowCount = 40
FpSpread1.ActiveSheetView.Cells(29, 0).Value = "Hello!"
End Sub
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim vp As Control
Dim header As LiteralControl
Dim footer As LiteralControl
If FpSpread1.IsPrint Then
vp = Me.Controls(0).Controls(0).Controls(0)
header = CType(vp.Controls(0), LiteralControl)
header.Text = "<DIV>ヘッダーテキスト</DIV>"
footer = CType(vp.Controls(2), LiteralControl)
footer.Text = "<BR><DIV>フッターテキスト</DIV><BR><BR>"
Dim t As Table = CType(vp.Controls(1), Table)
t.Style.Add("border-style", "none")
Dim tc As TableCell = CType(t.Rows(0).Controls(0), TableCell)
t = CType(tc.Controls(0), Table)
'列ヘッダを挿入
Dim tr As TableRow = t.Rows(0)
Dim trHd As New TableRow
Dim lc, lc_c As LiteralControl
Dim key, v As String
Dim senum As IEnumerator = tr.Cells(0).Style.Keys.GetEnumerator()
Dim i, j As Int32
For i = 0 To tr.Cells.Count - 1
lc = CType(tr.Cells(i).Controls(0), LiteralControl)
lc_c = New LiteralControl(lc.Text)
tc = New TableCell
tc.Controls.Add(lc_c)
senum.Reset()
While (senum.MoveNext())
key = CStr(senum.Current)
v = tr.Cells(0).Style(key)
tc.Style.Add(key, v)
End While
trHd.HorizontalAlign = HorizontalAlign.Center
trHd.Cells.Add(tc)
Next
t.Rows.AddAt(30, trHd)
'30行目で改ページ
tc = CType(t.Rows(30).Controls(0), TableCell)
tc.Style.Add("page-break-before", "always")
'30行目の前に空の行を挿入
tr = New TableRow
tc = New TableCell
tc.Text = " "
tc.Style.Add("border-style", "none")
tr.Controls.Add(tc)
tr.Height = Unit.Pixel(250)
t.Rows.AddAt(30, tr)
End If
MyBase.Render(writer)
End Sub
【C# サンプルコード】
private void Page_Load(object sender, System.EventArgs e)
{
if (IsPostBack)return;
FpSpread1.ActiveSheetView.RowCount=40;
FpSpread1.ActiveSheetView.Cells[29,0].Value="Hello!";
}
protected override void Render(HtmlTextWriter writer)
{
Control vp;
LiteralControl header;
LiteralControl footer;
if(FpSpread1.IsPrint)
{
vp=this.Controls[0].Controls[0].Controls[0];
header=(LiteralControl)vp.Controls[0];
header.Text="<DIV>ヘッダーテキスト</DIV>";
footer=(LiteralControl)vp.Controls[2];
footer.Text="<BR><DIV>フッターテキスト</DIV><BR><BR>";
Table t= (Table)vp.Controls[1];
t.Style.Add("border-style","none");
TableCell tc=(TableCell) t.Rows[0].Controls[0];
t= (Table)tc.Controls[0];
//列ヘッダを挿入
TableRow tr=t.Rows[0];
TableRow trHd=new TableRow();
LiteralControl lc,lc_c;
string key,v;
IEnumerator senum=tr.Cells[0].Style.Keys.GetEnumerator();
for(int i=0;i<tr.Cells.Count;i++)
{
lc=(LiteralControl)tr.Cells[i].Controls[0];
lc_c=new LiteralControl(lc.Text);
tc=new TableCell();
tc.Controls.Add(lc_c);
senum.Reset();
while(senum.MoveNext())
{
key=(string)senum.Current;
v=tr.Cells[0].Style[key];
tc.Style.Add(key,v);
}
trHd.HorizontalAlign=HorizontalAlign.Center;
trHd.Cells.Add(tc);
}
t.Rows.AddAt(30,trHd);
//30行目で改ページ
tc=(TableCell)t.Rows[30].Controls[0];
tc.Style.Add("page-break-before","always");
//30行目の前に空の行を挿入
tr=new TableRow();
tc=new TableCell();
tc.Text=" ";
tc.Style.Add("border-style","none");
tr.Controls.Add(tc);
tr.Height=Unit.Pixel(250);
t.Rows.AddAt(30,tr);
}
base.Render (writer);
}
{
if (IsPostBack)return;
FpSpread1.ActiveSheetView.RowCount=40;
FpSpread1.ActiveSheetView.Cells[29,0].Value="Hello!";
}
protected override void Render(HtmlTextWriter writer)
{
Control vp;
LiteralControl header;
LiteralControl footer;
if(FpSpread1.IsPrint)
{
vp=this.Controls[0].Controls[0].Controls[0];
header=(LiteralControl)vp.Controls[0];
header.Text="<DIV>ヘッダーテキスト</DIV>";
footer=(LiteralControl)vp.Controls[2];
footer.Text="<BR><DIV>フッターテキスト</DIV><BR><BR>";
Table t= (Table)vp.Controls[1];
t.Style.Add("border-style","none");
TableCell tc=(TableCell) t.Rows[0].Controls[0];
t= (Table)tc.Controls[0];
//列ヘッダを挿入
TableRow tr=t.Rows[0];
TableRow trHd=new TableRow();
LiteralControl lc,lc_c;
string key,v;
IEnumerator senum=tr.Cells[0].Style.Keys.GetEnumerator();
for(int i=0;i<tr.Cells.Count;i++)
{
lc=(LiteralControl)tr.Cells[i].Controls[0];
lc_c=new LiteralControl(lc.Text);
tc=new TableCell();
tc.Controls.Add(lc_c);
senum.Reset();
while(senum.MoveNext())
{
key=(string)senum.Current;
v=tr.Cells[0].Style[key];
tc.Style.Add(key,v);
}
trHd.HorizontalAlign=HorizontalAlign.Center;
trHd.Cells.Add(tc);
}
t.Rows.AddAt(30,trHd);
//30行目で改ページ
tc=(TableCell)t.Rows[30].Controls[0];
tc.Style.Add("page-break-before","always");
//30行目の前に空の行を挿入
tr=new TableRow();
tc=new TableCell();
tc.Text=" ";
tc.Style.Add("border-style","none");
tr.Controls.Add(tc);
tr.Height=Unit.Pixel(250);
t.Rows.AddAt(30,tr);
}
base.Render (writer);
}
キーワード
一般
この文書は、以前は次のFAQ IDで公開されていました : 9171