【问题标题】:Export Chart to Excel File将图表导出到 Excel 文件
【发布时间】:2019-01-05 02:21:40
【问题描述】:

我是C# Programming 的新手。我正在创建一个winform application,我在其中使用System.Windows.Forms.DataVisualization Chart。这个chart 包含多个系列。我想将该图表数据导出到 Excel 文件。

向我正在使用的图表添加数据

 chart.Series[mSeries].Points.AddXY(dt, avgData);

dt 是 current DateTimedata

所以我的 Excel 文件看起来像

第一列为Series Name,第二列为DateTime,第三列为data

那么,谁能告诉我如何做到这一点。

提前致谢

【问题讨论】:

  • 有什么问题?循环点?或者创建一个可以导入到 excel 的文件?你尝试了什么?就目前而言,这个问题过于宽泛,没有显示出任何研究成果。
  • 现在我可以在图表上放点数了。我假设每个图表系列都存储点,因此通过遍历系列我可以获得所有点。但我想知道我可以使用它们的任何内置功能来实现我的目标吗?如果没有,那么有人可以提供一些代码 sn-p。
  • 不,但是 Linq 会让您访问这些点并将它们的数据提取到您选择的某种结构中。

标签: c# excel winforms charts export


【解决方案1】:

您可以参考以下solution。首先,您需要添加对 COM 的 Microsoft Excel 对象库的引用。请参阅此链接以了解如何add。然后下一步很简单。您需要添加上述链接中的代码,并将您在 Excel 中输入的数据替换为您的自定义数据。

这是链接中显示的代码。

 private void button1_Click(object sender, EventArgs e)
 {
     Excel.Application xlApp;
     Excel.Workbook xlWorkBook;
     Excel.Worksheet xlWorkSheet;
     object misValue = System.Reflection.Missing.Value;

     xlApp = new Excel.Application();
     xlWorkBook = xlApp.Workbooks.Add(misValue);
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

     for (int i = 0; i < chart1.Series.Count; i++)
     {
      xlWorkSheet.Cells[1, 1] = "";
      xlWorkSheet.Cells[1, 2] = "DateTime";//put your column heading here
      xlWorkSheet.Cells[1, 3] = "Data";// put your column heading here

      for (int j = 0; j < chart1.Series[i].Points.Count; j++)
      {
       xlWorkSheet.Cells[j + 2 , 2] = chart1.Series[i].Points[j].XValue;
       xlWorkSheet.Cells[j + 2 , 3] = chart1.Series[i].Points[j].YValues[0];
      }
     }

     Excel.Range chartRange;

     Excel.ChartObjects xlCharts = (Excel.ChartObjects)xlWorkSheet.ChartObjects(Type.Missing);
     Excel.ChartObject myChart = (Excel.ChartObject)xlCharts.Add(10, 80, 300, 250);
     Excel.Chart chartPage = myChart.Chart;

     chartRange = xlWorkSheet.get_Range("B2", "c5");//update the range here
     chartPage.SetSourceData(chartRange, misValue);
     chartPage.ChartType = Excel.XlChartType.xlColumnClustered;

     xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
     xlWorkBook.Close(true, misValue, misValue);
     xlApp.Quit();

     releaseObject(xlWorkSheet);
     releaseObject(xlWorkBook);
     releaseObject(xlApp);

     MessageBox.Show("Excel file created , you can find the file c:\\csharp.net-informations.xls");
 }

 private void releaseObject(object obj)
 {
  try
  {
   System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
   obj = null;
  }
  catch (Exception ex)
  {
   obj = null;
   MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
   }
   finally
   {
    GC.Collect();
   }
 }

只需将代码中的单元格和数据替换为您的自定义数据和中提琴,当您单击导出按钮时,它将为您导出。

【讨论】:

  • 'Viola' 哈哈。多一点动态肯定会让它更有用..而且我总是避免写入系统根目录。
  • 这实际上为我保存到用户文档文件夹中
猜你喜欢
  • 1970-01-01
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多