精华内容
下载资源
问答
  • 此功能从已经存在并保存在 excel 的数据提供嵌入 excel 图表。 如何使用: 1) 此处下载 zip 文件。 2) 打开 test1.m 并相应地设置 test1.xlsx 的地址。 3)运行test1.m,完成。 一旦您了解了该功能的...
  • 如何用C#在Excel中生成图表

    千次阅读 2012-02-11 08:36:51
    一 如何用C#在Excel中生成图表C#源代码程序 exc.Charts.Add(oMissing,oMissing,1,oMissing);  exc.ActiveChart.ChartType=Excel.XlChartType.xlColumnClustered;  exc.ActiveChart.SetSourceData(worksheet....
      
    

    一 如何用C#在Excel中生成图表C#源代码程序

    exc.Charts.Add(oMissing,oMissing,1,oMissing);       

    exc.ActiveChart.ChartType=Excel.XlChartType.xlColumnClustered;

     exc.ActiveChart.SetSourceData(worksheet.get_Range("A1","B10"),Excel.XlRowCol.xlColumns);

    exc.ActiveChart.Location(Excel.XlChartLocation.xlLocationAsObject,"sheet1");

    exc.ActiveChart.HasTitle=true;

    exc.ActiveChart.ChartTitle.Text="chatname";

     exc.ActiveChart.HasDataTable=false;

     

    二 另一个完整的

    /// <summary>

    ///标识绘制图表类型的枚举类

    /// </summary>

    public enum ChartType : int

    {

       /// <summary>

       /// 无图表类型

       /// </summary>

       NoneChartType = 0,

     

       /// <summary>

       /// “饼状图表”类型

       /// </summary>

       PieChartType = 1,

     

       /// <summary>

       /// “柱状图表”类型

       /// </summary>

       ColumnChartType = 2,

     

       /// <summary>

       /// “线状图表”类型

       /// </summary>

       LineChartType = 3

    }

     

    /// <summary>

    /// 导出GridView控件中的数据,并在Excel文件中生成图表

    /// </summary>

    public class ExportExcelAction

    {

        /// <summary>

        /// 私有变量,待绘制图表对象的集合

        /// </summary>

        private List<DataChartObject> _DataChartObjectList;

              

               /// <summary>

        /// 私有变量,输出控制

        /// </summary>

        private System.Web.HttpResponse _Response;

              

               /// <summary>

        /// 私有变量,用于存储生成的临时文件的完整路径

        /// </summary>

        private string FileName;

              

               /// <summary>

        /// 私有变量,用于存储生成的Excel文件的文件信息

        /// </summary>

        private FileInfo _FileInfo;

              

               /// <summary>

        /// 私有变量,系统服务工具类对象

        /// </summary>

        private HttpServerUtility _HttpServerUtility;

              

               /// <summary>

        ///私有变量,记录当前向Excel文件写数据写到了第几数据行 ,默认:第一行

        /// </summary>

        private int _CurrentRowIndex = 1;

              

               /// <summary>

        /// 私有变量,用于表述生成图表的左边起始位置(单元格编号)

        /// </summary>

        private int _StartColumnIndex = 2;

              

               /// <summary>

        /// 私有变量,记录绘图区域跨行的行数

        /// </summary>

        private int _ChartAreaRowSpan = 20;

              

               /// <summary>

        /// 私有变量,记录电子表格与图表下端的距离行数

        /// </summary>

        private int _TableAreaRowSpan = 3;

              

               /// <summary>

        /// 私有变量,设置绘图区域的宽度

        /// </summary>

        private double _ChartAreaWidth = 450;

              

               /// <summary>

        /// 私有变量,获取或设置绘图区域的高度

        /// </summary>

        private object _ChartAreaHeigth

        {

           get

           {

                       this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex, 1],this._Worksheet.Cells[this._CurrentRowIndex + this._ChartAreaRowSpan - 1, 1]);

                this._Range.RowHeight = this._FooterRowHeigth;

                return this._Range.Height;

           }

        }

              

               /// <summary>

        /// 私有变量,记录生成Excel文件的单元格的宽度

        /// </summary>

        private double _ColumnsWidth;

              

               /// <summary>

        /// 公有变量,记录生成Excel文件的单元格宽度

        /// </summary>

        public double ColumnsWidth

        {

            get

            {

                return this._ColumnsWidth;

             }

            set

            {

                this._ColumnsWidth = value;

            }

        }

              

               /// <summary>

        /// 私有变量,记录生成Excel表格时,标题栏目的行高

        /// </summary>

        private double _HeaderRowHeigth;

              

               /// <summary>

        /// 公有变量,记录生成Excel表格时,标题栏目的行高

        /// </summary>

        public double HeaderRowHeigth

        {

           get

           {

              return this._HeaderRowHeigth;

           }

           set

           {

              this._HeaderRowHeigth = value;

           }

        }

              

               /// <summary>

        /// 私有变量,记录生成Excel表格时,内容栏目的行高

        /// </summary>

        private double _ContentRowHeigth;

              

               /// <summary>

        /// 公有变量,记录生成Excel表格时,内容栏目的行高

        /// </summary>

        public double ContentRowHeigth

        {

           get

           {

              return this._ContentRowHeigth;

           }

           set

           {

              this._ContentRowHeigth = value;

           }

        }

              

               /// <summary>

        /// 私有变量,设置普通单元格的行高

        /// </summary>

        private double _FooterRowHeigth;

              

               /// <summary>

        /// 公有变量,设置普通单元格的行高

        /// </summary>

        public double FooterRowHeigth

        {

            get

            {

                return this._FooterRowHeigth;

            }

            set

            {

                this._FooterRowHeigth = value;

            }

        }

              

               /// <summary>

        /// 私有变量,记录生成Excel表格时,表格标题栏目的文字的大小

        /// </summary>

        private int _HeaderTitleFontSize;

              

               /// <summary>

        /// 公有变量,记录生成Excel表格时,表格标题栏目的文字的大小

        /// </summary>

        public int HeaderTitleFontSize

        {

           get

           {

               return this._HeaderTitleFontSize;

           }

           set

           {

               this._HeaderTitleFontSize = value;

           }

        }

              

               /// <summary>

        /// 私有变量,记录生成Excel表格时,表格内容的文字的大小

        /// </summary>

        private int _ContentTextFontSize;

              

               /// <summary>

        ///  公有变量,记录生成Excel表格时,表格内容的文字的大小

        /// </summary>

        public int ContentTextFontSize

        {

           get

           {

               return this._ContentTextFontSize;

           }

           set

           {

               this._ContentTextFontSize = value;

           }

        }

              

               /// <summary>

        /// 私有变量,用以记录该绘图区域距左边距的距离,数据类型为Object类型

        /// </summary>

        private object _ToLeftValue

        {

           get

           {

               return this._Worksheet.get_Range(this._Worksheet.Cells[1, 1],this._Worksheet.Cells[1, this._StartColumnIndex - 1]).Width;

           }

         }

                

                /// <summary>

         /// 私有变量,用以巨鹿该绘图区域距顶边距的距离,数据类型为Object类型

         /// </summary>

         private object _ToTopValue

         {

           get

           {

              return this._Worksheet.get_Range(this._Worksheet.Cells[1, 1],this._Worksheet.Cells[this._CurrentRowIndex - 1, 1]).Height;

            }

          }

                

                 /// <summary>

          /// 私有变量,生成Excel文件的应用服务对象

          /// </summary>

          private Application _Application;

                

                 /// <summary>

          /// 私有变量,生成Excel文件时,Excel文件的工作簿

          /// </summary>

          private Workbook _Workbook;

                

                 /// <summary>

          /// 私有变量,生成Excel文件时,Excel文件的工作簿中的时间表

          /// </summary>

          private Worksheet _Worksheet;

                

                 /// <summary>

          /// 私有变量,Excel文件的单元格序列

          /// </summary>

          private Range _Range;

                

                 /// <summary>

          /// 私有变量,用于标识绘制图表的区域

          /// </summary>

          private Shape _Shape;

                

                 /// <summary>

          /// 私有变量,用于标识绘制的图表对象

          /// </summary>

          private Chart _Chart;

                

                 /// <summary>

          /// 私有变量,用于表述图表单元序列

          /// </summary>

          private Series _Series;

                

                 /// <summary>

          /// 私有变量,用于表述图表的坐标系轴

          /// </summary>

          private Axis _Axis;

                

                 /// <summary>

          /// 私有变量,用于表述图表单元点

          /// </summary>

          private Point _p;

                

                 /// <summary>

          /// 构造函数,构造参数为待绘制图表对象的集合

          /// </summary>

          /// <param name="myDataChartObjectList">构造参数:待绘制图表对象的集合</param>

          public ExportExcelAction(List<DataChartObject> myDataChartObjectList,System.Web.HttpResponse myResponse,System.Web.HttpServerUtility myHttpServerUtility)

                 {

                

                  this._DataChartObjectList = myDataChartObjectList;

           this._Response = myResponse;

           this._HttpServerUtility = myHttpServerUtility;

           this.FileName = this._HttpServerUtility.MapPath("/")+DateTime.Now.ToEnCodeLongString() + ".xls";

         }

                

                /// <summary>

         /// 绘制图表并将其导出到本地文件

         /// </summary>

          public void ExportAction()

          {

            //[新建Excel文件生成程序]

            this._Application = new Application();

            //[向实例对象中插入一个工作簿]

            this._Application.Workbooks.Add(true);

            //[从Excel文件中提取一个工作簿]

            this._Workbook = this._Application.Workbooks[1];

            //[从Excel文件中提取活动的工作表]

            this._Worksheet = this._Workbook.ActiveSheet as Worksheet;

            //[设置生成Excel文件后不进行预览操作]

            this._Application.Visible = false;

            //[开始向Excel文件中写入数据]

            this._DataChartObjectList.ForEach(e =>

            {

     

                //[获取数据源]

                DataSet ds = e.DataSetName;

                //[添加电子表格的标题]

                this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex, this._StartColumnIndex],this._Worksheet.Cells[this._CurrentRowIndex, 5]);

                this._Range.ColumnWidth = this.ColumnsWidth;

                this._Range.RowHeight = this._HeaderRowHeigth;

                this._Range.Merge(null);

                this._Worksheet.Cells[this._CurrentRowIndex, 2] = e.TitleName;

                //[设置单元中的文字字体为“华文仿宋”]

                this._Range.Font.Name = "华文仿宋";

                //[设置单元格中的文字大小为12磅]

                this._Range.Font.Size = this._HeaderTitleFontSize;

                //[设置单元格中的文字为加粗状态]

                this._Range.Font.Bold = true;

                this._CurrentRowIndex++;

     

                 //[创建“电子表格”的“标题”]

                for (int i = 0; i < ds.Tables[0].Columns.Count; i++)

                {

                                        this._Worksheet.Cells[this._CurrentRowIndex, i + this._StartColumnIndex]= ds.Tables[0].Columns[i].ColumnName;

                }

     

                 //[设置选中单元格序列的样式:标题单元格序列]

                 this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex, this._StartColumnIndex],this._Worksheet.Cells[this._CurrentRowIndex, ds.Tables[0].Columns.Count +this._StartColumnIndex - 1]);

                 //[选中全部的单元格序列]

                 this._Range.Select();

                 //[设置文字在单元格中水平居中]

                 this._Range.HorizontalAlignment = XlHAlign.xlHAlignCenter;

                 //[设置文字在单元格中垂直居中]

                 this._Range.HorizontalAlignment = XlVAlign.xlVAlignCenter;

                 //[设置单元格的宽度:为20毫米]

                 this._Range.ColumnWidth = 20;

                 //[设置单元格的行高:]

                 this._Range.RowHeight = this._HeaderRowHeigth;

                 //[设置单元中的文字字体为“华文仿宋”]

                 this._Range.Font.Name = "华文仿宋";

                 //[设置单元格中的文字大小为12磅]

                 this._Range.Font.Size = this._HeaderTitleFontSize;

                 //[设置单元格中的文字为加粗状态]

                 this._Range.Font.Bold = true;

                 //[设置单元格的背景颜色]

                 this._Range.Borders.Value = 1;

                 //[设置该单元格内部的颜色]

                 this._Range.Interior.Color =System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.FromArgb(58, 196, 201));

     

                 //[数据行递增一行]

                 this._CurrentRowIndex++;

     

                 //[向“电子表格”中写入数据]

                 for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

                 {

                    for (int j = 0; j < ds.Tables[0].Columns.Count; j++)

                    {

                       this._Worksheet.Cells[this._CurrentRowIndex, j + this._StartColumnIndex]= ds.Tables[0].Rows[i][j].ToString();

                    }

     

                    //[设置选中单元格序列的样式:内容单元格序列]

                    this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex, this._StartColumnIndex],this._Worksheet.Cells[this._CurrentRowIndex, ds.Tables[0].Columns.Count +this._StartColumnIndex - 1]);

                    //[选中全部的单元格序列]

                    this._Range.Select();

                    //[设置单元格的宽度]

                    this._Range.ColumnWidth = this._ColumnsWidth;

                    //[设置单元格的行高]

                    this._Range.RowHeight = this._ContentRowHeigth;

                    //[设置单元格内文字的字体]

                    this._Range.Font.Name = "新宋体";

                    //[设置单元格内文字的大小]

                    this._Range.Font.Size = this._ContentTextFontSize;

                    //[设置单元格内文字的水平方位]

                    this._Range.HorizontalAlignment = XlHAlign.xlHAlignLeft;

                    //[设置单元格内文字的垂直方位]

                    this._Range.HorizontalAlignment = XlVAlign.xlVAlignCenter;

                    //[设置单元格的边框]

                    this._Range.Borders.Value = 1;

                    this._CurrentRowIndex++;

                 }

                 //[设置图表与表格之间的间隙]

                 this._CurrentRowIndex++;

                 this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex - 1, this._StartColumnIndex],this._Worksheet.Cells[this._CurrentRowIndex - 1,e.DataSetName.Tables[0].Columns.Count+ this._StartColumnIndex - 1]);

                 this._Range.RowHeight = this._FooterRowHeigth;

                 //[绘制“电子表格”对应的“图表”]

                 switch (e.ChartTypeName)

                 {

                     case ChartType.NoneChartType:

                     {

                          break;

                     }

                     case ChartType.PieChartType:

                     {

                          this.DrawPieChartAction(e);

                          break;

                     }

                     case ChartType.ColumnChartType:

                     {

                          this.DrawColumnChartAction(e);

                          break;

                     }

                     case ChartType.LineChartType:

                     {

                          this.DrawLineChartAction(e);

                          break;

                      }

                     default:

                     {

                           break;

                      }

                }

     

                //[设置该“电子表格”或者“图表”与下一个“电子表格”或者“图表”之间的空隙]

                this._CurrentRowIndex += this._TableAreaRowSpan;

                this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex - this._TableAreaRowSpan - 1, 1],this._Worksheet.Cells[this._CurrentRowIndex, 1]);

                this._Range.RowHeight = this._FooterRowHeigth;

              });

                          

                         //[将生成的Excel文件保存到指定的目录中]

                         this._Workbook.SaveCopyAs(this.FileName);

            //[将文件导入到文件流中]

            this._FileInfo = File.Exists(this.FileName) ? new FileInfo(this.FileName) : null;

            //[关闭工作簿]

            this._Workbook.Close(false, null, null);

            //[关闭Excel生成应用程序]

            this._Application.Quit();

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Axis);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._p);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Series);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Range);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Chart);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Shape);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Worksheet);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Workbook);

            //[清理Com端口]

            System.Runtime.InteropServices.Marshal.ReleaseComObject(this._Application);

     

            //[将文件从“服务端”导出到“客户端”]

            this._Response.Clear();

            //[设置写入流的字符编码方式为GB2312]

            this._Response.Charset = "GB2312";

            //[设置写入流的文字编码格式:UTF8]

            this._Response.ContentEncoding = System.Text.Encoding.UTF8;

            // 添加头信息,为"文件下载/另存为"对话框指定默认文件名

            this._Response.AddHeader("Content-Disposition","attachment;filename=" + this._HttpServerUtility.UrlEncode(this._FileInfo.Name));

            // 添加头信息,指定文件大小,让浏览器能够显示下载进度

            this._Response.AddHeader("Content-Length", this._FileInfo.Length.ToString());

            // 指定返回的是一个不能被客户端读取的流,必须被下载

            this._Response.ContentType = "application/ms-excel";

            // 把文件流发送到客户端

            this._Response.WriteFile(this._FileInfo.FullName);

            // 停止页面的执行

            this._Response.End();

            //[关闭文件流]

            File.Delete(this.FileName);

          }

                

                 /// <summary>

          /// 根据“数据源”绘制“饼状图”

          /// </summary>

          /// <param name="ds">数据源</param>

          private void DrawPieChartAction(DataChartObject myDataChartObject)

          {

            //[获取绘制饼状图的数据源]

            DataSet ds = myDataChartObject.DataSetName;

            //[获取数据源所持有数据行的行数]

            int RowsCount = ds.Tables[0].Rows.Count;

            //[获取数据源所持有数据列的列数]

            int ColumnsCount = ds.Tables[0].Columns.Count;

            //[获取绘图区域]

            this._Shape = this._Worksheet.Shapes.AddChart(XlChartType.xl3DPie,this._ToLeftValue,this._ToTopValue,this._ChartAreaWidth,this._ChartAreaHeigth);

            //[获取绘图对象]

            this._Chart = this._Shape.Chart;

            //[获取绘制图表的数据来源]

            this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex - RowsCount - 1,this._StartColumnIndex + myDataChartObject.StartIndex],this._Worksheet.Cells[this._CurrentRowIndex - RowsCount - 1,myDataChartObject.StopIndex + this._StartColumnIndex]);

            this._Chart.SetSourceData(this._Range, XlRowCol.xlColumns);

            this._Chart.SetSourceData(this._Range, XlRowCol.xlRows);

            //[更改图例文字]

            this._Series = this._Chart.SeriesCollection(1) as Series;

            this._Series.Name = myDataChartObject.TitleName;

            //[获取图例上的文字数组]

            Array myArray = this._Series.XValues as Array;

            //[遍历数据源,对“图例文字”和“数据模块”进行装饰]

            for (int i = myDataChartObject.StartIndex; i <= myDataChartObject.StopIndex; i++)

            {

                //[设置饼图每个数据块]

                if (Int32.Parse(ds.Tables[0].Rows[0][i].ToString()) != 0)

                {

                    this._p = this._Series.Points(i - myDataChartObject.StartIndex + 1) as Point;

                    this._p.HasDataLabel = true;

                    this._p.DataLabel.Text =

     

                   ds.Tables[0].Columns[i].ColumnName + ":" + ds.Tables[0].Rows[0][i].ToString();

                 }

                //[设置每个“图例标签”]

                myArray.SetValue(ds.Tables[0].Columns[i].ColumnName,i - myDataChartObject.StartIndex + 1);

            }

     

            //[将图例返回Chart对象序列]

            this._Series.XValues = myArray;

            //[记录当前的索引行数递增20行]

            this._CurrentRowIndex += this._ChartAreaRowSpan;

            //[设置生成的Excel图表的水平旋转角度,零度]

            this._Chart.Rotation = 40;

            //[设置生成的柱状图禁止选择]

            this._Chart.ProtectSelection = false;

            //[设置生成的柱状图禁止修改数据点]

            this._Chart.ProtectGoalSeek = false;

            //[防止修改序列公式]

            this._Chart.ProtectData = false;

            //[防止修改格式设置]

            this._Chart.ProtectFormatting = false;

          }

                

                 /// <summary>

          /// 根据“数据源”绘制“柱状图”

          /// </summary>

          /// <param name="ds">数据源</param>

          private void DrawColumnChartAction(DataChartObject myDataChartObject)

          {

            //[获取绘制柱状图的“数据源”]

            DataSet ds = myDataChartObject.DataSetName;

            //[记录该“数据源”含有数据的“行数”]

            int RowsCount = ds.Tables[0].Rows.Count;

            //[记录该“数据源”含有数据的“列数”]

            int ColumnsCount = ds.Tables[0].Columns.Count;

            //[获取绘制图表的“画板区域”]

            this._Shape = this._Worksheet.Shapes.AddChart(XlChartType.xl3DColumn,this._ToLeftValue, _ToTopValue,this._ChartAreaWidth,this._ChartAreaHeigth);

            //[获取绘制图表的“绘画控件”]

            this._Chart = this._Shape.Chart;

            //[获取绘制图表的数据来源]

            this._Range = this._Worksheet.get_Range(this._Worksheet.Cells[this._CurrentRowIndex - RowsCount - 1,this._StartColumnIndex + myDataChartObject.StartIndex],this._Worksheet.Cells[this._CurrentRowIndex - RowsCount - 1,this._StartColumnIndex + myDataChartObject.StopIndex]);

            this._Chart.SetSourceData(this._Range, XlRowCol.xlRows);

            this._Chart.SetSourceData(this._Range, XlRowCol.xlColumns);

            //[设置生成的Excel图表的X轴旋转角度,270]

            this._Chart.Rotation = 270;

            //[设置生成的Excel图表的Y轴旋转角度,10]

            this._Chart.Elevation = 10;

            //[设置生成的Excel图表的透视角度]

            this._Chart.Perspective = 30;

            //[设置生成的柱状图禁止选择]

            this._Chart.ProtectSelection = false;

            //[设置生成的柱状图禁止修改数据点]

            this._Chart.ProtectGoalSeek = false;

            //[防止修改序列公式]

            this._Chart.ProtectData = false;

            //[防止修改格式设置]

            this._Chart.ProtectFormatting = false;

            //[记录当前的索引行数递增20行]

            this._CurrentRowIndex += this._ChartAreaRowSpan;

            for (int i = myDataChartObject.StartIndex; i <= myDataChartObject.StopIndex; i++)

            {

              //[设置每个标签]

              this._Series =this._Chart.SeriesCollection(i - myDataChartObject.StartIndex + 1) as Series;

              this._Series.Name = ds.Tables[0].Columns[i].ColumnName;

              this._Series.MarkerStyle = XlMarkerStyle.xlMarkerStylePicture;

                          

                           //[设置每个柱状图]

              this._p = this._Series.Points(1) as Point;

              this._p.HasDataLabel = true;

              this._p.DataLabel.Text = ds.Tables[0].Rows[0][i].ToString();

            }

                        

                         //[设置Y值轴]

            this._Axis = this._Chart.Axes(XlAxisType.xlValue, XlAxisGroup.xlPrimary) as Axis;

            this._Axis.HasTitle = true;

            this._Axis.AxisTitle.Text = myDataChartObject.YTitleName;

            this._Axis.HasDisplayUnitLabel = true;

                        

                         //[设置X类别轴]

            this._Axis = this._Chart.Axes(XlAxisType.xlSeriesAxis, XlAxisGroup.xlPrimary) as Axis;

            this._Axis.HasTitle = true;

            this._Axis.AxisTitle.Text = myDataChartObject.XTitleName;

          }

                

                 /// <summary>

          /// 根据“数据源”绘制“线状图”

          /// </summary>

          /// <param name="ds">数据源</param>

          private void DrawLineChartAction(DataChartObject myDataChartObject)

          {

                 }

     }

     

    展开全文
  • 下面小编就为大家分享一篇C# 创建EXCEL图表保存为图片的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • C# Excel 创建组合图表

    千次阅读 2018-04-05 17:55:44
    组合图表是指同一张图表中包含两种或以上样式的图表,这种图表可以帮助我们更全面的分析数据。常见的组合图表是柱形图和折线图混合图表,这篇文章将介绍如何利用C#和免费版Spire.XLS组件创建这种图表。

    组合图表是指在同一张图表中包含两种或以上样式的图表,这种图表可以帮助我们更全面的分析数据。常见的组合图表是柱形图和折线图混合图表,这篇文章将介绍如何利用C#和免费版Spire.XLS组件创建这种图表。

    Excel文档数据截图:

    C# 在 Excel 中创建组合图表

    在使用以下代码前需要引用Spire.Xls.dll文件,并添加以下命名空间:

    using Spire.Xls;
    using Spire.Xls.Charts;
    具体步骤:

    步骤1:创建Workbook实例并加载Excel文档。

    Workbook workbook = new Workbook();
    workbook.LoadFromFile("Input.xlsx");

    步骤2:获取第一张工作表。

    Worksheet sheet = workbook.Worksheets[0];

    步骤3:添加图表到工作表。

    Chart chart = sheet.Charts.Add();
    chart.DataRange = sheet.Range["A1:D5"];
    chart.SeriesDataFromRange = false;

    步骤4:设置图表的位置。

    chart.LeftColumn = 6;
    chart.TopRow = 1;
    chart.RightColumn = 12;
    chart.BottomRow = 13;

    步骤5:给图表的数据系列设置不同的图表类型。

    //将图表的系列1和系列2的图表类型设置为柱形图表
    var cs1 = (ChartSerie)chart.Series[0];
    cs1.SerieType = ExcelChartType.ColumnClustered;
    var cs2 = (ChartSerie)chart.Series[1];
    cs2.SerieType = ExcelChartType.ColumnClustered;
    
    //将图表的系列3的图表类型设置为折线图表
    var cs3 = (ChartSerie)chart.Series[2];
    cs3.SerieType = ExcelChartType.LineMarkers;
    
    //设置图表标题为空
    chart.ChartTitle = string.Empty;

    步骤6:保存文档。

    workbook.SaveToFile("Output.xlsx", ExcelVersion.Version2010);
    效果图:

    C# 在 Excel 中创建组合图表


    完整代码:

    Workbook workbook = new Workbook();
    //加载Excel文档
    workbook.LoadFromFile("Input.xlsx");
    
    //获取第一张工作表
    Worksheet sheet = workbook.Worksheets[0];
    
    //添加图表到工作表
    Chart chart = sheet.Charts.Add();
    chart.DataRange = sheet.Range["A1:D5"];
    chart.SeriesDataFromRange = false;
    
    //设置图表的位置
    chart.LeftColumn = 6;
    chart.TopRow = 1;
    chart.RightColumn = 12;
    chart.BottomRow = 13;
    
    //将图表的系列1和系列2的图表类型设置为柱形图表
    var cs1 = (ChartSerie)chart.Series[0];
    cs1.SerieType = ExcelChartType.ColumnClustered;
    var cs2 = (ChartSerie)chart.Series[1];
    cs2.SerieType = ExcelChartType.ColumnClustered;
    
    //将图表的系列3的图表类型设置为折线图表
    var cs3 = (ChartSerie)chart.Series[2];
    cs3.SerieType = ExcelChartType.LineMarkers;
    
    //设置图表标题为空
    chart.ChartTitle = string.Empty;
    
    //保存文档
    workbook.SaveToFile("Output.xlsx", ExcelVersion.Version2010);


    展开全文
  • 在Excel图表中使用QQ图片.rar,本例的内容包括:1、折线图中使用QQ图片;2、柱形图中使用QQ图片。
  • Excel中插入图表设计选项卡无法选择样式解决办法 原文地址:http://www.orcy.net.cn/537.html 1.插入图表后,设计选项卡无法选择样式,如下图,所有样式均为灰色 造成此问题的原因是,该表格文件为97-...

    Excel中插入图表后在设计选项卡无法选择样式解决办法

    原文地址:http://www.orcy.net.cn/537.html

    1.插入图表后,在设计选项卡无法选择样式,如下图,所有样式均为灰色

    造成此问题的原因是,该表格文件为97-2003版本的格式,所以在office2016及以上版本的 Excel中打开为【兼容模式】,无法使用此功能,具体解决办法如下:

    2.单击右上角【文件】

    在弹出的窗口中选择【另存为】-【这台电脑】选择保存位置,例如保存到【桌面】

    3.选择保存位置后,在接下来的对话框中选择【保存类型】一定要为【Excel工作薄】

    4.返回桌面,打开另存为的文件,在【设计选项卡】,各种样式已经可以选择

    5.至此,大功告成 !

    展开全文
  • 用c#在excel中插入图表

    千次阅读 2010-03-31 22:57:00
     ////保存图表  //xlBook.SaveAs(Application.StartupPath + "//图表.xls", Missing.Value,  // Missing.Value, Missing.Value, Missing.Value, Missing.Value,  // Excel.XlSaveAsAccessMode....

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Reflection;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;

    namespace 报表示例
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            /// <summary>
            /// 生成图表
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnCreateChart_Click(object sender, EventArgs e)
            {
                Excel.Application xlApp;
                Excel.Workbook xlBook;
                Excel.Workbooks xlBooks;
                Excel.Range xlRange;
                Excel.Sheets xlsheets;
                Excel.Worksheet xlSheet;
                try
                {
                    xlApp = new Excel.Application();
                    xlBooks = xlApp.Workbooks;
                    xlBook = xlBooks.Add(Missing.Value);
                    xlsheets = xlBook.Worksheets;
                    xlSheet = (Excel.Worksheet)xlsheets.get_Item(1);
                    // xlApp.DisplayAlerts = false;
                    // create cell header
                    object[] objHeaders = { "数量", "数据1", "数据2", "数据3", "数据4","数据5" };
                    // set header text
                    xlRange = xlSheet.get_Range("A1", "F1");
                    xlRange.set_Value(Missing.Value, objHeaders);
                    xlRange.Font.Bold = true;
                    xlRange.Font.Name = "宋体";
                    xlRange.Font.Size = 10;
                    xlRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                    for (int i = 0; i < 13; i++)
                    {
                        xlSheet.Cells[2 + i, 1] = i;
                        xlSheet.Cells[2 + i, 2] = i + 1;
                        xlSheet.Cells[2 + i, 3] = i + 2;
                        xlSheet.Cells[2 + i, 4] = i + 3;
                        xlSheet.Cells[2 + i, 5] = i + 4;
                        xlSheet.Cells[2 + i, 6] = i + 5;
                    }

                    Excel.Chart xlChart = (Excel.Chart)xlBook.Charts.Add(
                        Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                    Excel.Range chartRage = xlSheet.get_Range("A1:A14", "B1:F14");

                    xlChart.ChartWizard(chartRage, Excel.XlChartType.xl3DColumn,
                        Missing.Value, Excel.XlRowCol.xlColumns, 1, 1, true,
                        "实验室效率分析", "上机时间", "上机次数", Missing.Value);

                    保存图表
                    //xlBook.SaveAs(Application.StartupPath + "//图表.xls", Missing.Value,
                    //    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    //    Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value,
                    //    Missing.Value, Missing.Value, Missing.Value);
                   
                    //显示图表
                    xlApp.Visible = true;

                    关闭文件
                    //xlBook.Close(false, Missing.Value, Missing.Value);

                    //MessageBox.Show("已生成Excel图表: /n" + Application.StartupPath + "//图表.xls", "提示", MessageBoxButtons.OK);
                }
                catch (Exception ec)
                {
                    MessageBox.Show(ec.ToString());
                }
                finally
                {
                    xlRange = null;
                    xlSheet = null;
                    xlBook = null;
                    xlApp = null;
                }

            }

            private void Form1_Load(object sender, EventArgs e)
            {
             
            }

            private void button2_Click(object sender, EventArgs e)
            {           
                Excel.Application xlApp;
                Excel.Workbook xlBook;
                Excel.Worksheet xlSheet;

                OpenFileDialog dlg = new OpenFileDialog();
                dlg.ShowDialog();
                string filename =dlg.FileName ;
                xlApp = new Excel.Application();
                xlBook = xlApp.Workbooks.Open(filename,
                     Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                     Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                     Missing.Value, Missing.Value, Missing.Value, Missing.Value);
               
                xlSheet = (Excel.Worksheet)xlBook.Sheets[1];
                xlApp.Visible=true;
                Application.DoEvents();
                SaveFileDialog dlg2 = new SaveFileDialog();
                dlg2.ShowDialog();
                filename = dlg2.FileName;
               
                object temp = Missing.Value;
                xlSheet.SaveAs(filename, temp, temp, temp, temp, temp, Excel.XlSaveAsAccessMode.xlShared, temp, temp,
                temp);
                MessageBox.Show("保存成功!");
            }
        }
    }

    展开全文
  • 1.Excel启用宏 Excel默认不启用宏,要先...然后“选项”标签选择“自定义功能区”,开发工具前面打钩,点确定,就可以在excel菜单栏看到“开发工具”选项卡了:     2.使用VBA(Visual Basic For A...
  • 如何发送Excel中图表到邮件

    千次阅读 2018-12-18 15:06:24
    来源:宜信技术学院 作者:王春强 导语:本文主要解决导出Excel中图表,...问题是Echart等图表Excel中图表有差别。 方案二:直接操作Excel,填充数据后,截取Excel中图表为图片,发送邮件。 注:因方案一可直接实现,本...
  • 如何将Excel中图表导出为图片

    万次阅读 2018-10-25 22:12:57
    1、打开Excel,按照需求绘制图表。 2、选中我们想要绘制的图表(即让图表成为被选中的状态)。 3、选择顶部左侧菜单的 开始 -&gt; 复制 -&gt; 复制为图片 。 4、 复制图片 的对话框,选择...
  • 我们有时需要网页插入一个图表,或者其它非Office程序中用到图表没有一种办法可以将Excel工作簿图表插入到其它程序呢?其实可以通过把工作表存为一个HTML文件的方式来实现,另存为网页时,Excel会...
  • 我们制作图表的过程时候需要制作一组相同类型不同数据源的图表,需要将图标的样式设置为相同格式。 处理方式 先设置一个图表样式之后,点击设计菜单,点击左侧的另存为模板菜单 制作相同样式新图表...
  • Excel的自定义图表类型.rar,Excel不仅提供了20种内部自定义图表类型,还允许用户将绘制好的图表保存为自定义图表类型。本例展示了20种内部自定义图表类型的样式。
  • a.插入图表后,设计选项卡无法选择样式,如下图,所有样式均为...弹出的窗口选择【另存为】-【这台电脑】选择保存位置,例如保存到【桌面】 c.选择保存位置后,接下来的对话框选择【保存类型】一定要...
  • Spire.XLS是一款专业的Excel控件,无需安装微软Excel,也... 【下载Spire.XLS最新试用版】组合图表是指同一张图表中包含两种或以上样式的图表,我们使用Excel分析数据时,时候会用到这种图表。本文将介绍如何...
  • 在Excel中可能会出现一些保存不了的问题,尤其是录入了繁多的数据过后。保存不了使非常困扰的。这个时候就需要一些解决方法进行解决了,如果遇到了这个问题不会解决的朋友,可以学习一下。下面是由学习啦小编分享...
  • Excel自定义图表.rar

    2019-09-26 10:05:49
    Excel自定义图表.rar,如果制作了一个漂亮的图表以后作图时如何重复使用这个漂亮的格式呢?答案是将这个漂亮的图表保存为“自定义图表”。
  • C# 创建EXCEL图表保存为图片

    千次阅读 2018-11-16 11:23:23
    数据表格能够清晰的呈现数据信息,但是我们对于一些繁杂多变的数据想要很直观的看到数据变化走势或者数据的占比时,数据图表会更具代表性,并且呈现数据信息上也更形象,也能获取更多纯数字信息所不能直接展现的...
  • Excel-导出图表的方法

    千次阅读 2020-02-26 20:24:32
    在Excel中选中图表复制,打开Word软件,右上角【粘贴】【粘贴为图片】即可。 2、导出到文件夹-单张图表 在Excel软件,点击将要复制的图表,右上角点击【复制】【复制为图片】,再打开【画图】工具【Ctrl+V】粘贴...
  • java生成excel图表

    2014-08-19 20:39:48
    java生成excel图表
  • 参考:... 比如将选区变为图片保存到桌面: 1 Sub 将选区转为图片存到桌面() 2 Dim ans As Byte, Pic As String, Paths As String 3 On Error Resume Next 4 Pat...
  • OpenXml To Excel之插入图表

    千次阅读 2013-03-29 09:53:57
    这种方法适合表的行,列都是固定的,比如说3行3列,这样我们就可以先用假数据填充,然后根据假数据直接在Excel中插入图表。 之后通过OpenXml填充真实的数据,图表会相应的变化。 模板 数据填充后
  • Excel 2013导出图表的两种方法

    万次阅读 2015-08-24 12:59:56
    使用Excel时,经常需要将绘制的图形...本文推荐两种方法,分别将excel中图表导出为pdf和png格式。 方法1: 选中将要导出的图表,点击print,选择Microsoft Print to PDF或者系统上安装的第三方打印机,比如Nit
  • 中文版Excel.2007图表宝典 1/2

    热门讨论 2012-04-06 18:49:24
    读者从中还可以学习如何在图表中修改数据、处理遗漏的数据、格式化图表、使用趋势线,以及从数据透视表创建图表等相关内容。除此之外,还可以学习如何通过AutoShapes,用图片和色彩修饰图表,以及利用VBA编程创建...
  • 中文版Excel.2007图表宝典 2/2

    热门讨论 2012-04-06 19:01:36
    读者从中还可以学习如何在图表中修改数据、处理遗漏的数据、格式化图表、使用趋势线,以及从数据透视表创建图表等相关内容。除此之外,还可以学习如何通过AutoShapes,用图片和色彩修饰图表,以及利用VBA编程创建...
  • Excel动态图表

    千次阅读 2008-05-15 11:26:00
    Excel动态图表 A B C
  • 通过python运行得到实验数据,通过手动将数据输入到excel太过麻烦。 解决办法: 1、pip install openpyxl安装 2、注:x_1_1与y_1均为实验数据,为列表格式 from openpyxl import Workbook x_1_1 = [8, 27, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,168
精华内容 6,867
关键字:

在excel中保存图表的方式有