none
Excel üzerinde Chart üretme RRS feed

  • Soru

  • Merhaba Arkadaşlar,

    c# üzerinden EXCEL FORMÜLÜ ile excen üzerinde chart üretmek istiyorum, yani formül ile chart'ın bakması gereken hücreleri ben belirlemek istiyorum, araştırmalarım devam ediyo yardımlarınızı bekliyorum.

    30 Haziran 2015 Salı 07:05

Yanıtlar

  • Aslında ne demek istediğini anlamadım yine de şansımı denemek istedim;

    basit olarak şöyle bir şey yazdım umarım istediğin budur veya benzerdir;

     Excel.Application ExApp = new Excel.Application();
                ExApp.Workbooks.Add();
                ExApp.Visible = true;
                ExApp.Worksheets[1].Activate();
    
               
                ExApp.Cells[1, 1].value = "Yıllar";
                ExApp.Cells[1, 1].HorizontalAlignment = 3;
                ExApp.Cells[1, 1].Font.Bold = true;
                ExApp.Cells[1, 1].Font.Color = Color.Red;//Color.FromArgb(125, 255, 255);
    
                ExApp.Cells[1, 2].Font.Bold = true;
                ExApp.Cells[1, 2].value = "Boylar";
                ExApp.Cells[1, 2].HorizontalAlignment = 3;
                ExApp.Cells[1, 2].Font.Color = Color.Red;//.FromArgb(125, 255, 255);
                ExApp.Cells[1, 2].NumberFormat = Type.GetType("System.double");
                
                int [] yillar= { 1980 , 1981 , 1982 , 1983 };
    
                double[] boylar = { 1.62 , 1.75 , 1.40 , 1.70 };
    
                int say = 0;
                for (int i = 1; i < yillar.Length + 1; i++)
                {
    
                    ExApp.Cells[i + 1, 1].HorizontalAlignment = 3;
                    ExApp.Cells[i + 1, 1].EntireColumn.ColumnWidth = 20;
                    ExApp.Cells[i + 1, 1].value = yillar[i - 1].ToString();
    
                    ExApp.Cells[i + 1, 2].HorizontalAlignment = 3;
                    ExApp.Cells[i + 1, 2].EntireColumn.ColumnWidth = 10;
                    ExApp.Cells[i + 1, 2].value = string.Format("{0:0.00}", (double)boylar[i - 1]);
    
                    say = i+1;
                }
    
                Excel.Worksheet xwSheet = (Excel.Worksheet)ExApp.ActiveSheet;
                Excel.ChartObjects xCharts = (Excel.ChartObjects)xwSheet.ChartObjects();
                Excel.ChartObject Chart = (Excel.ChartObject)xCharts.Add(100, 10, 260, 260);
                Excel.Chart cPage = Chart.Chart;
      
                Excel.Range chartRange;
                chartRange = xwSheet.get_Range("A1", "B" + say);
                cPage.SetSourceData(chartRange);
                cPage.ChartType = Excel.XlChartType.xlConeBarStacked;
    
                Excel.Series Exseri = (Excel.Series)cPage.SeriesCollection(1);
                Exseri.Format.Line.Weight = 1.0F;
                Exseri.Format.Line.Visible = MsoTriState.msoTriStateMixed;
                Exseri.Format.Line.ForeColor.RGB = (int)Microsoft.Office.Interop.Excel.XlRgbColor.rgbRed;
    
                cPage.HasDataTable = true;
    

    Kolay gelsin;

    • Yanıt Olarak Öneren CetinBasozEditor 1 Temmuz 2015 Çarşamba 09:09
    • Yanıt Olarak İşaretleyen Enes CANSIZ 2 Temmuz 2015 Perşembe 13:45
    30 Haziran 2015 Salı 16:08
  • Depth, Elevation, Rotation ... propertyleri var. Bulmanin bir yolu, elle yarattiktan sonra macro kaydetmeye basla (View/record macro), istedigin donusleri elle yap. Makroyu durdur, edit'e git ve orada kullandigi property ve metodlara bak.
    • Yanıt Olarak İşaretleyen Enes CANSIZ 2 Temmuz 2015 Perşembe 13:45
    2 Temmuz 2015 Perşembe 13:14
    Yanıtlayıcı

