如何使用C#设置基于GridView的Excel图表区域范围?

我有一个Excel表格分为两面。 在左边我从ASP.NET应用程序导出数据。 在右侧是一个图表,它被configuration为根据导出的数据填充。

问题是我已经为工作表中的左侧数据预留了特定的行和列。 例如,我假设所有报告都有10列和31行。 报告可以是“每日/每周/每月”types。 对于日常报告,第一列是从1到31的date。因此,我预留了表格的最左侧,最多31行10列。

数据从我的应用程序被正确地导出到这个表单区域,图表也被填充。 但问题是,导出的数据可能只有5行和3列,但是因为图表区域configuration为31行10列,所以可见的图表条宽度非常薄。

有没有一种方法来编程控制基于GridView的行和列的图表区域?

在我的应用程序中,我首先在GridView上显示结果。 当用户单击“导出”button时,此GridView数据将导出到Excel工作表的左侧保留区域。

如何以编程方式设置当前Excel表格的C#代码的图表区域的范围?

我相信有两种方法可以解决你的问题

1.)第一个是dynamic绘制图表 。也就是当你得到数据集时,你可以在运行时创build图表,并分配你的图表数据源的图表数据源

一个简单的例子如下

 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中select现有的图表并更改其数据源

简单的例子是

 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); 

我想这就是全部

希望这可以帮助