作成日: 2025/03/14 最終更新日: 2025/03/14
文書種別
使用方法
詳細
FlexReportコントロールには、FlexChartFieldというチャートを表示するための機能が備えられています。
FlexChartFieldでは複数のY軸を設定したチャートを出力することはできませんが、FlexChartコントロールを使用してチャートを作成し、これを画像に変換してFlexReportへ出力することができます。
◎サンプルコード(VB)
FlexChartFieldでは複数のY軸を設定したチャートを出力することはできませんが、FlexChartコントロールを使用してチャートを作成し、これを画像に変換してFlexReportへ出力することができます。
◎サンプルコード(VB)
Imports C1.Win.FlexReport
Imports C1.Chart
Imports C1.Win.Chart
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' レポートの読み込み
C1FlexReport1.Load("../../FlexReportFile.flxr", "レポート 1")
' FlexChart画像を取得
Dim imgFlexChart As Image = GetImageFlexChart()
' レポートにFlexChart画像を設定
Dim imgField As ImageField = CType(C1FlexReport1.Fields("Field1"), ImageField)
imgField.Picture = imgFlexChart
' FlexViewerに表示
C1FlexViewer1.DocumentSource = C1FlexReport1
End Sub
Private Function GetImageFlexChart() As Image
' データの作成
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn() {
New DataColumn("X", GetType(String)),
New DataColumn("Y1", GetType(Int32)),
New DataColumn("Y2", GetType(Int32)),
New DataColumn("Y3", GetType(Int32)),
New DataColumn("Y4", GetType(Int32))
})
dt.Rows.Add("A", 1, 40, 300, 2000)
dt.Rows.Add("B", 2, 10, 400, 3000)
dt.Rows.Add("C", 3, 20, 100, 4500)
dt.Rows.Add("D", 4, 30, 200, 3500)
dt.Rows.Add("E", 5, 10, 500, 4000)
dt.AcceptChanges()
' シリーズの作成
Dim series1 As New Series() With {
.Name = "series1",
.Binding = "Y1",
.StackingGroup = 0,
.AxisY = New Axis() With {
.Position = Position.Left,
.AxisLine = True,
.Min = 0,
.Max = 5,
.Title = "シリーズ1"
}
}
Dim series2 As New Series() With {
.Name = "series2",
.Binding = "Y2",
.ChartType = ChartType.LineSymbols,
.StackingGroup = 1,
.AxisY = New Axis() With {
.Position = Position.Left,
.AxisLine = True,
.Min = 0,
.Max = 50,
.Title = "シリーズ2"
}
}
Dim series3 As New Series() With {
.Name = "series3",
.Binding = "Y3",
.ChartType = ChartType.Spline,
.StackingGroup = 2,
.AxisY = New Axis() With {
.Position = Position.Right,
.Min = 0,
.Max = 500,
.Title = "シリーズ3"
}
}
Dim series4 As New Series() With {
.Name = "series4",
.Binding = "Y4",
.ChartType = ChartType.Scatter,
.StackingGroup = 3,
.AxisY = New Axis() With {
.Position = Position.Right,
.Min = 0,
.Max = 5000,
.Title = "シリーズ4"
}
}
' 棒グラフの作成
FlexChart1.BindingX = "X"
FlexChart1.ChartType = ChartType.Column
FlexChart1.DataSource = dt
FlexChart1.Stacking = Stacking.Stacked
FlexChart1.Series.Clear()
FlexChart1.Series.Add(series1)
FlexChart1.Series.Add(series2)
FlexChart1.Series.Add(series3)
FlexChart1.Series.Add(series4)
FlexChart1.Legend.Position = Position.Top
' flexChartをpng画像としてファイルに保存
Using fst As New System.IO.FileStream("work_ChartImage.png", System.IO.FileMode.Create)
FlexChart1.SaveImage(fst, ImageFormat.Png, 400, 300)
End Using
' pngファイルを読み込み、Excelのシートに画像として挿入
Dim img As Image = Image.FromFile("work_ChartImage.png")
Return img
End Function
End Class
◎サンプルコード(C#)
using C1.Win.FlexReport;
using C1.Chart;
using C1.Win.Chart;
namespace WinC1FlexReportSampleCs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// レポートの読み込み
c1FlexReport1.Load("../../FlexReportFile.flxr", "レポート 1");
// FlexChart画像を取得
var imgFlexChart = GetImageFlexChart();
// レポートにFlexChart画像を設定
var imgField = (ImageField)c1FlexReport1.Fields["Field1"];
imgField.Picture = imgFlexChart;
// FlexViewerに表示
c1FlexViewer1.DocumentSource = c1FlexReport1;
}
private Image GetImageFlexChart()
{
// データの作成
var dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] {
new DataColumn("X",typeof(String)),
new DataColumn("Y1",typeof(Int32)),
new DataColumn("Y2",typeof(Int32)),
new DataColumn("Y3",typeof(Int32)),
new DataColumn("Y4",typeof(Int32))
});
dt.Rows.Add("A", 1, 40, 300, 2000);
dt.Rows.Add("B", 2, 10, 400, 3000);
dt.Rows.Add("C", 3, 20, 100, 4500);
dt.Rows.Add("D", 4, 30, 200, 3500);
dt.Rows.Add("E", 5, 10, 500, 4000);
dt.AcceptChanges();
// シリーズの作成
var series1 = new Series()
{
Name = "series1",
Binding = "Y1",
StackingGroup = 0,
AxisY = new Axis()
{
Position = Position.Left,
AxisLine = true,
Min = 0,
Max = 5,
Title = "シリーズ1"
}
};
var series2 = new Series()
{
Name = "series2",
Binding = "Y2",
ChartType = ChartType.LineSymbols,
StackingGroup = 1,
AxisY = new Axis()
{
Position = Position.Left,
AxisLine = true,
Min = 0,
Max = 50,
Title = "シリーズ2"
}
};
var series3 = new Series()
{
Name = "series3",
Binding = "Y3",
ChartType = ChartType.Spline,
StackingGroup = 2,
AxisY = new Axis()
{
Position = Position.Right,
Min = 0,
Max = 500,
Title = "シリーズ3"
}
};
var series4 = new Series()
{
Name = "series4",
Binding = "Y4",
ChartType = ChartType.Scatter,
StackingGroup = 3,
AxisY = new Axis()
{
Position = Position.Right,
Min = 0,
Max = 5000,
Title = "シリーズ4"
}
};
// 棒グラフの作成
flexChart1.BindingX = "X";
flexChart1.ChartType = ChartType.Column;
flexChart1.DataSource = dt;
flexChart1.Stacking = Stacking.Stacked;
flexChart1.Series.Clear();
flexChart1.Series.Add(series1);
flexChart1.Series.Add(series2);
flexChart1.Series.Add(series3);
flexChart1.Series.Add(series4);
flexChart1.Legend.Position = Position.Top;
// flexChartをpng画像としてファイルに保存
using (System.IO.FileStream fst = new System.IO.FileStream(@"work_ChartImage.png", System.IO.FileMode.Create))
{
flexChart1.SaveImage(fst,ImageFormat.Png, 400, 300);
fst.Close();
}
// pngファイルを読み込み、Excelのシートに画像として挿入
Image img = Image.FromFile(@"work_ChartImage.png");
return img;
}
}
}