.net excel 图表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net excel 图表相关的知识,希望对你有一定的参考价值。
用.NET(C#) 生成excel 图表的代码.感谢.
.Net 生成Excel文件以下为.NET生成Excel文件的全部代码,并包含一定操作。其中引用到一个枚举public enum ExcelAlign Left,Right,Center;请自行定义在合适处并修改代码中相应部分。注:本代码在windows2000 server office2003环境下测试通过,不会遗留Excel进程;使用VS.net 2003编写------------------------using System;using System.Collections;using Excel; namespace JointSkyLibrary.JExcel /// /// 对Excel进行操作的类。 /// public class JointExcel #region 私有成员 private Excel.ApplicationClass m_objExcel;//Excel应用程序对象 private Excel.Workbooks m_objBooks;//Excel的Books对象 private Excel.Workbook m_objBook;//当前Book对象 private Excel.Worksheet m_objSheet;//当前Sheet对象 private Excel.Range m_Range;//当前Range对象 private System.Reflection.Missing miss = System.Reflection.Missing.Value;//空数据变量 private Excel.Font m_Font;//当前单元格的字体属性对象 private Excel.Borders m_Borders;//当前单元格或者区域的边框属性对象 //单元格的四条边框对象 private Excel.Border m_BorderTop; private Excel.Border m_BorderBottom; private Excel.Border m_BorderLeft; private Excel.Border m_BorderRight; private Excel.Range m_cellRange;//单元格Range对象,用来取得对象的Rows和Columns属性对象 //单元格列号数组 private string[] m_colString = new string[26] "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"; #endregion /// /// 本类使用在web application中时,请在Web.Config中添加 /// /// public JointExcel() m_objExcel = new Excel.ApplicationClass(); m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks; m_objBook = (Excel.Workbook)(m_objBooks.Add(miss)); m_objSheet = (Excel.Worksheet)m_objBook.ActiveSheet; ~JointExcel() //释放所有Com对象 if(m_cellRange != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_cellRange); if(m_BorderTop != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderTop); if(m_BorderBottom != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderBottom); if(m_BorderLeft != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderLeft); if(m_BorderRight != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_BorderRight); if(m_Borders != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Borders); if(m_Font != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Font); if(m_Range != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Range); if(m_objSheet != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objSheet); if(m_objBook != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBook); if(m_objBooks != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objBooks); if(m_objExcel != null) System.Runtime.InteropServices.Marshal.ReleaseComObject(m_objExcel); GC.Collect(); #region 选定单元格 private string GetCell(int ColNum,int RowNum) int row = RowNum +1; if(ColNum<0 || ColNum >255) throw new Exception("行号错误"); int i0,i1 = 0; i0 = Math.DivRem(ColNum,25,out i1); if(i0==0 && i1==0) return "A"+row.ToString(); else if(i0==0 && i1>0) return m_colString[i1]+row.ToString(); else return m_colString[i0]+m_colString[i1]+row.ToString(); /// /// 选定相应单元格 /// /// int 列号 /// int 行号 public void SetRange(int ColNum,int RowNum) m_Range = m_objSheet.get_Range((object)GetCell(ColNum,RowNum),miss); m_Font = m_Range.Font; m_Borders = m_Range.Borders; m_BorderTop = m_Borders[Excel.XlBordersIndex.xlEdgeTop]; m_BorderBottom = m_Borders[Excel.XlBordersIndex.xlEdgeBottom]; m_BorderLeft = m_Borders[Excel.XlBordersIndex.xlEdgeLeft]; m_BorderRight = m_Borders[Excel.XlBordersIndex.xlEdgeRight]; m_cellRange = m_Range; /// /// 选择相应的区域 /// /// 起始单元格列号 /// 起始单元格行号 /// 结束单元格列号 /// 结束单元格行号 public void SetRange(int startColNum,int startRowNum,int endColNum,int endRowNum) m_Range = m_objSheet.get_Range((object)GetCell(startColNum,startRowNum),(object)GetCell(endColNum,endRowNum)); m_Font = m_Range.Font; m_Borders = m_Range.Borders; m_BorderTop = m_Borders[Excel.XlBordersIndex.xlEdgeTop]; m_BorderBottom = m_Borders[Excel.XlBordersIndex.xlEdgeBottom]; m_BorderLeft = m_Borders[Excel.XlBordersIndex.xlEdgeLeft]; m_BorderRight = m_Borders[Excel.XlBordersIndex.xlEdgeRight]; m_cellRange = m_Range; #endregion。。。 代码有点长,没发完,完全版在下面这个链接里。你最好自己做个控件。引用: http://www.ffstar.com.cn/infoview.aspx?id=147 参考技术A 网上搜PageOffice,有很多示例代码的,你参考下。
c# 操作Excel 图表并设置图表的格式?
我要做一个c# 操作Excel 图表并设置图表的格式,现在问题就是,我做出来的图表 不是和数据放在同一个sheet里,是自动生成一个叫Char的图表sheet,怎么样合并到一个sheet里,还有就是图表里的bar(即每个柱状图下面的名称)不会全部显示,只显示 1.3.5.7.....,怎么样让全部都显示(名称是数据库里的,不可以修改),谢谢大家,请大家给的详细一点,最好是源码,急用。
1.插入图表则主要是操作ChartObject对象和Chart对象。
Workbook wb = xla.Workbooks.Add(XlSheetType.xlWorksheet);
Worksheet ws = (Worksheet)xla.ActiveSheet;
// Now create the chart.
ChartObjects charts= (ChartObjects)ws.ChartObjects(Type.Missing);
//设置图表大小。ChartObject chartObj = charts.Add(0, 0, 400, 300);Chart chart = chartObj.Chart;//设置图表数据区域。Range range = workSheet.get_Range("A1", "E10");chart.ChartWizard(range, XlChartType.xl3DColumn,miss,XlRowCol.xlColumns, 1, 1, true, "标题", "X轴标题", "Y轴标题", miss);
//将图表移到数据区域之下。chartObj.Left = Convert.ToDouble(range.Left);chartObj.Top = Convert.ToDouble(range.Top) + Convert.ToDouble(range.Height);
2.其中设置图表区域比较关键,区域中包含了标题行。ChartWizard的第二个参数指明了图表的类型,第四个参数指明了以行还是列的值作为一个数据系列,第五个参数和第六个参数则指明分别作为横轴坐标和系列名称的单元格。
3.以Line类型图表为例,数据如下:
4.那么根据第四个参数的不同会有两种不同图表:
chart.ChartWizard(range, XlChartType.xlLine,miss,XlRowCol.xlRows, 1, 1, true, "标题", "X轴标题", "Y轴标题", miss);
5.在PlotBy Row的时候,会以一行的数据为一个数据系列画一条线,并把第每行的一列值作为这一条线的标题,而把第一行的每一列作为该线的横坐标。
chart.ChartWizard(range, XlChartType.xlLine,miss,XlRowCol.xlColumns, 1, 1, true, "标题", "X轴标题", "Y轴标题", miss);
6.在PlotBy Column的时候,会以一列的数据为一个数据系列画一条线,并把第每列的一行值作为这一条线的标题,而把第一列的每一行作为该线的横坐标。
这两种模式相同点就在于,它们都是以坐标格内的值作为纵坐标的。这里需要注意的是,如果第五和第六个参数改为2,并不是取行的第二列或列的第二行作为标题,而是取前两行或前两列,比如:
chart.ChartWizard(range, XlChartType.xlLine,miss,XlRowCol.xlColumns, 2, 0, true, "标题", "X轴标题", "Y轴标题", miss);
7.由于系列标题设置为0,所以使用了默认的“系列X”作为标题,而横坐标则取了每列的前两行,所以共有三条线,每条线上10个点。
参考技术A 第一个问题的解决方法:要绘制图表的第四步也就是最后一步时不要选“作为新工作表插入”,而要选择“作为其中的对象插入”。或者图表已经做出来了在chart1里也没关系,右击该图表,选择“位置”,然后会出现前面所说的选择面板。第二个问题:分类轴的名称之所以不能全部显示,可将字体大小设小点,或者把图表拉大一些。毕竟X轴不是数值轴,不能像Y轴那样可以设置随意设置刻度单位。 参考技术B 使用图标集可以对数据进行注释,并可以按阈值将数据分为三到五个类别。每个图标代表一个值的范围。例如,在三向箭头图标集中,红色的上箭头代表较高值,黄色的横向箭头代表中间值,绿色的下箭头代表较低值。
快速格式化
选择Excel 2007单元格区域,或确保活动单元格在一个表或数据透视表中。
在“开始”选项卡的“样式”组中,单击“条件格式”旁边的箭头,单击“图标集”,然后选择图标集。
高级格式化
选择单元格区域,或确保活动单元格在一个表或数据透视表中。
在“开始”选项卡上的“样式”组中,单击“条件格式”旁边的箭头,然后单击“管理规则”。
将显示“条件格式规则管理器”对话框。
请执行下列操作之一:
若要添加条件格式,请单击“新建规则”。
将显示“新建格式规则”对话框。
若要更改条件格式,请执行下列操作:
确保在“显示其格式规则”列表框中选择了相应的工作表或表。
也可以采用以下方式更改单元格区域:在“应用于”框中单击“压缩对话框” 以临时隐藏对话框,在工作表上选择新的单元格区域,然后选择“展开对话框” 。
选择规则,然后单击“编辑规则”。
将显示“编辑格式规则”对话框。
在“选择规则类型”下,单击“基于各自值设置所有单元格的格式”。
在“编辑规则说明”下的“格式样式”列表框中,选择“图标集”。
选择图标集。默认为“三色交通灯(无边框)”。图标的个数以及各个图标的默认比较运算符和阈值随图标集的不同而不同。
如果需要,可以调整比较运算符和阈值。每个图标的默认取值范围是相同的,但您可以根据自己的需要进行调整。请确保阈值的逻辑顺序为自上而下从最高值到最低值。
请执行下列操作之一:
设置数字、日期或时间值的格式 选择“数字”。
设置百分比的格式 选择“百分比”。
有效值为 0 到 100。请不要输入百分号。
如果要按比例直观显示所有值,则使用百分比,因为值的分布是成比例的。
设置百分点值的格式 选择“百分点值”。
有效的百分点值为 0 到 100。如果单元格区域包含的数据点超过 8191 个,则不能使用百分点值。
百分点值可用于以下情形:要用一种数据条比例直观显示一组上限值(如前 20 个百分点值),用另一种数据条比例直观显示一组下限值(如后 20 个百分点值),因为这两种比例所表示的极值有可能会使数据的显示失真。
设置公式结果的格式 选择“公式”,然后在每个“值”框中输入公式。
公式必须返回数字、日期或时间值。公式以等号 (=) 开头。公式无效将使所有格式设置都不被应用。最好在工作表中测试公式,以确保公式不会返回错误值。
要将图标放在单元格的对边,请选择“反转图标次序”。
要在Excel 2007单元格中只显示图标不显示数据值,请选择“仅显示图标”。
注释
可能需要调整列宽以容纳图标。
Excel 2007图标有三种大小。显示的大小取决于单元格中使用的字号。 参考技术C
1.首先单击图表中的任意位置。
2.然后单击图表工具上的“设计”按钮。
3.可以进行变更图表类型或快速布局等进行变化。
4.可以按“设计”的选项卡进行修改。
5.也可以点击“布局”按钮,选择“布局”里的内容进行修改。
6.布局中可以用于调整图表各个元素的命令,包括七组命令。
7.也可以点击“格式”选项卡,用于改善图表元素的样式、位置和图表的大小。
参考技术D http://blog.csdn.net/goldanycom/archive/2006/04/25/677054.aspx到哪去看看吧!!!!以上是关于.net excel 图表的主要内容,如果未能解决你的问题,请参考以下文章