从CSV文件外部创build一个Excelgraphics

我有一堆数据,我将其保存为.csv(逗号分隔值)格式。 在Excel中,我可以通过手动select数据并点击Graph来轻松创build一个条形图。

但是,我想通过点击一个button在外部执行此操作。

理想情况下,我在C#中打了一个button。 这将调用生成我的.csv文件的方法,然后调用创buildexcel表格的Excel函数,并在其中创build图表。

不知道如何去做,或者如果Excel甚至支持这样的事情,更less从一个CSV文件!

谢谢。

我会尝试与EPPlus库直接创build您的Excel文件。

它支持图表,一般在我的项目过去很好。 最简单的方法可能是在空白数据(只是普通的xlsx文件)中准备一个“模板”文件,并插入所需的图表和任何其他必需的元素。 然后,您可以在C#中使用该库打开模板文件,用数据填充数据表,然后将其另存为具有实际数据的另一个xlsx文件。

可能需要设置一些用于“重新计算”数据的标志,这是在文件打开时发生的。 不知道这个库的确切位置,但它是我以前用于xls文件的另一个库。

(我想你已经有你的数据在你的应用程序,如果没有,检查parsingCSV的答案: CSVparsing器/阅读器为C#?, CSVparsing器/阅读器为C#? )

除了我的评论,这里是一个例子。 没有必要使用第三方库。 Excel具有制作图表所需的所有function。 另外打开csv并不像在Excel中打开任何工作簿。

为了更好地理解,我们创build一个sample.csv并将其放置在C: ,如下所示

在这里输入图像说明

在C#中创build一个新窗体,放置一个button并设置对Excel对象库的引用。 接下来将该代码粘贴到button的单击事件中

尝试和testing

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; Namespace WindowsFormsApplication2 { public partial class Form1 : Form { Public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application xlexcel; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlexcel = new Excel.Application(); var xlWorkBooks = xlexcel.Workbooks; xlexcel.Visible = true; xlWorkBooks.OpenText("C:\\Sample.csv", misValue, misValue, Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierNone, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue); // Set Sheet 1 as the sheet you want to work with xlWorkSheet = (Excel.Worksheet)xlWorkBooks[1].Worksheets.get_Item(1); xlWorkSheet.Shapes.AddChart(misValue,misValue,misValue,misValue,misValue).Select(); //~~> Make it a Line Chart xlexcel.ActiveChart.ApplyCustomType(Excel.XlChartType.xlLineMarkers); //~~> Set the data range xlexcel.ActiveChart.SetSourceData(xlWorkSheet.Range["$A$1:$B$6"]); //uncomment this if required //xlWorkBooks[1].Close(true, misValue, misValue); //xlexcel.Quit(); //releaseObject(xlWorkSheet); //releaseObject(xlWorkBook); //releaseObject(xlexcel); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } } } } 

OUTPUT

在这里输入图像说明

如果你坚持使用Excel,你需要有一些类库来连接它。 您既可以使用VS Pro中包含的Office工具,也可以使用一些开放源代码库(如NetOffice) 。 那么你可以写这样的代码:

 Excel.Application app = new Excel.Application(); Excel.Workbook wb = app.Workbooks.Open(<path to csv>); Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1]; Excel.Chart chart = ((Excel.ChartObjects)ws.ChartObjects()).Add(0, 0, 100, 100).Chart; //the numbers are position and dimensions of the chart chart.ChartWizard(); // here you have to format your chart, see link below wb.SaveAs(<output path and format>); 

链接到MSDN文档 。

但是我认为使用Gnuplot之类的东西可能要简单得多。