【C# 操作Excel生成折线图,导出折线图图片】

C# 操作Excel生成折线图,导出折线图图片

记录c#学习过程

用到的命名空间

using Excel = Microsoft.Office.Interop.Excel;
using _Workbook = Microsoft.Office.Interop.Excel.Workbook;
using _Worksheet = Microsoft.Office.Interop.Excel.Worksheet;
using Spire.Xls;
using System.Drawing;
using System.Drawing.Imaging;

  1. 创建excel
    private void CreateEexcel()

     {
         excelPath = Path.Combine(workspace, "table.xlsx");
         Excel.Workbook xlWorkBook;
         Excel.Worksheet xlWorkSheet;
         object misValue = System.Reflection.Missing.Value;
         xlApp = new Excel.Application();
         xlWorkBook = xlApp.Workbooks.Add(misValue);
         xlWorkSheet = xlWorkBook.Sheets["Sheet1"];
         //在当前工作表中根据数据生成图表
         CreateChart(xlWorkBook, xlWorkSheet);
         xlWorkBook.SaveAs(excelPath);
         xlWorkBook.Close(true, misValue, misValue);
         xlApp.Quit();
     }`
    
  2. 创建折线图
    private void CreateChart(Excel._Workbook m_Book, Excel._Worksheet m_Sheet)

     {
        Excel.Range oResizeRange;
         m_Book.Charts.Add(Missing.Value, Missing.Value, 1, Missing.Value);
         m_Book.ActiveChart.ChartType = Excel.XlChartType.xlLine;//设置图形
    
         //设置数据取值范围
         m_Book.ActiveChart.SetSourceData(m_Sheet.Range["A1", "F6"], Excel.XlRowCol.xlColumns);
         //以下是给图表放在指定位置
         m_Book.ActiveChart.Location(Excel.XlChartLocation.xlLocationAsObject, m_Sheet.Name);
         oResizeRange = (Excel.Range)m_Sheet.Rows.get_Item(10, Missing.Value);
         m_Sheet.Shapes.Item("Chart 1").Top = (float)(double)oResizeRange.Top;//调图表的位置上边距
         oResizeRange = (Excel.Range)m_Sheet.Columns.get_Item(6, Missing.Value);  //调图表的位置左边距
         //m_Sheet.Shapes.Item("Chart 1").Left = (float)(double)oResizeRange.Left;
         //m_Sheet.Shapes.Item("Chart 1").Width = 400;//调图表的宽度
         //m_Sheet.Shapes.Item("Chart 1").Height = 250; //调图表的高度
    
         m_Book.ActiveChart.PlotArea.Interior.ColorIndex = 19; //设置绘图区的背景色 
         m_Book.ActiveChart.PlotArea.Border.LineStyle = Excel.XlLineStyle.xlLineStyleNone;//设置绘图区边框线条
         // m_Book.ActiveChart.PlotArea.Width = 400;?? //设置绘图区宽度
         //m_Book.ActiveChart.ChartArea.Interior.ColorIndex = 10; //设置整个图表的背影颜色
         //m_Book.ActiveChart.ChartArea.Border.ColorIndex = 8;// 设置整个图表的边框颜色
         //? m_Book.ActiveChart.ChartArea.Border.LineStyle = Excel.XlLineStyle.xlLineStyleNone;//设置边框线条
         m_Book.ActiveChart.HasDataTable = false;
         //设置X轴的显示
         Excel.Axis xAxis = (Excel.Axis)m_Book.ActiveChart.Axes(Excel.XlAxisType.xlCategory, Excel.XlAxisGroup.xlPrimary);
         xAxis.HasTitle = false;
         xAxis.TickLabels.Font.Name = "宋体";
         xAxis.TickLabels.Font.Size = 9;
         //设置Y轴的显示
         Excel.Axis yAxis = (Excel.Axis)m_Book.ActiveChart.Axes(Excel.XlAxisType.xlValue, Excel.XlAxisGroup.xlPrimary);
         yAxis.TickLabels.Orientation = Excel.XlTickLabelOrientation.xlTickLabelOrientationHorizontal;//Y轴显示的方向,是水平还是垂直等
         yAxis.TickLabels.Font.Size = 8;
         yAxis.TickLabels.Font.Name = "宋体";
         yAxis.LogBase = 10;
     }`
    
  3. 数据写入excel
    public bool WriteInXls(string filename, Excel.Application xls)

     {
         //启动Excel应用程序
         xls.Visible = false;
         //如果表已经存在,可以用下面的命令打开
         _Workbook book = xls.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);
         _Worksheet sheet;//定义sheet变量
         xls.Visible = false;//设置Excel后台运行
         xls.DisplayAlerts = false;//设置不显示确认修改提示
         try
         {
             sheet = book.Worksheets.Item[1];//(_Worksheet)book.Worksheets.get_Item[1];//获得第i个sheet,准备写入
         }
         catch (Exception ex)//不存在就增加一个sheet
         {
             sheet = (_Worksheet)book.Worksheets.Add(Missing.Value, book.Worksheets[book.Sheets.Count], 1, Missing.Value);
         }
         //单元格填入数据
         SetSheet(ref sheet);
         //将表另存为
         //book.SaveAs(filename, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
         //如果表已经存在,直接用下面的命令保存即可
         book.Save();
    
         book.Close(false, Missing.Value, Missing.Value);//关闭打开的表
         xls.Quit();//Excel程序退出
         //sheet,book,xls设置为null,防止内存泄露
         sheet = null;
         book = null;
         xls = null;
         GC.Collect();//系统回收资源
         return true;
     }`
    
  4. 单元格填入数据
    private void SetSheet(ref _Worksheet sheet)

     {
         //判断当前树节点是第几个
         int treeNum = GetSelectedNodeProfile();
         sheet.Cells[1, 2] = Convert.ToString("A谱");
         sheet.Cells[1, 3] = Convert.ToString("B谱");
         sheet.Cells[1, 4] = Convert.ToString("C谱");
         sheet.Cells[1, 5] = Convert.ToString("D谱");
         sheet.Cells[1, 6] = Convert.ToString("E谱");
    
         //X坐标:
         for (int row = 0; row < 5; row++)//循环设置每个单元格的值
         {
             sheet.Cells[row + 2, 1] = Convert.ToString(row);
         }
         
         //Y坐标:
         //A
         List<double> Arow = new List<double>();
         Arow.Add(Convert.ToDouble(textBox_Datar1c1.Text));
         Arow.Add(Convert.ToDouble(textBox_Datar1c2.Text));
         Arow.Add(Convert.ToDouble(textBox_Datar1c3.Text));
         Arow.Add(Convert.ToDouble(textBox_Datar1c4.Text));
         Arow.Add(Convert.ToDouble(textBox_Datar1c5.Text));
         for (int row = 0; row < Arow.Count; row++)//循环设置每个单元格的值
             sheet.Cells[row+2, 2] = Convert.ToString(Arow[row]) ;
         //B
         List<double> Brow = new List<double>();
         Brow.Add(Convert.ToDouble(textBox_Datar2c2.Text));
         Brow.Add(Convert.ToDouble(textBox_Datar2c3.Text));
         Brow.Add(Convert.ToDouble(textBox_Datar2c4.Text));
         Brow.Add(Convert.ToDouble(textBox_Datar2c5.Text));
         for (int row = 0; row < Brow.Count; row++)//循环设置每个单元格的值
             sheet.Cells[row + 2,3] = Convert.ToString(Brow[row]);
    
         //C
         List<double> Crow = new List<double>();
         Crow.Add(Convert.ToDouble(textBox_Datar3c3.Text));
         Crow.Add(Convert.ToDouble(textBox_Datar3c4.Text));
         Crow.Add(Convert.ToDouble(textBox_Datar3c5.Text));
         for (int row = 0; row < Crow.Count; row++)//循环设置每个单元格的值
             sheet.Cells[row + 2, 4] = Convert.ToString(Crow[row]);
    
         //D
         List<double> Drow = new List<double>();
         Drow.Add(Convert.ToDouble(textBox_Datar4c4.Text));
         Drow.Add(Convert.ToDouble(textBox_Datar4c5.Text));
         for (int row = 0; row < Drow.Count; row++)//循环设置每个单元格的值
             sheet.Cells[row + 2, 5] = Convert.ToString(Drow[row]);
    
         double Erow = Convert.ToDouble(textBox_Datar5c5.Text);
         sheet.Cells[ 2, 6] = Convert.ToString(Erow);
     }`
    
  5. chart导出图片
    private void ChartToPicture()

     {
         Workbook workbook = new Workbook();
         workbook.LoadFromFile(excelPath);
         Worksheet sheet = workbook.Worksheets[0];
         Image[] images = workbook.SaveChartAsImage(sheet);
    
         for (int i = 0; i < images.Length; i++)
         {
             //将图表保存为图片
             string chartName = "chart.png";
             string chartPath = Path.Combine(workspace, chartName);
             DeleteFile(chartPath);
             //images[i].Save(string.Format("img-{0}.png", i), ImageFormat.Png);
             images[i].Save(chartPath);
         }
     }`
    
  6. 显示图片
    private void ShowChartPicture(string picturePath)

     {
         pictureBox1.Image = new Bitmap(picturePath);
     }`
    

