如何使用c#在GridView中设置Excel图表的区域范围
本文关键字:区域 范围 Excel 设置 何使用 GridView | 更新日期: 2023-09-27 18:07:36
我有一个分成两面的Excel表格。在左边,我从ASP导出数据。网络应用程序。右边是一个图表,它被配置为根据导出的数据填充。
问题是我为表中的左侧数据保留了某些行和列。例如,我假设所有报告有10列31行。报表类型可以是每日/每周/每月。对于每日报表,第一列是日期从1到31。因此,我保留左侧的工作表为最多31行和10列。
数据正确地从我的应用程序导出到这个工作表区域,图表也被填充。但问题是导出的数据可能只有5行3列,但由于图表区域配置为31行10列,可见的图表条宽度非常窄。
是否有一种方法可以基于GridView行和列以编程方式控制图表区域?
在我的应用程序中,我首先在GridView上显示结果。当用户单击导出按钮时,此GridView数据将导出到Excel工作表的左侧保留区域。
如何以编程方式设置图表区域的范围从c#代码的当前excel工作表?
我相信有两种方法可以解决你的问题
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)。第二种方法是选择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);
我想就这些了
希望能有所帮助