اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
یکی از امکاناتی که در نرم افزارهای اتوماسیون مورد نیاز است، ذخیره اطلاعات، داخل فایل اکسل است و در صورتی که حجم این اطلاعات زیاد باشد زمان زیادی صرف این عمل خواهد شد. در زیر کلاسی را برای شما آماده نمودهام که 20 هزار رکورد را در 4 ثانیه، در فایل اکسل ذخیره مینماید. در این روش با استفاده از یک آرایه به نام rawdata این عمل انجام شده.
توضیحات کدها نیز به صورت comment در کنار کدها آورده شده است.
//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; } } }