2

2 つの面に分割された Excel シートがあります。左側では、ASP.NET アプリケーションからデータをエクスポートします。右側には、エクスポートされたデータに基づいて入力するように構成されたグラフがあります。

問題は、シートの左側のデータ用に特定の行と列を予約したことです。たとえば、すべてのレポートで 10 列と 31 行を想定しています。レポートのタイプは、日次/週次/月次のいずれかです。日報の場合、最初の列は 1 から 31 までの日付です。したがって、シートの左側を最大 31 行 10 列として予約しました。

アプリケーションからこのシート領域にデータが正しくエクスポートされ、チャートにもデータが取り込まれます。しかし問題は、エクスポートされたデータが 5 行 3 列のみである可能性があることですが、チャート エリアが 31 行 10 列で構成されているため、表示されるチャート バーの幅が非常に細くなっています。

GridView の行と列に基づいてグラフ エリアをプログラムで制御する方法はありますか?

私のアプリケーションでは、最初に GridView に結果を表示しています。ユーザーが [エクスポート] ボタンをクリックすると、この GridView データが Excel シートの左側の予約領域にエクスポートされます。

現在のExcelシートのC#コードからチャート領域の範囲をプログラムで設定する方法は?

4

1 に答える 1

1

あなたの問題を解決するには2つの方法があると思います

1.) 最初はチャートを動的にプロットすることです。つまり、データセットを取得すると、実行時にチャートを作成し、チャート データソースであるデータ範囲を割り当てることができます。

簡単な例は次のとおりです

Excel.Application XlApp = null;
Excel.Workbook workbook = null;
Excel.Worksheet Ws = null;
Excel.Range Range1 = null;
Excel.RangeDataRange = null;

XlApp = new Excel.Application();
XlApp.Visible = true;
workbook = XlApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Ws = (Excel.Worksheet)workbook.Worksheets[1];//Lets say you have your graph at 1 sheet
XlApp.WindowState = XlWindowState.xlMaximized;

Ws.Cells.Clear();//Clear your sheet of any existing data

ChartObjs = null;
ChartObj = null;
xlChart = null;
Range1 = Ws.get_Range(Ws.Cells[39, 6], Ws.Cells[48, 10]);
ChartObjects WsChartObjs = (ChartObjects)Ws.ChartObjects(Type.Missing);
ChartObj = WsChartObjs.Add((double)Range1.Left + 115, (double)Range1.Top - 1,  (double)Range1.Width - 25, (double)Range1.Height + 5);
xlChart = ChartObj.Chart;

DataRange = null;

 if (MyDataset.Tables[0].Rows.Count > 10)
 {
   DataRange = Ws.get_Range(Ws.Cells[12, 14], Ws.Cells[12 + 

   MyDataset.Tables[0].Rows.Count, 15]);//or whatever your range may be
 }


  xlChart.SetSourceData(DataRange, System.Type.Missing);
  xlChart.ChartType = XlChartType.xlBarClustered;
  xlChart.ChartArea.Fill.Visible =            
  Microsoft.Office.Core.MsoTriState.msoFalse;
  xlChart.ChartArea.Border.Color = 
  System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(255, 255, 255));
  xlChart.PlotArea.Interior.Color =  
  System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(255, 255, 255));
  xlChart.PlotArea.Border.Color = System.Drawing.ColorTranslator.ToOle(255, 255, 255));

これが最初のアプローチです

2.) 2 番目のアプローチは、Excel で既存のグラフを選択し、そのデータソースを変更する方法です。

簡単な例は

Excel.ChartObject MyChartObject = (Excel.ChartObject)Ws.ChartObjects(1);//You can run 
//macro and get your chart number and pass that instead of "1"
MyChartObject .Activate();

xlChart = MyChartObject .Chart;
xlChart.SetSourceData(DataRange, System.Type.Missing);

私はそれがすべてだと思います

お役に立てれば

于 2013-04-06T10:44:00.587 に答える