21 private static string strCurrentPath = @" D:\Code\ " ; 23 private static string title = " testGraph " ; 25 static void Main( string [] args) 26 { 28 Console.WriteLine( " begin " ); 30 Program p = new Program(); 32 p.CreateExcel( " TestGraph " , " TestGraph.xlsx " , " TestGraph " ); 34 Console.WriteLine( " done " ); 36 } 42 private void CreateExcel( string title, string fileName, string sheetNames) 43 { 44 // 待生成的文件名称 45 string FileName = fileName; 47 string FilePath = strCurrentPath + FileName; 49 FileInfo fi = new FileInfo(FilePath); 51 if (fi.Exists) // 判断文件是否已经存在,如果存在就删除! 52 { 54 fi.Delete(); 56 } 58 if (sheetNames != null && sheetNames != "" ) 59 { 61 Microsoft.Office.Interop.Excel.Application m_Excel = new Microsoft.Office.Interop.Excel.Application(); // 创建一个Excel对象(同时启动EXCEL.EXE进程) 63 m_Excel.SheetsInNewWorkbook = 1 ; // 工作表的个数 65 Microsoft.Office.Interop.Excel._Workbook m_Book = (Microsoft.Office.Interop.Excel._Workbook)(m_Excel.Workbooks.Add(Missing.Value)); // 添加新工作簿 67 Microsoft.Office.Interop.Excel._Worksheet m_Sheet = (Microsoft.Office.Interop.Excel._Worksheet)(m_Excel.Worksheets.Add(Missing.Value)); 69 #region 处理 71 DataTable auto = new DataTable(); 73 auto.Columns.Add( " LaunchName " ); 75 auto.Columns.Add( " Usage " ); 77 auto.Rows.Add( new Object[] { " win8 apac " , " 100 " }); 78 auto.Rows.Add( new Object[] { " win8 china " , " 200 " }); 79 auto.Rows.Add( new Object[] { " win8 india " , " 300 " }); 80 // DataSet ds = ScData.ListData("exec Vote_2008.dbo.P_VoteResult_Update " + int.Parse(fdate)); 81 DataTableToSheet(title, auto, m_Sheet, m_Book, 1 ); 83 #endregion 85 #region 保存Excel,清除进程 87 m_Book.SaveAs(FilePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 89 // m_Excel.ActiveWorkbook._SaveAs(FilePath, Excel.XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null); 91 m_Book.Close( false , Missing.Value, Missing.Value); 93 m_Excel.Quit(); 95 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Book); 97 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Excel); 99 m_Book = null ; 101 m_Sheet = null ; 103 m_Excel = null ; 105 GC.Collect(); 107 // this.Close(); // 关闭窗体 109 #endregion 111 } 113 } 116 /// <summary> 118 /// 将DataTable中的数据写到Excel的指定Sheet中 120 /// </summary> 122 /// <param name="dt"></param> 124 /// <param name="m_Sheet"></param> 126 public void DataTableToSheet( string title, DataTable dt, Microsoft.Office.Interop.Excel._Worksheet m_Sheet, 128 Microsoft.Office.Interop.Excel._Workbook m_Book, int startrow) 129 { 130 // 以下是填写EXCEL中数据 132 Microsoft.Office.Interop.Excel.Range range = m_Sheet.get_Range(m_Sheet.Cells[ 1 , 1 ], m_Sheet.Cells[ 1 , 2 ]); 133 // range.MergeCells = true; // 合并单元格 135 range.Font.Bold = true ; // 加粗单元格内字符 137 // 写入题目 139 m_Sheet.Cells[startrow, startrow] = title; 141 int rownum = dt.Rows.Count; // 行数 143 int columnnum = dt.Columns.Count; // 列数 145 int num = rownum + 2 ; // 得到数据中的最大行数 147 // 写入列标题 149 for ( int j = 0 ; j < columnnum; j++ ) 150 { 152 int bt_startrow = startrow + 1 ; 154 // 将字段名写入文档 156 m_Sheet.Cells[bt_startrow, 1 + j] = dt.Columns[j].ColumnName; 158 // 单元格内背景色 159 m_Sheet.get_Range(m_Sheet.Cells[bt_startrow, 1 + j], m_Sheet.Cells[bt_startrow, 1 + j]).Interior.ColorIndex = 15 ; 161 } 163 // 逐行写入数据 165 for ( int i = 0 ; i < rownum; i++ ) 166 { 168 for ( int j = 0 ; j < columnnum; j++ ) 169 { 171 m_Sheet.Cells[startrow + 2 + i, 1 + j] = dt.Rows[i][j].ToString(); 173 } 175 } 177 m_Sheet.Columns.AutoFit(); 179 // 在当前工作表中根据数据生成图表 181 CreateChart(m_Book, m_Sheet, num); 183 } 187 private void CreateChart(Microsoft.Office.Interop.Excel._Workbook m_Book, Microsoft.Office.Interop.Excel._Worksheet m_Sheet, int num) 188 { 190 Microsoft.Office.Interop.Excel.Range oResizeRange; 192 Microsoft.Office.Interop.Excel.Series oSeries; 194 m_Book.Charts.Add(Missing.Value, Missing.Value, 1 , Missing.Value); 195 m_Book.ActiveChart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlPie; // 设置图形 197 // 设置数据取值范围 199 m_Book.ActiveChart.SetSourceData(m_Sheet.get_Range( " A2 " , " B " + num.ToString()), Microsoft.Office.Interop.Excel.XlRowCol.xlColumns); 201 m_Book.ActiveChart.Location(Microsoft.Office.Interop.Excel.XlChartLocation.xlLocationAutomatic, title); 203 // 以下是给图表放在指定位置 205 m_Book.ActiveChart.Location(Microsoft.Office.Interop.Excel.XlChartLocation.xlLocationAsObject, m_Sheet.Name); 207 oResizeRange = (Microsoft.Office.Interop.Excel.Range)m_Sheet.Rows.get_Item( 10 , Missing.Value); 209 m_Sheet.Shapes.Item( " Chart 1 " ).Top = 0 ; // 调图表的位置上边距 210 oResizeRange = (Microsoft.Office.Interop.Excel.Range)m_Sheet.Columns.get_Item( 5 , Missing.Value); // 调图表的位置左边距 211 m_Sheet.Shapes.Item( " Chart 1 " ).Left = ( float )( double )oResizeRange.Left; 212 m_Sheet.Shapes.Item( " Chart 1 " ).Width = 432 ; // 调图表的宽度 213 m_Sheet.Shapes.Item( " Chart 1 " ).Height = 300 ; // 调图表的高度 214 // m_Book.ActiveChart.PlotArea.Interior.Color = "blue"; // 设置绘图区的背景色 215 m_Book.ActiveChart.PlotArea.Border.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone; // 设置绘图区边框线条 216 m_Book.ActiveChart.PlotArea.Width = 400 ; 217 m_Book.ActiveChart.PlotArea.Height = 300 ; 218 m_Book.ActiveChart.PlotArea.Top = 30 ; 219 m_Book.ActiveChart.PlotArea.Left = 0 ; 220 // m_Book.ActiveChart.ChartArea.Interior.ColorIndex = 10; // 设置整个图表的背影颜色 221 // m_Book.ActiveChart.ChartArea.Border.ColorIndex = 8; // 设置整个图表的边框颜色 222 m_Book.ActiveChart.ChartArea.Border.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; // 设置边框线条 223 m_Book.ActiveChart.HasDataTable = false ; 224 m_Book.ActiveChart.HasTitle = true ; 225 m_Book.ActiveChart.HasLegend = true ; 226 m_Book.ActiveChart.Shapes.AddLabel(MsoTextOrientation.msoTextOrientationHorizontal, 0 , 0 , 50 , 50 ); 228 // 设置Legend图例的位置和格式 229 // m_Book.ActiveChart.Legend.Top = 50; // 具体设置图例的上边距 230 m_Book.ActiveChart.Legend.Left = 410 ; // 具体设置图例的左边距 231 m_Book.ActiveChart.Legend.Interior.ColorIndex = Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexNone; 232 m_Book.ActiveChart.Legend.Width = 100 ; 233 m_Book.ActiveChart.Legend.Font.Size = 12 ; 234 m_Book.ActiveChart.Legend.Font.Bold = true ; 235 m_Book.ActiveChart.Legend.Position = Microsoft.Office.Interop.Excel.XlLegendPosition.xlLegendPositionCorner; // 设置图例的位置 236 m_Book.ActiveChart.Legend.Border.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone; // 设置图例边框线条 238 oSeries = (Microsoft.Office.Interop.Excel.Series)m_Book.ActiveChart.SeriesCollection( 1 ); 240 oSeries.Border.ColorIndex = 45 ; 241 oSeries.Border.Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin; 243 } 245 } 247 } 这两天客户有个需求让在EXCEL中生成饼图,上网搜了下,写了个代码。效果如图:上代码:View Code 1 using System; 2 3 using System.Collections.Generic; 4 5 using System.Text; 6 7 using System.IO; 8 9 ...
gailzhao 原文 关于 C# 操作 EXCEL ,生成图表的全面应用   近来我在开发一个运用 C# 生成 EXCEL 文档的程序,其 要根据数据生成相应的图表,该图表对颜色和格式都有严格的要求,在百度和谷歌 搜索了所有的相关信息,只有部分介绍,具体格式的介绍没有,经过我不断的实践和探索,终于完成了这项艰巨的任务。   有两种实现方式,一种是利用OWC11组件完成,一种运用 Excel 完成!
许多时候我们都会在Microsoft的 Excel 2007 汇总处理一些表格,可是,在汇总的时候常会遇到这样一个问题:各个表格的排序结果有的是竖排,有的是横排。往一块儿汇总势必得按同一种方式 排列 才能排出结果,看来还必须对 Excel 2007数据的行列进行转换。    如何进行 Excel 2007数据的行列转换呢?难不成得手工一个一个地剪切、粘贴吗?当然不必, Excel 软件早就给我们提供了这...
一 如何用C#在 Excel 生成图表 C# 源代码程序 exc. Char ts.Add(oMissing,oMissing,1,oMissing);        exc.Active Char t. Char tType= Excel .Xl Char tType.xlColumnClustered;  exc.Active Char t.SetSourceData(worksheet.get_Range("A1
A:可以 使用 Matplotlib库来 绘制 饼图 ,并 使用 plt.legend()函数添加图例。要将图例显示在 饼图 的内部,可以 使用 plt.legend(loc='best', bbox_to_anchor=(0.5, 0.5))函数,并设置bbox_to_anchor参数的值来控制图例在图 的位置。例如,设置为(0.5,0.5)表示将图例放置在图 心。 示例代码如下: ```python import matplotlib.pyplot as plt labels = ['A', 'B', 'C', 'D'] sizes = [15, 30, 45, 10] # 绘制 饼图 fig1, ax1 = plt.subplots() ax1. pie (sizes, labels=labels, autopct='%1.1f%%', startangle=90) # 设置图例位置 ax1.legend(loc='best', bbox_to_anchor=(0.5, 0.5)) plt.show() 执行上述代码可以 绘制 如下的 饼图 ,图例位于 饼图 内部: ![ 饼图 ](https://img-blog.csdnimg.cn/20210909154941159.png)