在这里插入图片描述

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C# 中使用 Microsoft Office 的 Excel 应用程序的编程接口,可以通过以下步骤生成折线图: 1. 创建 Excel 应用程序对象和工作簿对象,并打开 Excel 文件: ``` var excelApp = new Microsoft.Office.Interop.Excel.Application(); var workBook = excelApp.Workbooks.Open("path/ExcelFile.xlsx"); ``` 2. 获取工作表对象,并选择需要生成折线图的区域: ``` var workSheet = (Microsoft.Office.Interop.Excel.Worksheet)workBook.Worksheets[1]; var range = workSheet.Range["A1:B10"]; ``` 3. 创建一个新的图表对象: ``` var charts = (Microsoft.Office.Interop.Excel.ChartObjects)workSheet.ChartObjects(Type.Missing); var chartObject = charts.Add(100, 100, 300, 300); var chart = chartObject.Chart; ``` 4. 设置图表类型为折线图: ``` chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlLine; ``` 5. 将数据源设置为选择的区域: ``` var seriesCollection = (Microsoft.Office.Interop.Excel.SeriesCollection)chart.SeriesCollection(Type.Missing); var series = seriesCollection.NewSeries(); series.Values = range; ``` 6. 格式化图表,例如设置坐标轴标签和标题等: ``` chart.HasTitle = true; chart.ChartTitle.Text = "折线图"; var axis = (Microsoft.Office.Interop.Excel.Axis)chart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlCategory, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary); axis.HasTitle = true; axis.AxisTitle.Text = "X轴"; axis = (Microsoft.Office.Interop.Excel.Axis)chart.Axes(Microsoft.Office.Interop.Excel.XlAxisType.xlValue, Microsoft.Office.Interop.Excel.XlAxisGroup.xlPrimary); axis.HasTitle = true; axis.AxisTitle.Text = "Y轴"; ``` 7. 关闭 Excel 应用程序,并释放相关资源: ``` workBook.Close(false); System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); excelApp.Quit(); ``` 需要注意的是,在使用完 Excel 应用程序对象和工作簿对象后,需要调用 `System.Runtime.InteropServices.Marshal.ReleaseComObject()` 方法来释放相关资源,否则可能会导致内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小余是条鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值