2017-02-22 11 views
1

Я немного новичок в C# и Visual Studio, и я пытаюсь построить график, основанный на значениях файла csv, расположенного где-то в другом месте. Я использовал свойство ChartObjects и ChartWizard в C# для создания графика. График, построенный на графике, должен быть диапазоном столбцов, который я предоставляю, по оси Y, а ось X должна иметь текущий номер строки (1,2,3,4 и т. Д.). Однако мой график по умолчанию принимает ось X в качестве первого столбца в моем файле csv. Он правильно вычисляется, если я задаю диапазон для оси X, но как я могу получить номер текущей строки там?Измените значения оси x для графика C#

Я просмотрел множество статей и вопросов даже по переполнению стека, но никто не помог.

Вот отрывок из моего кода:

Microsoft.Office.Interop.Excel.Application xlexcel; 
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 

object misValue = System.Reflection.Missing.Value; 
xlexcel = new Microsoft.Office.Interop.Excel.Application(); 

var xlWorkBooks = xlexcel.Workbooks; 

xlexcel.Visible = false; 

xlWorkBooks.OpenText(@"C:\" + processName + ".csv", misValue, misValue, Microsoft.Office.Interop.Excel.XlTextParsingType.xlDelimited,   Microsoft.Office.Interop.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 = (Microsoft.Office.Interop.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(Microsoft.Office.Interop.Excel.XlChartType.xlLine); 

//~~> Set the data range 
xlexcel.ActiveChart.SetSourceData(xlWorkSheet.Range["E2:E200"]); 
xlexcel.ActiveChart.ChartWizard(misValue, Title: chartName + " (" + processName + ")", CategoryTitle: "Iterations", ValueTitle: processType); 

Microsoft.Office.Interop.Excel.ChartObjects chartObjects =(Microsoft.Office.Interop.Excel.ChartObjects)(xlWorkSheet.ChartObjects(Type.Missing)); 
foreach (Microsoft.Office.Interop.Excel.ChartObject co in chartObjects) 
{ 
    co.Select(); 
    Microsoft.Office.Interop.Excel.Chart chart = (Microsoft.Office.Interop.Excel.Chart)co.Chart; 
    chart.Export(ConfigurationManager.AppSettings.Get("Charts") + "\\ProcessFiles" + @"\" + chartName + " (" + processName + "of" + processType + ")" + ".png", "PNG", false); 
    co.Delete(); 
} 
xlWorkBooks[1].Close(true, misValue, misValue); 
xlexcel.Quit(); 

Любое руководство будет высоко оценен. Спасибо!

+0

вы хотите отобразить в Excel или экспортировать в файл изображения? – imsome1

+0

Я хочу экспортировать его как файл изображения. @ imsome1 – TrishaR

ответ

0

Я попробовал ваш код и сделал некоторые изменения, я надеюсь, что это будет работать

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Application xlApp; 
Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheet; 

object misValue = System.Reflection.Missing.Value; 
//string appPath = Path.GetDirectoryName(Application.ExecutablePath); 
string fileName = "" + "YOUR_PATH" + "\\Templates\\myCSV.csv"; 

string processName = "test"; 
xlApp = new Excel.Application(); 
xlWorkBook = xlApp.Workbooks.Open(fileName); 
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

xlWorkSheet.Shapes.AddChart(misValue, misValue, misValue, misValue, misValue).Select(); 

//~~> Make it a Line Chart 
      xlApp.ActiveChart.ApplyCustomType(Microsoft.Office.Interop.Excel.XlChartType.xlLine); 

//~~> Set the data range 
xlApp.ActiveChart.SetSourceData(xlWorkSheet.Range["B1:B30"]); 
string chartName = "TEST CHART", processType="TEST TYPE"; 
xlApp.ActiveChart.ChartWizard(misValue, Title: chartName + " (" + processName + ")", CategoryTitle: "Iterations", ValueTitle: processType); 

Excel.ChartObjects chartObjects = (Excel.ChartObjects)(xlWorkSheet.ChartObjects(Type.Missing)); 

foreach (Excel.ChartObject co in chartObjects) 
{ 
    co.Select(); 
    Excel.Chart chart = (Excel.Chart)co.Chart; 
    chart.Export("C:\\YOUR_PATH" + @"\" + chart.Name + ".png", "PNG", false); 
} 

xlWorkBook.Close(true, misValue, misValue); 
xlApp.Quit(); 


xlWorkSheet = null; 
xlWorkBook = null; 
xlApp = null; 
releaseObject(xlWorkBook); 
releaseObject(xlWorkSheet); 
releaseObject(xlApp); 

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

Спасибо за помощь @ imsome1, но мое консольное приложение, поэтому Application.ExecutablePath не работает. И кроме этого, я все равно получаю одинаковый результат. – TrishaR

+0

Дайте ваш путь вместо Application.ExecutablePath и попробуйте – imsome1

+0

Да, я пробовал это. Но я все еще не получаю требуемый результат. – TrishaR

Смежные вопросы