我有一堆数据要保存为 .csv(逗号分隔值)格式。在 excel 中,我可以通过手动选择数据并点击 Graph 轻松创建条形图。
但是,我想通过单击按钮在外部执行此操作。
理想情况下,我在 C# 中点击了一个按钮。这会调用一个生成我的 .csv 文件的方法,然后调用一个创建 excel 表的 excel 函数,并在其中创建图表。
不知道该怎么做,或者如果excel甚至支持这样的东西,更不用说来自csv文件了!
谢谢你。
除了我的评论,这里是一个例子。无需使用第 3 方库。Excel 具备制作图表所需的所有功能。此外,打开 csv 不像在 Excel 中打开任何工作簿。
为了更好地理解,让我们创建一个sample.csv
并将其放置在C:
其中,如下所示
在 C# 中创建一个新表单,放置一个按钮并设置对 Excel 对象库的引用。接下来将此代码粘贴到按钮的单击事件中
久经考验
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();
}
}
}
}
输出
我会尝试使用EPPlus 库直接创建您的 excel 文件。
它支持图表,过去通常对我的项目非常有用。最简单的方法可能是在 Excel 中准备一个带有空白数据的“模板”文件(只是普通的 xlsx 文件)并插入所需的图表和任何其他必需的元素。然后,您可以在 C# 中使用该库打开模板文件,用数据填充数据表,然后将其保存为另一个带有实际数据的 xlsx 文件。
也许需要设置一些用于“重新计算”数据的标志,这在打开文件时发生。不确切知道该库,但我过去用于 xls 文件的另一个库需要它。
(我想您的应用程序中已经有数据,如果没有,请检查那些解析 CSV 的答案: CSV parser/reader for C#? , CSV parser/reader for C#?)
如果您坚持在 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这样的东西可能更直接。