Serap Şen

Bilişim hakkında herşey…

C# Uygulamalarda DataGridView İçindeki Verileri Excel ve PDF’e Aktarmak

Merhaba Arkadaşlar,

Bu yazımda C# uygulamanız üzerinde DataGridView’den verilerinizi Excel ve PDF’e nasıl aktarabileceğinizi anlatacağım. Excel örneği üzerinden Word’e aktarmayı da yapabilirsiniz. Örnek kod üzerinden takip edebilirsiniz. Bu şekilde DataGridView içindeki verilerinizi kolaylıkla elde edebilirsiniz.

Excel’e aktarmak için Microsoft.Office.Interop.Excel, Word için Microsoft.Office.Interop.Word referanslarınızı eklemelisiniz.

PDF’e aktarabilmek için;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespaceleri tanımlamanız gerekmektedir.

Uygulamamız için ortak bir class oluşturmak daha mantıklı olacaktır. Yorum satırlarıyla beraber kod örneğimi inceleyebilirsiniz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
using System.Windows.Forms;

namespace ExcelPDFExporter.GlobalClass
{
public class EXCELPDFExporter : DataTable
{

public string FileName { get; set; } //pdf oluşturacağımız dosya adı
public string Text { get; set; } //dosyanın içinde oluşturacağımız pdf adı
public int PdfRowIndex { get; set; } //pdfrowindex
public string Path { get; set; } //settings içinden global olarak tanımlanan yolu almak için(dosya yolu global olarak projede settings içinde tutuluyor.Bu şekilde yolu değiştirmek isterseniz tüm projede kolaylıkla değiştirmiş olacaksınız.)

///<summary>
/// Data table oluşturarak kolonların adlarını ekler,sonra kolonlara ait satırları doldurur
///</summary>
public DataTable CreateTable(DataGridView dataGridview)
{
DataTable tbl = new DataTable();
DataRow row;

for (int i = 0; i < dataGridView.Columns.Count; i++)
{

tbl.Columns.Add(dataGridView.Columns[i].HeaderText, typeof(string));

}

for (int i = 0; i < dataGridView.Rows.Count; i++)
{
row = tbl.NewRow();

for (int j = 0; j < dataGridView.Columns.Count; j++)
{
row[dataGridView.Columns[j].HeaderText] = dataGridView.Rows[i].Cells[j].Value;
}
tbl.Rows.Add(row);
}

return tbl;

}

///<summary>
/// verileri PDFe aktarabilmek için itextsharp kütüphanesi tanımlandı
/// Metot yardımı ile (create table) bağlanarak data table oluşturur,data table’ı oluşturulan pdftable’a atanır.Belge oluşturulur.
/// Oluşan pdf belgesinin dosya adı ve belge adı eklenir.Belge açılır.itextsharp kütüphanesi kullanılarak font ayarlaması yapılır.
///</summary>

public void ToPdf(DataGridView dataGridView1)

{

DataTable dtPDF = CreateTable(dataGridView1);

Document document = new Document();
Properties.Settings set = Properties.Settings.Default; //Settings içinde dosya yolu verildi
string Path = set.PdfExporterPath; //dosya yolu alındı
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Path+Text, FileMode.Create));
document.Open();

iTextSharp.text.Font font5 = iTextSharp.text.FontFactory.GetFont(FontFactory.HELVETICA, 5);
PdfPTable table = null;

table = new PdfPTable(dataGridView1.Columns.Count);
table.WidthPercentage = 100;
string str = string.Empty;

for (int i = 0; i < dataGridView1.Columns.Count; i++) { str += dataGridView1.Columns[i].HeaderText; if (dataGridView1.Columns.Count > i)
str += “+”;
}

string str2 = str.TrimEnd(‘+’).ToString();

///<summary>
/// DataGridView kolonlarının sayısı kadar belgenin başlıkları doldurulur.
/// Pdf hücreleri oluşturulur.Dökumandaki başlık kısmı için ilk satır oluşturulur ve colspan yapılır.
///</summary>

PdfPCell cell = new PdfPCell(new Phrase(FileName));
cell.Colspan = dataGridView1.Columns.Count;
cell.HorizontalAlignment = 1; //0=Left, 1=Centre, 2=Right
table.AddCell(cell);

///<summary>
///pdf tablosu hücreleri doldurulur
///</summary>

for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
table.AddCell(new Phrase(dataGridView1.Columns[i].HeaderText, font5));
}

for (int i = 0; i < dtPDF.Rows.Count; i++)
{
for (int j = 0; j < dtPDF.Columns.Count; j++)
{
table.AddCell(new Phrase(dtPDF.Rows[i][j].ToString(), font5));

PdfRowIndex++;
}

}
document.Add(table);

MessageBox.Show(“Kaydınız Başarıyla Tamamlanmıştır!” + “\n” + “Kayıt Yeri” + ” ” + Path + Text, “Aktarım Sonucu”, MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
document.Close();
}

