C# でプログラムを作成しました。これにより、CSV ファイルからグラフが自動的に生成され、新しい XLS ファイルに配置されます。ただし、線の色 (折れ線グラフであるため) をデフォルトの青ではなく赤に変更する必要があります。
これを行うのは非常に困難であり、オンラインで見つけたものは機能していません。誰かがこれを行う方法を教えてください。
ここに例があります。整数を渡そうとしたときに、バイトが逆順に読み取られているように見えることに気付きました。したがって、割り当てる0xFF0000
と色が青に0x0000FF
なり、線が赤になります。幸いなことに、Microsoft は列挙を提供しました。
Random random = new Random();
Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application();
xla.Visible = true;
Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
Worksheet ws = (Worksheet)xla.ActiveSheet;
// Now create the chart.
ChartObjects chartObjs = (ChartObjects)ws.ChartObjects();
ChartObject chartObj = chartObjs.Add(150, 20, 300, 300);
Chart xlChart = chartObj.Chart;
for (int row = 0; row < 16; row++)
{
ws.Cells[row + 2, 2] = row + 1;
ws.Cells[row + 2, 3] = random.Next(100);
}
Range xValues = ws.Range["B2", "B17"];
Range values = ws.Range["C2", "C17"];
xlChart.ChartType = XlChartType.xlLine;
SeriesCollection seriesCollection = chartObj.Chart.SeriesCollection();
Series series1 = seriesCollection.NewSeries();
series1.XValues = xValues;
series1.Values = values;
series1.Format.Line.ForeColor.RGB = (int)XlRgbColor.rgbRed;
series1.Format.Line.Weight = 5;
この種の問題のほとんどは、変更が必要な正確なオブジェクトとプロパティを見つけられないことが原因です。
この情報を取得する確実な方法は、Excel ファイルを開いて折れ線グラフに移動することです。マクロの記録を開始してから、変更する項目を変更します。マクロの記録を停止し、生成されたコードを確認します。これにより、使用する必要がある正確なオブジェクトとプロパティが得られます。
これで、C# コードが正しいオブジェクトとプロパティの構文を使用していることを確認できます。
ライン シリーズの色を変更するには、border プロパティを使用できます。
series.Border.Color = (int)Excel.XlRgbColor.rgbGreen;
チャートの凡例から色を変更することもできます。
線の色を変更するには:
((Excel.LegendEntry)chart.Legend.LegendEntries(1)).LegendKey.Border.ColorIndex = 10;
バーの色を変更するには:
((Excel.LegendEntry)chart.Legend.LegendEntries(1)).LegendKey.Interior.Color = (int)Excel.XlRgbColor.rgbRed;
マクロを記録することは、答えを見つけるための「確実な」方法ではありません。私の場合、Excel 2007 でチャートを記録しても、"ActiveSheet.ChartObjects("Chart 1").Activate" の長いリスト以外は何も得られません。上記の回答(または検索したときの他の回答)はどれもうまくいきませんでした。ただし、線の太さとテキストを変更し、マーカーを変更することはできました。
色の変更で発生していた問題は、新しいグラフを作成したり、新しいシリーズを追加したりするときに、色がデフォルトで自動に設定されることです。この動作を明らかにオフにするには、Line.Visible プロパティを msoTriStateMixed に設定する必要があります。Visible を msoTrue に戻すと、線は元の色に戻り、[データ系列の書式設定] の [線のスタイル] プロパティで [自動] が再度チェックされます。このコードは、Excel 2007 で機能します。
Excel.Series series = (Excel.Series)chartPage.SeriesCollection(1);
series.Format.Line.Weight = 1.0F;
series.Format.Line.Visible = MsoTriState.msoTriStateMixed; //Tri-State
series.Format.Line.ForeColor.RGB =(int)Microsoft.Office.Interop.Excel.XlRgbColor.rgbRed;