111,120
社区成员
发帖
与我相关
我的任务
分享
Not enough storage is available to complete this operation. (Exception from HRESULT: 0x8007000E (E_OUTOFMEMORY))
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Microsoft.Office.Interop.Excel.Range.set__Default(Object RowIndex, Object ColumnIndex, Object ) at ESMD.BO.Program.Export.btnExport_Click(Object sender, EventArgs e) in C:\Visual Studio Projects\YWCA\ESMD.BO\Program\Export.aspx.cs:line 285
// --- set Data ---
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
for (int j = 0; j < Column.Length; j++)
{
worksheetProgram.Cells[i + 2, 1 + j] = ds.Tables[0].Rows[i][Column[j]].ToString();
}
}
// --- Set DropDownList on Excel ---
setExcelCellsDropDownList(ref worksheetProgram, "=CourseType", worksheetProgram.Cells[2, 2], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 2]);
setExcelCellsDropDownList(ref worksheetProgram, "=Catgeory", worksheetProgram.Cells[2, 3], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 3]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 16], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 16]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 17], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 17]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 18], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 18]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 19], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 19]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 20], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 20]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 21], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 21]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 22], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 22]);
setExcelCellsDropDownList(ref worksheetProgram, "=HeldOutside", worksheetProgram.Cells[2, 23], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 23]);
setExcelCellsDropDownList(ref worksheetProgram, "=AllowDropIn", worksheetProgram.Cells[2, 25], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 25]);
setExcelCellsDropDownList(ref worksheetProgram, "=Term", worksheetProgram.Cells[2, 28], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 28]);
setExcelCellsDropDownList(ref worksheetProgram, "=Room", worksheetProgram.Cells[2, 31], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 31]);
setExcelCellsDropDownList(ref worksheetProgram, "=WebStatus", worksheetProgram.Cells[2, 30], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 30]);
setExcelCellsDropDownList(ref worksheetProgram, "=MemberOnly", worksheetProgram.Cells[2, 33], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 33]);
setExcelCellsDropDownList(ref worksheetProgram, "=Teacher", worksheetProgram.Cells[2, 34], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 34]);
setExcelCellsDropDownList(ref worksheetProgram, "TRUE,FALSE", worksheetProgram.Cells[2, 43], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 43]);
// --- set Date on Excel ---
setExcelCellsDate(ref worksheetProgram, worksheetProgram.Cells[2, 6], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 6]);
setExcelCellsDate(ref worksheetProgram, worksheetProgram.Cells[2, 7], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 7]);
// --- set Time on Excel ---
setExcelCellsTime(ref worksheetProgram, worksheetProgram.Cells[2, 8], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 8]);
setExcelCellsTime(ref worksheetProgram, worksheetProgram.Cells[2, 9], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 9]);
// --- set Decimal on Excel ---
setExcelCellsDecimal(ref worksheetProgram, worksheetProgram.Cells[2, 12], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 12]);
setExcelCellsDecimal(ref worksheetProgram, worksheetProgram.Cells[2, 13], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 13]);
setExcelCellsDecimal(ref worksheetProgram, worksheetProgram.Cells[2, 14], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 14]);
setExcelCellsDecimal(ref worksheetProgram, worksheetProgram.Cells[2, 15], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 15]);
setExcelCellsDecimal(ref worksheetProgram, worksheetProgram.Cells[2, 35], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 35]);
setExcelCellsDecimal(ref worksheetProgram, worksheetProgram.Cells[2, 36], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 36]);
setExcelCellsDecimal(ref worksheetProgram, worksheetProgram.Cells[2, 44], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 44]);
// --- Set Integer on Excel ---
setExcelCellsInteger(ref worksheetProgram, worksheetProgram.Cells[2, 10], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 10]);
setExcelCellsInteger(ref worksheetProgram, worksheetProgram.Cells[2, 11], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 11]);
setExcelCellsInteger(ref worksheetProgram, worksheetProgram.Cells[2, 27], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 27]);
setExcelCellsInteger(ref worksheetProgram, worksheetProgram.Cells[2, 37], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 37]);
setExcelCellsInteger(ref worksheetProgram, worksheetProgram.Cells[2, 38], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 38]);
// --- Read Only Cell ---
setExcelCellsReadOnly(ref worksheetProgram, worksheetProgram.Cells[2, 1], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 1]);
setExcelCellsReadOnly(ref worksheetProgram, worksheetProgram.Cells[2, 4], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 4]);
setExcelCellsReadOnly(ref worksheetProgram, worksheetProgram.Cells[2, 29], worksheetProgram.Cells[ds.Tables[0].Rows.Count + 500, 29]);
// --- Auto Width ---
worksheetProgram.UsedRange.EntireColumn.AutoFit();
((Excel._Worksheet)worksheetProgram).Activate();
String strFile = "c:/YWCAEXPORT/" + System.DateTime.Now.Ticks.ToString() + ".xls";
workbook.SaveAs(strFile, Excel.XlFileFormat.xlWorkbookNormal,
null, null, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, null, null, null);
xlApp.Quit();
GC.Collect();
Response.ContentType = "application/ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=ExportData.xls");
while (true)
{
if (writeFile(strFile))
{
break;
}
Thread.Sleep(500);
}
}
finally
{
//ds.Container.Dispose();
ds.DefaultViewManager.Dispose();
ds.Dispose();
}
}
catch (Exception ex)
{
lblMessage.Text = ex.Message + "<br/>" + ex.StackTrace;
}
finally
{
xlApp.Quit();
GC.Collect();
}
}
// --- set AllowDropIn Drop Down List ---
for (int i = 0; i < AllowTrialEnrol.Length; i++)
{
worksheetMaster.Cells[i + 1, 10] = AllowTrialEnrol[i];
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 2], worksheetMaster.Cells[AllowTrialEnrol.Length, 2]).Name = "AllowTrialEnrol";
// --- set Program WorkSheet ---
sqlCmd = new SqlCommand("SELECT * FROM PROGRAM_vExportReport_Course", _sqlConn);
DataSet ds = new DataSet();
SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCmd);
sqlDA.Fill(ds);
try
{
// --- Set Header ---
String[] Header = new String[] { "Course ID", "Course Type", "Category/Sub Category", "Course Code","Course Name",
"Start Date", "End Date", "Start Time", "End Time", "Total Number of Session",
"Session Per Week", "Non-member Fee Per Session", "Total Non-member Fee", "Member Fee Per Session", "Total Member Fee",
"Mon", "Tue", "Wed", "Thur", "Fri",
"Sat", "Sun", "Held Outside", "Where To Meet Detail", "Allow Drop In",
"Remarks", "Years", "Term", "Course Status", "Web Status",
"Room", "Room Setup", "Member Only", "Teacher", "Payment Split",
"Flat Fee", "Minimum Candidate","Maximum Candidate", "Course Description", "Meta Page Title",
"Meta Page Description", "Meta Keyword","Allow Trial Enrol","Material Cost Per Head" };
String[] Column = new String[] { "CourseID", "CourseType", "CategorySubCategory", "CourseCode","CourseName",
"StartDate", "EndDate", "StartTime", "EndTime", "TotalSession",
"SessionPerWeek", "NMemFeePerSession", "TotalNMemFee", "MemFeePerSession", "TotalMemFee",
"Mon", "Tue", "Wed", "Thur", "Fri",
"Sat", "Sun", "HeldOutside", "WhereToMeet", "AllowDropIn",
"Remarks", "Years", "Term", "CourseStatus", "WebStatus",
"Room", "RoomSetup", "MemberOnly", "Teacher", "PaymentSplit",
"FlatFee", "MinCandidate", "MaxCandidate", "CourseDesc", "Meta_PageTitle",
"Meta_PageDescription", "Meta_Keywords","AllowTrialEnrol","MaterialCostPerHead"};
for (int i = 0; i < Header.Length; i++)
{
worksheetProgram.Cells[1, 1 + i] = Header[i];
}
// --- Set Interior Color
range = worksheetProgram.get_Range(worksheetProgram.Cells[1, 1], worksheetProgram.Cells[1, Header.Length]);
range.Interior.ColorIndex = clrNMA;
range.Font.Bold = true;
range = worksheetProgram.get_Range(worksheetProgram.Cells[1, 1], worksheetProgram.Cells[1, 1]);
range.Interior.ColorIndex = clrSYS;
range = worksheetProgram.get_Range(worksheetProgram.Cells[1, 2], worksheetProgram.Cells[1, 22]);
range.Interior.ColorIndex = clrMAN;
range = worksheetProgram.get_Range(worksheetProgram.Cells[1, 25], worksheetProgram.Cells[1, 25]);
range.Interior.ColorIndex = clrMAN;
range = worksheetProgram.get_Range(worksheetProgram.Cells[1, 27], worksheetProgram.Cells[1, 30]);
range.Interior.ColorIndex = clrMAN;
range = worksheetProgram.get_Range(worksheetProgram.Cells[1, 37], worksheetProgram.Cells[1, 44]);
range.Interior.ColorIndex = clrMAN;
// --- Freeze Pane ---
xlApp.ActiveWindow.SplitRow = 1;
xlApp.ActiveWindow.FreezePanes = true;
try
{
// --- set Master Data Work Sheet ---
// --- set HeldOutside Drop Down List ---
for (int i = 0; i < HeldOutside.Length; i++)
{
worksheetMaster.Cells[i + 1, 1] = HeldOutside[i];
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 1], worksheetMaster.Cells[HeldOutside.Length, 1]).Name = "HeldOutside";
// --- set AllowDropIn Drop Down List ---
for (int i = 0; i < AllowDropIn.Length; i++)
{
worksheetMaster.Cells[i + 1, 2] = AllowDropIn[i];
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 2], worksheetMaster.Cells[AllowDropIn.Length, 2]).Name = "AllowDropIn";
// --- set WebStatus Drop Down List ---
for (int i = 0; i < WebStatus.Length; i++)
{
worksheetMaster.Cells[i + 1, 3] = WebStatus[i];
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 3], worksheetMaster.Cells[WebStatus.Length, 3]).Name = "WebStatus";
// --- set MemberOnly Drop Down List ---
for (int i = 0; i < MemberOnly.Length; i++)
{
worksheetMaster.Cells[i + 1, 4] = MemberOnly[i];
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 4], worksheetMaster.Cells[MemberOnly.Length, 4]).Name = "MemberOnly";
// --- set Term Dropdownlist ---
sqlCmd = new SqlCommand("SELECT Name + '[' + Convert(NVARCHAR(7),TermID) +']' AS Term FROM ADMIN_MasterTerm", _sqlConn);
sqlCmd.CommandTimeout = 5;
sqlDR = sqlCmd.ExecuteReader();
int recordCount = 0;
while (sqlDR.Read())
{
worksheetMaster.Cells[recordCount + 1, 5] = sqlDR["Term"].ToString();
recordCount++;
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 5], worksheetMaster.Cells[recordCount, 5]).Name = "Term";
sqlDR.Close();
// --- set Room Dropdownlist ---
sqlCmd = new SqlCommand("SELECT RoomNo + '[' + Convert(NVARCHAR(7),RoomID) +']' AS Room FROM ADMIN_MasterRoom ORDER BY RoomNo", _sqlConn);
sqlDR = sqlCmd.ExecuteReader();
recordCount = 0;
while (sqlDR.Read())
{
worksheetMaster.Cells[recordCount + 1, 6] = sqlDR["Room"].ToString();
recordCount++;
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 6], worksheetMaster.Cells[recordCount, 6]).Name = "Room";
sqlDR.Close();
// --- set Teacher Dropdownlist ---
sqlCmd = new SqlCommand("SELECT FirstName +', '+LastName + '[' + Convert(NVARCHAR(7),TeacherID) +']' AS Teacher FROM TEACHER_Teacher ORDER BY FirstName,LastName", _sqlConn);
sqlDR = sqlCmd.ExecuteReader();
recordCount = 0;
while (sqlDR.Read())
{
worksheetMaster.Cells[recordCount + 1, 7] = sqlDR["Teacher"].ToString();
recordCount++;
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 7], worksheetMaster.Cells[recordCount, 7]).Name = "Teacher";
sqlDR.Close();
// --- set CourseType Drop Down List ---
for (int i = 0; i < CourseType.Length; i++)
{
worksheetMaster.Cells[i + 1, 8] = CourseType[i];
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 8], worksheetMaster.Cells[CourseType.Length, 8]).Name = "CourseType";
// --- set Category/Sub-Category Dropdownlist ---
sqlCmd = new SqlCommand("SELECT ADMIN_MasterCourseCategories.Name + '/' + ADMIN_MasterCourseSubCategories.Name + '[' + CONVERT(NVARCHAR,ADMIN_MasterCourseSubCategories.SubCategoryID) + ']' AS Catgeory FROM ADMIN_MasterCourseSubCategories,ADMIN_MasterCourseCategories WHERE ADMIN_MasterCourseSubCategories.CategoryID = ADMIN_MasterCourseCategories.CategoryID ORDER BY ADMIN_MasterCourseCategories.Name,ADMIN_MasterCourseSubCategories.Name", _sqlConn);
sqlDR = sqlCmd.ExecuteReader();
recordCount = 0;
while (sqlDR.Read())
{
worksheetMaster.Cells[recordCount + 1, 9] = sqlDR["Catgeory"].ToString();
recordCount++;
}
worksheetMaster.get_Range(worksheetMaster.Cells[1, 9], worksheetMaster.Cells[recordCount, 9]).Name = "Catgeory";
sqlDR.Close();
protected void btnExport_Click(object sender, EventArgs e)
{
// --- init SQL Variable ---
SqlCommand sqlCmd;
SqlDataReader sqlDR;
// --- Define Color Column Header ---
int clrSYS = 38;
int clrMAN = 35;
int clrNMA = 36;
// -- init DropDownListValue ---
String[] CourseType = new String[] { "Social Event", "Volunteering", "Course" };
String[] HeldOutside = new String[] { "Yes", "No" };
String[] AllowDropIn = new String[] { "Yes", "No" };
String[] AllowTrialEnrol = new String[] { "TRUE", "FALSE" };
String[] WebStatus = new String[] { "Pending", "Live" };
String[] MemberOnly = new String[] { "Yes", "No" };
// --- init Excel Application ---
Excel.Application xlApp = new Excel.Application();
Excel.Range range;
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
// --- create Program Work sheet ---
Excel.Worksheet worksheetProgram = (Excel.Worksheet)workbook.Worksheets[1];
// --- create Master Data Work sheet ---
Excel.Worksheet worksheetMaster = (Excel.Worksheet)workbook.Worksheets.Add(System.Reflection.Missing.Value, worksheetProgram, 1, Excel.XlWBATemplate.xlWBATWorksheet);
// --- set Master Data Work sheet Hide ---
worksheetMaster.Visible = Excel.XlSheetVisibility.xlSheetVeryHidden;
// --- set Name in Sheet ---
worksheetProgram.Name = "Program";
worksheetMaster.Name = "Master";