///<summary>
/// Gridview_Left içindeki veriler excele kaydedilir,Microsoft.Office.Interop.Excel dll referans olarak eklendi.
/// Excel hücreleri dolduruldu
///</summary>

 

public void ToExcel(string FileName, DataGridView dataGridView )
{
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
excel.Visible = false;
Properties.Settings set = Properties.Settings.Default; //settings içinde tanımlanan yol alındı
string Path = set.ExcelExporterPath;
Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(System.Reflection.Missing.Value);
Microsoft.Office.Interop.Excel.Worksheet sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1];

Microsoft.Office.Interop.Excel.Range myRange;

int StartCol = 1;

int StartRow = 1;

for (int i = 0; i < dataGridView.Columns.Count; i++)
{
myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[StartRow, i + StartCol];

myRange.Value2 = dataGridView.Columns[i].HeaderText;
}

StartRow++;
for (int i = 0; i < dataGridView.Rows.Count; i++)
{

for (int j = 0; j < dataGridView.Columns.Count; j++)
{

myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[StartRow + i, StartCol + j];
myRange.Value2 = dataGridView.Rows[i].Cells[j].Value == null ? “” : dataGridView.Rows[i].Cells[j].Value;

}

}
sheet1.Columns.AutoFit();

workbook.SaveAs(Path + FileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,null, null,false, null, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,null, null, null, null, null);
MessageBox.Show(“Kaydınız Başarıyla Tamamlanmıştır!” + “\n” + “Kayıt Yeri” + ” ” + Path + FileName, “Aktarım Sonucu”,MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
excel.Quit();

}
}
}

Class’ı kullanmak istediğiniz Windows Form üzerinde Butonların Click Event’ine;

private void ButtonExcelExport_Click(object sender, EventArgs e)
{
EXCELPDFExporter ExcelExport = new EXCELPDFExporter();
ExcelExport.ToExcel(this.Name, GridView_Left); //aktarmak istediğiniz DataGridView ismini yazın
}

private void ButtonPDFExport_Click(object sender, EventArgs e)
{
EXCELPDFExporter PdfExport = new EXCELPDFExporter();
PdfExport.FileName = this.Name;
PdfExport.Text = PdfExport.FileName + “.pdf”;
PdfExport.PdfRowIndex = 1;
PdfExport.ToPdf(GridView_Left);
}

yazmanız yeterlidir.

 

Tags: ,

6 Responses to “C# Uygulamalarda DataGridView İçindeki Verileri Excel ve PDF’e Aktarmak”

  • metahan diyor ki:

    merhaba hocam;

    makale çok işime yarayacak ama bazı kısımlarda hata veriyor. Kodlar çok karışık örnek bir windows form uygulaması ile örnek verebilirmisiniz ?

    • Serap Şen diyor ki:

      Merhaba,

      Kod parçacıklarını projenize uyarlayabilirsiniz.Ben de geniş bir projede kullanmıştım.
      Takıldığınız kısımları söylerseniz kontrol edeyim,yardımcı olmaya çalışayım.

  • metehan diyor ki:

    merhaba ;

    microsoft.office.interop.excel.dll de versiyon hatası vb. nedeni ile dll i görmüyor tanımıyor .

  • dilsu diyor ki:

    mrb. emeğine sağlık çok güzel olmuş.
    ben de web browser yapıyorum. 2 column lu bir dataGridWiew oluşturdum Column1′e textbox tan alıp geçmişi kaydecem Column2′e ise o anki tarihi eklicem yani DateT,me.Now eklicem ve bunları text file’a yazdırıcam.Aynı zamanda dataGridView açıldığında text file daki geçmişi okuyup görüntelemsi lazım.
    Bunun kodları nasıl olur acaba yarın teslim etmem gereken projem bu.Biliyorum cok dar bi vakit ama eğer yarın yanıt verebilirseniz çok sevinirim.Teşekür ederim şimdiden.

  • hakan diyor ki:

    Kağıdı dikey olarak hazırlıyor… Bende hücre sayısı fazla peki kağıdı yatay olarak nasıl düzenletebiliriz?

  • mehmet diyor ki:

    merhabalar

    tüm kodu eklediğimde aşağıdaki gibi hata vermektedir. yardımıcı olur musunuz?

    Inconsistent accessibility: base class ‘HataBildirimFormu.Datatable’ is less accessible than class ‘HataBildirimFormu.GlobalClass.pdf


Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Follow Me

Microsoft Imagine Cup 2012 Repharm Project

Makalelerimi takip edebilirsiniz…

Arşivlerim

Readmee E-dergimiz

Anketler

Web Sitemi Beğendin mi?

  • Kötü (24%, 35 Votes)
  • Fena değil (8%, 12 Votes)
  • İdare eder (10%, 15 Votes)
  • İyi (18%, 27 Votes)
  • Çok iyi (40%, 57 Votes)

Total Voters: 146

Loading ... Loading ...

Kaç Kişi Online?