یکی از کارهای پر دردسر در گرفتن خروجی اکسل استفاده از InteropServices است. از ساخت گرفته تا بستن آبجکت.
کد زیر نمونهای از این موضوع را نمایش میدهد.
private string Create_ExcelFile(List<ExcelExport_COM> result) { Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Add(); Microsoft.Office.Interop.Excel._Worksheet xlWorkSheet = xlWorkbook.ActiveSheet; xlWorkSheet.DisplayRightToLeft = true; xlWorkSheet.Name = "لیست خروجی"; string FinalFileName = string.Empty; try { //Get export folder name from setting Setting_BLL setting_BLL = new Setting_BLL(); var exportAddress = setting_BLL.GetSetting_ById((int)CommonLayer.Setting_COM.enmSetting.Export_Excel_Folder).ItemValue; //Check directory exist if (!System.IO.Directory.Exists(Server.MapPath(exportAddress))) { //Create directory System.IO.Directory.CreateDirectory(Server.MapPath(exportAddress)); } //Readdress from root exportAddress = Server.MapPath(exportAddress); //Create full details of export file FinalFileName = System.IO.Path.Combine(exportAddress, Guid.NewGuid().ToString("n")); int row = 1; xlApp.Cells[row, 1] = "ردیف"; xlApp.Cells[row, 2] = "استان"; xlApp.Cells[row, 3] = "نام بیمه شده"; xlApp.Cells[row, 4] = "نام خانوادگی بیمه شده"; xlApp.Cells[row, 5] = "نسبت با فرد"; xlApp.Cells[row, 6] = "کدملی"; xlApp.Cells[row, 7] = "نوع وسیله"; xlApp.Cells[row, 8] = "شماره پلاک"; xlApp.Cells[row, 9] = "کل مبلغ حق بیمه(ريال)"; for (int i = 0; i < result.Count; i++) { xlApp.Cells[(row + i + 1), 1] = i + 1; xlApp.Cells[(row + i + 1), 2] = result[i].RegionTitle; xlApp.Cells[(row + i + 1), 3] = result[i].PersonFirstName; xlApp.Cells[(row + i + 1), 4] = result[i].PersonLastName; xlApp.Cells[(row + i + 1), 5] = result[i].EligibilityReasonTitle; xlApp.Cells[(row + i + 1), 6] = result[i].PersonNationalId; xlApp.Cells[(row + i + 1), 7] = result[i].CarModel; xlApp.Cells[(row + i + 1), 8] = result[i].Pelaque; xlApp.Cells[(row + i + 1), 9] = result[i].Price; } xlWorkbook.SaveAs(FinalFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel12, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value); xlWorkbook.Close(Missing.Value, Missing.Value, Missing.Value); xlApp.Application.Quit(); //Check new file exist if (System.IO.File.Exists(FinalFileName + ".xlsb")) { FinalFileName = FinalFileName + ".xlsb"; } else { FinalFileName = string.Empty; } } catch (Exception err) { //Log } finally { //System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkSheet); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet); xlWorkSheet = null; //System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlWorkbook); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook); xlWorkbook = null; //System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlApp); System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); xlApp = null; GC.Collect(); GC.WaitForPendingFinalizers(); } return FinalFileName; }