2014-02-11 132 views
3

我使用這些名稱空間:Excel = Microsoft.Office.Interop.Excel;Microsoft.Office.Tools.Excel;如何使用C#在Excel中創建圓點圖,折線圖?

我需要創建與許多短行,這都將是平行於x軸折線圖。

我已經寫好了所有需要的點,它們應該用線連接。

enter image description here

爲幾個類型的行y軸的值是相同的,它們不不是數字,它們是一類的名字。最終,這看起來應該是這樣的:enter image description here

我試圖做這在我的方式,但遇到了一些問題seriesCollection不`噸的工作也應,他畫3條線,但我只能看到最後一個,2前行成爲相同的點。下面是代碼:

 Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     object misValue = System.Reflection.Missing.Value; 
     Excel._Application xlApp = new Excel.Application(); 
     xlWorkBook = xlApp.Workbooks.Add(misValue); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

     //add data 
     xlWorkSheet.Cells[1, 1] = 13; 
     xlWorkSheet.Cells[1, 2] = 27; 
     xlWorkSheet.Cells[1, 3] = 22; 
     xlWorkSheet.Cells[1, 4] = 22; 

     xlWorkSheet.Cells[2, 1] = 42 ; 
     xlWorkSheet.Cells[2, 2] = 35; 
     xlWorkSheet.Cells[2, 3] = 22; 
     xlWorkSheet.Cells[2, 4] = 22; 

     xlWorkSheet.Cells[3, 1] = 1; 
     xlWorkSheet.Cells[3, 2] = 10; 
     xlWorkSheet.Cells[3, 3] = 4; 
     xlWorkSheet.Cells[3, 4] = 4; 


     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; 
     myChart.Select(); 

     chartPage.ChartType = Excel.XlChartType.xlXYScatterLines; 
     Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application(); 
     Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection(); 

     Excel.Series series1 = seriesCollection.NewSeries(); 
     series1.XValues = xlWorkSheet.get_Range("A1", "B1"); ; 
     series1.Values = xlWorkSheet.get_Range("C1", "D1"); 

     Excel.Series series2 = seriesCollection.NewSeries(); 
     series2.XValues = xlWorkSheet.get_Range("A2", "B2"); ; 
     series2.Values = xlWorkSheet.get_Range("C2", "D2"); 

     Excel.Series series3 = seriesCollection.NewSeries(); 
     series3.XValues = xlWorkSheet.get_Range("A3", "B3"); ; 
     series3.Values = xlWorkSheet.get_Range("C3", "D3"); 

不知道如何解決這個問題。我認爲y軸不能是文字,只有數字。我想每個行都應該是另一個系列

P.S.可以用任何必需的方式表示數字以簡化工作。

UPD:這是我創造了這個點圖,我已經錄製的宏

Sub Dot_chart() 
' 
' 
' 

' 
    ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines).Select 
    ActiveWindow.SmallScroll Down:=6 
    ActiveSheet.Shapes("Chart 2").IncrementLeft 120.8823622047 
    ActiveSheet.Shapes("Chart 2").IncrementTop 132.3529133858 
    ActiveChart.SeriesCollection.NewSeries 
    ActiveChart.FullSeriesCollection(1).Name = "=List1!$B$23" 
    ActiveChart.FullSeriesCollection(1).XValues = "=List1!$D$22:$D$23" 
    ActiveChart.FullSeriesCollection(1).Values = "=List1!$D$24:$D$25" 
    ActiveChart.SeriesCollection.NewSeries 
    ActiveChart.FullSeriesCollection(2).Name = "=List1!$B$23" 
    ActiveChart.FullSeriesCollection(2).XValues = "=List1!$E$22:$E$23" 
    ActiveChart.FullSeriesCollection(2).Values = "=List1!$E$24:$E$25" 
    ActiveChart.SeriesCollection.NewSeries 
    ActiveChart.FullSeriesCollection(3).Name = "=List1!$B$28" 
    ActiveChart.FullSeriesCollection(3).XValues = "=List1!$D$27:$D$28" 
    ActiveChart.FullSeriesCollection(3).Values = "=List1!$D$29:$D$30" 
End Sub 

列表1 sheet`s名。

+2

在嘗試在代碼中自動化之前,您是否已經手工製作了圖表 - 來自您的數據? – dav1dsm1th

+1

如果您可以手動生成圖表,我會在重新創建圖表時記錄一個宏,然後調查該宏包含的代碼。這應該引導您瞭解您的代碼需要做什麼來自動生成輸出。 – dav1dsm1th

+0

@ dav1dsm1th我錄製了宏 – Rocketq

回答

6

經過幾天的搜索,我找到了解決方案,希望對某人有用。

  Excel.Workbook xlWorkBook; 
      Excel.Worksheet xlWorkSheet; 
      object misValue = System.Reflection.Missing.Value; 
      Excel._Application xlApp = new Excel.Application(); 

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

     //add data 
     xlWorkSheet.Cells[1, 1] = 13; 
     xlWorkSheet.Cells[1, 2] = 27; 
     xlWorkSheet.Cells[1, 3] = 22; 
     xlWorkSheet.Cells[1, 4] = 22; 

     xlWorkSheet.Cells[2, 1] = 42 ; 
     xlWorkSheet.Cells[2, 2] = 35; 
     xlWorkSheet.Cells[2, 3] = 22; 
     xlWorkSheet.Cells[2, 4] = 22; 

     xlWorkSheet.Cells[3, 1] = 1; 
     xlWorkSheet.Cells[3, 2] = 10; 
     xlWorkSheet.Cells[3, 3] = 4; 
     xlWorkSheet.Cells[3, 4] = 4; 


     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; 
     myChart.Select(); 

     chartPage.ChartType = Excel.XlChartType.xlXYScatterLines; 
     Microsoft.Office.Interop.Excel.Application xla = new Microsoft.Office.Interop.Excel.Application(); 
     Excel.SeriesCollection seriesCollection = chartPage.SeriesCollection(); 

     Excel.Series series1 = seriesCollection.NewSeries(); 
     series1.XValues = xlWorkSheet.get_Range("A1", "B1"); ; 
     series1.Values = xlWorkSheet.get_Range("C1", "D1"); 

     Excel.Series series2 = seriesCollection.NewSeries(); 
     series2.XValues = xlWorkSheet.get_Range("A2", "B2"); ; 
     series2.Values = xlWorkSheet.get_Range("C2", "D2"); 

     Excel.Series series3 = seriesCollection.NewSeries(); 
     series3.XValues = xlWorkSheet.get_Range("A3", "B3"); ; 
     series3.Values = xlWorkSheet.get_Range("C3", "D3"); 



     xlWorkBook.SaveAs(@"C:\ProgramData\RadiolocationQ\Text.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); 


     Process.Start(@"C:\ProgramData\RadiolocationQ\Text.xls"); 
+0

它爲我工作。你能告訴我如何改變水平軸**的值嗎? 因爲現在它只是1,2,3,4,5 ....等等。 –

+1

@SaurabhAgrawal請問新的問題。因爲我不能幫你,所以我不再編程c#了 – Rocketq

+0

感謝您的回覆@Rocketq –

相關問題