グラフを作成する手順
C#でExcelのグラフを作成するには、下記手順で記述します。
/* Excelワークブック・ワークシートオブジェクトの取得 */
ExcelWB = ExcelApp.Workbooks.Item[TargetFile];
ExcelWS = (Worksheet)ExcelWB.Sheets[TargetSheet];
/* Excelチャートオブジェクトの設定 */
ChartObjects ChartObjs = (ChartObjects)ExcelWS.ChartObjects(Type.Missing);
/* チャート作成(行 = 450, 列 = 10, 幅500 高さ 350) */
ChartObject chartObj = charts.Add(450, 10, 500, 350);
Chart ObjChart = chartObj.Chart;
/* チャートの種類を設定(折れ線グラフ) */
ObjChart.ChartType = XlChartType.xlXYScatterLinesNoMarkers;
/* データセット */
Range chartRange = ExcelWS.get_Range(ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]);
ObjChart.SetSourceData(chartRange);
ExcelWB = ExcelApp.Workbooks.Item[TargetFile];
ExcelWS = (Worksheet)ExcelWB.Sheets[TargetSheet];
/* Excelチャートオブジェクトの設定 */
ChartObjects ChartObjs = (ChartObjects)ExcelWS.ChartObjects(Type.Missing);
/* チャート作成(行 = 450, 列 = 10, 幅500 高さ 350) */
ChartObject chartObj = charts.Add(450, 10, 500, 350);
Chart ObjChart = chartObj.Chart;
/* チャートの種類を設定(折れ線グラフ) */
ObjChart.ChartType = XlChartType.xlXYScatterLinesNoMarkers;
/* データセット */
Range chartRange = ExcelWS.get_Range(ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]);
ObjChart.SetSourceData(chartRange);
> グラフのタイトル設定はこちらをご参照下さい。
【例】グラフ作成 =画面=
以前ご紹介した「シートの追加・削除」画面に、新たにグラフ作成機能を下記のように追加しました。
グラフ作成するために、①まずサンプルのデータを作成し、②次にグラフの種類をラジオボタンで選択し、③グラフを作成します。
【例】グラフ作成用のデータ作成 =ソースコード=
下記のようなデータを作成するためのコードを書きました。
下記コードの中で、Excelのブック名・シート名を取得する仕組み・方法についてはExcel情報の取得をご確認下さい。
private void cmdInputGrafData_Click(object sender, EventArgs e)
{
/* コンボボックスの情報からExcelブック名を取得する */
TargetFile = cmbExcelBook.Text;
/* リストボックスの情報からExcelシート名を取得する */
if (lstExcelSheet.SelectedItems.Count == 0)
{
MessageBox.Show("書き込むシートを選択して下さい");
return;
}
TargetSheet = lstExcelSheet.SelectedItem.ToString();
/* Excelワークブック・ワークシートオブジェクトの取得 */
ExcelWB = ExcelApp.Workbooks.Item[TargetFile];
ExcelWS = (Worksheet)ExcelWB.Sheets[TargetSheet];
/* Excelセルへの書き込むための変数設定 */
object[,] ExcelData;
LineX = 5;
LineY = 5;
/* ExcelDataオブジェクトの範囲定義 */
ExcelData = new object[LineX, LineY];
/* データ作成 */
for (int i = 0; i < LineX; i++)
{
for (int j = 0; j < LineY; j++)
{
/* 1行目に年月を設定 */
if (i == 0)
{
switch (j)
{
case 1:
ExcelData[i, j] = "'2017/04";
break;
case 2:
ExcelData[i, j] = "'2017/05";
break;
case 3:
ExcelData[i, j] = "'2017/06";
break;
case 4:
ExcelData[i, j] = "'2017/07";
break;
}
}
/* 1列目に果物を設定 */
else if (j == 0)
{
switch (i)
{
case 1 :
ExcelData[i, j] = "リンゴ";
break;
case 2:
ExcelData[i, j] = "みかん";
break;
case 3:
ExcelData[i, j] = "バナナ";
break;
case 4:
ExcelData[i, j] = "ぶどう";
break;
}
}
/* 1行目・1列目以外は数値(行+列)を設定 */
else
{
ExcelData[i, j] = i + j;
}
}
}
/* 書き込み */
ExcelRNG = ExcelWS.Range[ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]];
ExcelRNG.Value = ExcelData;
/* 罫線を付ける */
ExcelRNG = ExcelWS.get_Range(ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]);
ExcelRNG.Borders.LineStyle = XlLineStyle.xlContinuous;
}
{
/* コンボボックスの情報からExcelブック名を取得する */
TargetFile = cmbExcelBook.Text;
/* リストボックスの情報からExcelシート名を取得する */
if (lstExcelSheet.SelectedItems.Count == 0)
{
MessageBox.Show("書き込むシートを選択して下さい");
return;
}
TargetSheet = lstExcelSheet.SelectedItem.ToString();
/* Excelワークブック・ワークシートオブジェクトの取得 */
ExcelWB = ExcelApp.Workbooks.Item[TargetFile];
ExcelWS = (Worksheet)ExcelWB.Sheets[TargetSheet];
/* Excelセルへの書き込むための変数設定 */
object[,] ExcelData;
LineX = 5;
LineY = 5;
/* ExcelDataオブジェクトの範囲定義 */
ExcelData = new object[LineX, LineY];
/* データ作成 */
for (int i = 0; i < LineX; i++)
{
for (int j = 0; j < LineY; j++)
{
/* 1行目に年月を設定 */
if (i == 0)
{
switch (j)
{
case 1:
ExcelData[i, j] = "'2017/04";
break;
case 2:
ExcelData[i, j] = "'2017/05";
break;
case 3:
ExcelData[i, j] = "'2017/06";
break;
case 4:
ExcelData[i, j] = "'2017/07";
break;
}
}
/* 1列目に果物を設定 */
else if (j == 0)
{
switch (i)
{
case 1 :
ExcelData[i, j] = "リンゴ";
break;
case 2:
ExcelData[i, j] = "みかん";
break;
case 3:
ExcelData[i, j] = "バナナ";
break;
case 4:
ExcelData[i, j] = "ぶどう";
break;
}
}
/* 1行目・1列目以外は数値(行+列)を設定 */
else
{
ExcelData[i, j] = i + j;
}
}
}
/* 書き込み */
ExcelRNG = ExcelWS.Range[ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]];
ExcelRNG.Value = ExcelData;
/* 罫線を付ける */
ExcelRNG = ExcelWS.get_Range(ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]);
ExcelRNG.Borders.LineStyle = XlLineStyle.xlContinuous;
}
【例】グラフ作成 =ソースコード=
上記のデータを基にグラフを作成します。
private void cmdMakeGraf_Click(object sender, EventArgs e)
{
/* コンボボックスの情報からExcelブック名を取得する */
TargetFile = cmbExcelBook.Text;
/* リストボックスの情報からExcelシート名を取得する */
if (lstExcelSheet.SelectedItems.Count == 0)
{
MessageBox.Show("書き込むシートを選択して下さい");
return;
}
TargetSheet = lstExcelSheet.SelectedItem.ToString();
/* Excelワークブック・ワークシートオブジェクトの取得 */
ExcelWB = ExcelApp.Workbooks.Item[TargetFile];
ExcelWS = (Worksheet)ExcelWB.Sheets[TargetSheet];
/* Excelチャートオブジェクトの設定 */
ChartObjects ChartObjs = (ChartObjects)ExcelWS.ChartObjects(Type.Missing);
/* チャート作成(行 = 450, 列 = 10, 幅500 高さ 350) */
ChartObject chartObj = ChartObjs.Add(450, 10, 500, 350);
Chart ObjChart = chartObj.Chart;
/* チャートの種類を設定 */
/* 縦棒 */
if (rdoColumn.Checked == true)
{
ObjChart.ChartType = XlChartType.xlColumnStacked;
}
/* 折れ線 */
if (rdoLine.Checked == true)
{
ObjChart.ChartType = XlChartType.xlLine;
}
/* 横棒 */
if (rdoBar.Checked == true)
{
ObjChart.ChartType = XlChartType.xlBarStacked;
}
/* データセット */
Range chartRange = ExcelWS.get_Range(ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]);
ObjChart.SetSourceData(chartRange);
}
{
/* コンボボックスの情報からExcelブック名を取得する */
TargetFile = cmbExcelBook.Text;
/* リストボックスの情報からExcelシート名を取得する */
if (lstExcelSheet.SelectedItems.Count == 0)
{
MessageBox.Show("書き込むシートを選択して下さい");
return;
}
TargetSheet = lstExcelSheet.SelectedItem.ToString();
/* Excelワークブック・ワークシートオブジェクトの取得 */
ExcelWB = ExcelApp.Workbooks.Item[TargetFile];
ExcelWS = (Worksheet)ExcelWB.Sheets[TargetSheet];
/* Excelチャートオブジェクトの設定 */
ChartObjects ChartObjs = (ChartObjects)ExcelWS.ChartObjects(Type.Missing);
/* チャート作成(行 = 450, 列 = 10, 幅500 高さ 350) */
ChartObject chartObj = ChartObjs.Add(450, 10, 500, 350);
Chart ObjChart = chartObj.Chart;
/* チャートの種類を設定 */
/* 縦棒 */
if (rdoColumn.Checked == true)
{
ObjChart.ChartType = XlChartType.xlColumnStacked;
}
/* 折れ線 */
if (rdoLine.Checked == true)
{
ObjChart.ChartType = XlChartType.xlLine;
}
/* 横棒 */
if (rdoBar.Checked == true)
{
ObjChart.ChartType = XlChartType.xlBarStacked;
}
/* データセット */
Range chartRange = ExcelWS.get_Range(ExcelWS.Cells[1, 1], ExcelWS.Cells[LineX, LineY]);
ObjChart.SetSourceData(chartRange);
}
【例】グラフ作成 =出力結果=
上記出力結果は下記の通りです。
■ 縦棒
■ 折れ線
■ 横棒