ذخیره سریع دهها هزار رکورد دیتاتیبل در اکسل
نویسنده: مجتبی فخاری
تاریخ: ۱۳۹۲/۱۱/۱۶ ۱۹:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
//using System;
//using System.Data;
//using Microsoft.Office.Interop.Excel;
class FastExportingMethod
{
//System.Data.DataTable dt= دیتاتیبل که حاوی اطلاعات میباشد
//outputPath= مسیر ذخیره شدن
public static string ExportToExcel(System.Data.DataTable dt, string outputPath)
{
try
{
// ساخت یک شی اکسل
ApplicationClass excelApp = new ApplicationClass();
// ساخت یک WorkBook جدید
Workbook excelWorkbook = excelApp.Workbooks.Add(Type.Missing);
int sheetIndex = 0;
// ساخت آرایه به طول تعداد سطرهای دیتاتیبل+1 و تعداد ستونهای دیتاتیبل
object[,] rawData = new object[dt.Rows.Count + 1, dt.Columns.Count];
// کپی نام ستونهای دیتاتیبل به عنوان هدر برای فایل اکسل در اولین سطر از آرایه
for (int col = 0; col < dt.Columns.Count; col++)
{
rawData[0, col] = dt.Columns[col].ColumnName;
}
// کپی اطلاعات دیتاتیبل به داخل آرایه
for (int col = 0; col < dt.Columns.Count; col++)
{
for (int row = 0; row < dt.Rows.Count; row++)
{
rawData[row + 1, col] = dt.Rows[row].ItemArray[col].ToString();
}
}
// محاسبه نام ستونهای اکسل
string finalColLetter = string.Empty;
string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int colCharsetLen = colCharset.Length;
if (dt.Columns.Count > colCharsetLen)
{
finalColLetter = colCharset.Substring((dt.Columns.Count - 1) / colCharsetLen - 1, 1);
}
finalColLetter += colCharset.Substring((dt.Columns.Count - 1) % colCharsetLen, 1);
// ساخت یک Sheet
Worksheet excelSheet = (Worksheet)excelWorkbook.Sheets.Add(
excelWorkbook.Sheets.get_Item(++sheetIndex),
Type.Missing, 1, XlSheetType.xlWorksheet);
//تنظیم نام شیت به نام دلخواه
excelSheet.Name = "List";
//تنظیم خاصیت راست به چپ برای نمایش اطلاعات
excelSheet.DisplayRightToLeft = true;
// تعیین محدوده سطرها و ستونها
string excelRange = string.Format("A1:{0}{1}",finalColLetter, dt.Rows.Count + 1);
//انتقال اطلاعات از آرایه به شیت مورد نظر
excelSheet.get_Range(excelRange, Type.Missing).Value2 = rawData;
// ضخیم کردن اولین سطر برای عنوان ستونها
((Range)excelSheet.Rows[1, Type.Missing]).Font.Bold = true;
// تنظیم عرض ستونها به اندازه محتوای ستونها
for (int col = 0; col < dt.Columns.Count; col++)
{
((Range)excelSheet.Columns[col + 1]).EntireColumn.AutoFit();
}
//ذخیره و بستن Workbook
excelWorkbook.SaveAs(outputPath, XlFileFormat.xlWorkbookNormal, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
excelWorkbook.Close(true, Type.Missing, Type.Missing);
excelWorkbook = null;
excelApp.Quit();
excelApp = null;
// Collect the unreferenced objects
GC.Collect();
GC.WaitForPendingFinalizers();
return "اطلاعات شما در مسیر انتخاب شده ذخیره گردید";
}
catch (Exception ex)
{
//بدست آوردن کد خطا برای مدیریت خطاها
int code = System.Runtime.InteropServices.Marshal.GetExceptionCode();
return ex.Message + code;
}
}
}