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

标签 c# asp.net excel export-to-excel

我有一个分为两个面的 Excel 工作表。在左侧,我从 ASP.NET 应用程序导出数据。右侧是一个图表,配置为根据导出的数据进行填充。

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

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

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

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

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

最佳答案

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

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

我想这就是全部

希望对你有帮助

关于c# - 如何使用C#设置基于GridView的Excel图表区域范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15848514/

相关文章:

c# - 如何在 ASP.NET MVC Controller 中使用可选参数

c# - 支持索引 View 的 session 设置

javascript - 如何在 JavaScript 中创建枚举?

c# - 打开Excel文件一直提示 "Read Only"

json - 使用 VBA-JSON 从 API "error: object does not support this property or method here"中提取?

c# - 如何区分两个同名的 .snk 文件?

c# - 关于成员变量的 C# 命名约定

javascript - 想要使用 jqgrid 获取回车键来触发搜索

Asp.net 向所有页面添加 header 方法

excel - 为什么开发人员选项卡的插入菜单上的 ActiveX 控件被禁用?