2013-04-06 61 views
2

我有一张Excel表格分为两面。在左侧,我从ASP.NET应用程序导出数据。右侧是一个图表,根据导出的数据配置该图表以进行填充。如何使用C#设置基于GridView的Excel图表区域范围?

问题是我已为表单中的左侧数据保留了某些行和列。例如,我假设所有报告都有10列和31行。报告可以是每日/每周/每月类型。对于日常报告,第一列是从1到31的日期。因此,我将该表的左侧预留为最多31行和10列。

将数据从我的应用程序正确导出到此工作表区域,并且还填充了图表。但问题是导出的数据可能只有5行和3列,但由于图表区域配置为31行和10列,因此可见的图表条宽度非常薄。

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

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

如何编程设定图表区域从当前excel工作表的C#代码的范围?

+0

请按照以下步骤'1'查找报告'2'的最后一行和最后一列'从该信息'3'构建您的数据范围更改酸图表的cedata。你可能想尝试一下,并发布你试过的代码,如果你被卡住了,我们会从那里拿走它? – 2013-04-06 08:30:04

+0

或者如果你想在VB.Net准备好的例子,那么我可以指导你一个链接,然后你可以修改它们? – 2013-04-06 08:34:12

+0

请提供链接。 – RKh 2013-04-06 08:47:17

回答

1

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

1)首先将情节图表动态。那是当你的数据集,你可以 在运行时创建图表和分配您Datarange那是你的图表数据源

一个简单的例子如下:

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

这是第apporach

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

我想这就是所有

希望这帮助