C# Datagridview To XLS(EXCEL)
-
Merhaba müridler,
DataGrid üzerindeki bilgileri EXCEL'e aktarmaya çalışıyorum, malesef sağlam&sorunsuz bir kod öbeği yazamadım ve araştırdığım kadarıyla internettede bulamadım. Konu hakkında dökümanı&kaynağı olan var mı ? -
Burdaki örnektir. Aktarmak için en iyi yöntemmiş.
http://social.msdn.microsoft.com/forums/en-US/vbgeneral/thread/27a9002e-9d53-440d-9750-e6c64406fdd6
DataTable'ı Arraya dönüştürmeyi dene, ve hepsini bir kerede Excel'e aktar. 65000 satır X 9 sütünda denedim ve 10 saniyeden daha kısa bir sürede çalıştı.
Excel.Application ReportFile;
Excel._Workbook WorkBook;
Excel._Worksheet Sheet;
Excel.Range Range;
try
{
SqlConnection conn = new SqlConnection(IBS_HR_System.DataAccessLayer.dalDBConnection.GetConnectionString());
DataTable dt = new DataTable("ResultRecords");
SqlCommand cmd = new SqlCommand("select * from audit_log", conn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
da.Fill(dt);
//Maksimum hücreyi al
String MaxRow = dt.Rows.Count.ToString();
String MaxColumn = ((String)(Convert.ToChar(dt.Columns.Count / 26 + 64).ToString() + Convert.ToChar(dt.Columns.Count % 26 + 64))).Replace('@',' ').Trim();
String MaxCell = MaxColumn + MaxRow;
//Excel'i başlat
ReportFile = new Excel.Application();
ReportFile.Visible = false;
//Yeni Workbook & Worksheet
WorkBook = (Excel._Workbook)(ReportFile.Workbooks.Add("workbook"));
Sheet = (Excel._Worksheet)WorkBook.ActiveSheet;
//Hücre hücre tablo başlıklarını ekle.
for (int i = 0; i < dt.Columns.Count; i++)
Sheet.Cells[1, i + 1] = dt.Columns
.ColumnName;//Format
Sheet.get_Range("A1", MaxColumn + "1").Font.Bold = true;
Sheet.get_Range("A1", MaxColumn + "1").VerticalAlignment =
Excel.XlVAlign.xlVAlignCenter;
//2 Boyutlu Array oluştur
string[,] Values = new string[dt.Rows.Count, dt.Columns.Count];
for (int i=0; i<dt.Rows.Count; i++)
for (int j = 0; j < dt.Columns.Count; j++)
{
Values[i, j] = dt.Rows
[j].ToString();}
//Excel'i dizi değerleriyle doldur
Sheet.get_Range("A2", MaxCell).Value2 = Values;
//Excel'in görünür olduğuna ve kullanıcı kontrolu sağladığına emin ol
ReportFile.Visible = true;
ReportFile.UserControl = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
-
.net 4.0 kullanıyorsan dynamic kullanarak at.
http://msdn.microsoft.com/en-us/library/dd264736.aspx
sayfanın en altında ki örneği dataGridView'in row ve column larını döngüye sokarak ayarla.
Cells[1, 1] de ilk değer row, ikinci değer de column. çok fazla uğraşmamış olursun ;)