Tüm Yanıtlar

  • Aslında ne demek istediğini anlamadım yine de şansımı denemek istedim;

    basit olarak şöyle bir şey yazdım umarım istediğin budur veya benzerdir;

     Excel.Application ExApp = new Excel.Application();
                ExApp.Workbooks.Add();
                ExApp.Visible = true;
                ExApp.Worksheets[1].Activate();
    
               
                ExApp.Cells[1, 1].value = "Yıllar";
                ExApp.Cells[1, 1].HorizontalAlignment = 3;
                ExApp.Cells[1, 1].Font.Bold = true;
                ExApp.Cells[1, 1].Font.Color = Color.Red;//Color.FromArgb(125, 255, 255);
    
                ExApp.Cells[1, 2].Font.Bold = true;
                ExApp.Cells[1, 2].value = "Boylar";
                ExApp.Cells[1, 2].HorizontalAlignment = 3;
                ExApp.Cells[1, 2].Font.Color = Color.Red;//.FromArgb(125, 255, 255);
                ExApp.Cells[1, 2].NumberFormat = Type.GetType("System.double");
                
                int [] yillar= { 1980 , 1981 , 1982 , 1983 };
    
                double[] boylar = { 1.62 , 1.75 , 1.40 , 1.70 };
    
                int say = 0;
                for (int i = 1; i < yillar.Length + 1; i++)
                {
    
                    ExApp.Cells[i + 1, 1].HorizontalAlignment = 3;
                    ExApp.Cells[i + 1, 1].EntireColumn.ColumnWidth = 20;
                    ExApp.Cells[i + 1, 1].value = yillar[i - 1].ToString();
    
                    ExApp.Cells[i + 1, 2].HorizontalAlignment = 3;
                    ExApp.Cells[i + 1, 2].EntireColumn.ColumnWidth = 10;
                    ExApp.Cells[i + 1, 2].value = string.Format("{0:0.00}", (double)boylar[i - 1]);
    
                    say = i+1;
                }
    
                Excel.Worksheet xwSheet = (Excel.Worksheet)ExApp.ActiveSheet;
                Excel.ChartObjects xCharts = (Excel.ChartObjects)xwSheet.ChartObjects();
                Excel.ChartObject Chart = (Excel.ChartObject)xCharts.Add(100, 10, 260, 260);
                Excel.Chart cPage = Chart.Chart;
      
                Excel.Range chartRange;
                chartRange = xwSheet.get_Range("A1", "B" + say);
                cPage.SetSourceData(chartRange);
                cPage.ChartType = Excel.XlChartType.xlConeBarStacked;
    
                Excel.Series Exseri = (Excel.Series)cPage.SeriesCollection(1);
                Exseri.Format.Line.Weight = 1.0F;
                Exseri.Format.Line.Visible = MsoTriState.msoTriStateMixed;
                Exseri.Format.Line.ForeColor.RGB = (int)Microsoft.Office.Interop.Excel.XlRgbColor.rgbRed;
    
                cPage.HasDataTable = true;
    

    Kolay gelsin;

    • Yanıt Olarak Öneren CetinBasozEditor 1 Temmuz 2015 Çarşamba 09:09
    • Yanıt Olarak İşaretleyen Enes CANSIZ 2 Temmuz 2015 Perşembe 13:45
    30 Haziran 2015 Salı 16:08
  • Yanıtınız için çok teşekkür ederim, aslında bende bu şekilde üretebiliyorum Chart'ı fakat benim yapmak istediğim Chart'ın propertylerini kullanarak ufak değişiklikler yapmak istiyorum, Vermiş olduğunuz chart üzerinden Örnek verecek olursak.

    Aşağıda gördüğünüz gibi mesala göstergeleri kaldırmak vs..

    1 Temmuz 2015 Çarşamba 06:43
  • Iyi de, yapamadigin kismi tam olarak neresi? Excel object model'de soylediklerinin hepsi var. Elinde chart nesnesi varken onu kullanarak yapabilirsin. Ornegin:

    Chart.HasLegend = false;

    Not: Epplus kutuphanesini kullanarak, Excel otomasyon olmadan da bunlari yapabilirsin. 

    1 Temmuz 2015 Çarşamba 09:18
    Yanıtlayıcı
  • Ben bu işlemi neden Excel'e yaptırdığını anlamadım. Projeme yüklerim Chart'ı.Sonra ister excele atarım ister worde.

    Mail Blog Web Site

    1 Temmuz 2015 Çarşamba 10:01
  • Cevabınız için teşekkür ederim, ben chart'ı üretebiliyorum fakat yöntemi değiştirmek istiyorum, şöyleki

    series1.Formula = "=SERİLER(;GENEL_TOPLAM!$N$16:$N$18;GENEL_TOPLAM!$O$16:$O$18;1)";

    Bu kod ile Chart'ın bakması gereken sutün ve satırları c# üzerinden göndermeye çalışıyorum. Mantıklımı böyle birşey yapılabilir mi?

    1 Temmuz 2015 Çarşamba 10:02
  • Istenen excel dosyasidir da ondan :) Excel'in cok iyi yaptigi isleri de gormezden gelemeyiz, ornegin PivotTable ve PivotChart'lar.

    Not: Son bir kac haftadir yaptigim tek is, Epplus kutuphanesiyle excel dosyalarini yazmak, pivot, chart ... Cunku isin o kismi secilen kriterlere gore kullanicilarin download edebilecegi xlsx dosyalarini olusturmak. Son kullanicilar cesitli raporlari kendileri yapmak istiyor ve baslangic noktasi olarak da excel dosyalari onlara rahat geliyor. Her kullanicinin isteyebilecegi her turlu raporu oturup hazirlamak daha buyuk kabus :)

    1 Temmuz 2015 Çarşamba 10:07
    Yanıtlayıcı
  • Bilmiyorum ki abi. Mesela sen excele ham veriyi kaydettir gerisine karışma ister pie chart yapsın ister gant chart. Yani excele chart yazmak değişik geldi. Son kullanıcıya ben datayı sağlarım gerisi ona kalmış. Eğer chart istiyorsa ben ona kendi uygulamam içersinde göstermeliyim. Bu benim görüşüm. Piyasa neyi kabul etmek istiyor o ayrı. :)

    Mail Blog Web Site

    1 Temmuz 2015 Çarşamba 10:13
  • Yukarida Kenan'in verdigi ornekteki SetSourceData ornegine bak. Senin yaptigin sekilde hic de guvenilir gorunmuyor. Calisir mi hic denemedim, calissa da senin makinende calisir, benim makinemde calismayacagi kesin (dil ayarlari nedeniyle, bende SERILER() diye bir seyi anlamaz).

    1 Temmuz 2015 Çarşamba 10:34
    Yanıtlayıcı
  • Soner Datayı gösteriyoruz, grafiği üretiyoruz ve isteğe göre şekillendiriyoruz. Herşey var yani :) Piyasaya ne verirsen onu yer :)

    Çetin hocam, Kenan arkadaşımın yaptığı gibi üretmeye karar verdim ufak tefek değişiklikler yapıyorum takıldığım yerlerden biri ise şöyle 

    RESİM 1

    RESİM 2

    RESİM 1 DEKİ GİBİ ÜRETİYORUM ŞUANDA GRAFİĞİ KOD TARAFINDA AÇISINI DÜZENLEYEREK RESİM 2'DEKİ GİBİ NASIL YAPABİLİRİM. Bİ PROPERTY AMA HANGİSİ :)

    2 Temmuz 2015 Perşembe 12:03
  • Depth, Elevation, Rotation ... propertyleri var. Bulmanin bir yolu, elle yarattiktan sonra macro kaydetmeye basla (View/record macro), istedigin donusleri elle yap. Makroyu durdur, edit'e git ve orada kullandigi property ve metodlara bak.
    • Yanıt Olarak İşaretleyen Enes CANSIZ 2 Temmuz 2015 Perşembe 13:45
    2 Temmuz 2015 Perşembe 13:14
    Yanıtlayıcı