4

C# Excel API を使用してレポートを生成しています。ただし、Excel では、最初の軸ポイントとデータ セットの最小値の間、および最後の軸ポイントとデータ セットの最大値の間にギャップが残ります。私のデータセットは日時でソートされています。ギャップがないように、軸の下限と上限をデータセットの最小値と最大値に正確に設定するにはどうすればよいですか? Excelチャートで最小/最大軸ポイントを手動で設定することで、Excelでそれを行うことができます。

しかし、Excel でこれを自動的に行う方法、またはデータ セットを使用して C# アプリケーションから最小/最大ポイントを設定する方法はありますか?

例(マークされたギャップ) ここに画像の説明を入力

それが理にかなっていることを願っています。

ありがとう

4

1 に答える 1

4

[編集済み] OK、ちょっと遊んでみたところ、縦軸と横軸の範囲を設定する方法がわかりました。これはExcel 2010で動作しています。

ここでは、ページ上のすべてのグラフをクリアして、新しいグラフを作成します (_resultsSheet は Excel.Worksheet です)。

var resultCharts = (ChartObjects)_resultsSheet.ChartObjects();
foreach (ChartObject ch in resultCharts)
{
    ch.Delete();
}
ChartObject resultChart = resultCharts.Add(150, 40, 300, 200);
_resultChartPage = resultChart.Chart;

次に、ソースを設定します。定義済みの範囲の固定値を使用しました。ソースをスキャンして、実際の最小値と最大値を見つけることができます。

_resultChartRange = _resultsSheet.get_Range("J5", "K15");
_resultChartPage.SetSourceData(_resultChartRange);
_resultChartPage.ChartType = Excel.XlChartType.xlXYScatterLines;
_resultChartPage.HasLegend = false;

垂直軸の設定は次のとおりです。

Axis vertAxis = (Axis)resultChart.Chart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary);
vertAxis.HasMajorGridlines = true; // change this to whatever you wish
vertAxis.HasTitle = true;
vertAxis.AxisTitle.Text = "up the side";
vertAxis.MaximumScaleIsAuto = false;
vertAxis.MaximumScale = 500; // you can pick this based on your input
vertAxis.MinimumScaleIsAuto = false;
vertAxis.MinimumScale = 5;

今度はもう一方の軸です。ここで、固定時間を使用したことに注意してください。時間を軸目盛に変換するには、24 時間の 10 進数を 24 で割った値を使用します。午後 9 時 30 分は 21 時 30 分、つまり 21.5 時間です。int を使用する場合に備えて、(double) キャストを忘れないでください。

Axis horizAxis = resultChart.Chart.Axes(XlAxisType.xlCategory, XlAxisGroup.xlPrimary);
horizAxis.MaximumScaleIsAuto = false;
horizAxis.MaximumScale = (double)21.5 / 24; // 9:30 pm
horizAxis.MinimumScaleIsAuto = false;
horizAxis.MinimumScale = (double)13 / 24; // 1:00 pm
horizAxis.HasTitle = true;
horizAxis.AxisTitle.Text = "across the bottom";

そして「見たい」人のために:

_resultsSheet.Activate();
_workBook.Application.Visible = true;
于 2012-11-22T08:09:05.677 に答える