导出wps表格时报错2010-12-27 12/27/2010 09:44:24 userid:1222 loginid:bd username:测试供电公司
Button.RaisePostBackEvent => Button.OnClick => Student.btnExcel_Click
message:System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
在 ET.Range.get_Cells()
在 OSTS.Web.Exam.Student.btnExcel_Click(Object sender, EventArgs e)代码如下object missing = Type.Missing;
string temp = Request.PhysicalApplicationPath + "ExcelModel" + "\\" + ViewState["FILE"].ToString();//文档模版
ET.Application etApp = new ET.ApplicationClass();
ET._Workbook etWork = etApp.Workbooks.Open(temp, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
ET.Worksheet etSheet = (ET.Worksheet)etWork.Sheets.get_Item(1);
ET.Range ra;
string filename = "";
string name = "";
string savePath = "";
DataSet ds;
DataTable dtMain;
DataTable dtSub;
DataView dv; #region 全部试卷
if (ViewState["FILE"].ToString() == "paper.xls" && ViewState["DATA"].GetType() == typeof(DataTable))
{
dtMain = (DataTable)ViewState["DATA"];
int index = 4;
int sum = 0;
etSheet.Cells[2, 1] = ViewState["BATCHNAME"];
for (int i = 0; i < dtMain.Rows.Count; i++)
{
etSheet.Cells[index + i, 1] = i + 1;
etSheet.Cells[index + i, 2] = "'" + dtMain.Rows[i]["jobcode"];
etSheet.Cells[index + i, 3] = dtMain.Rows[i]["jobname"];
etSheet.Cells[index + i, 4] = dtMain.Rows[i]["itemname"];
etSheet.Cells[index + i, 5] = dtMain.Rows[i]["num"];
sum += int.Parse(dtMain.Rows[i]["num"].ToString());
}
etSheet.Cells[index + dtMain.Rows.Count, 1] = "合计";
etSheet.Cells[index + dtMain.Rows.Count, 5] = sum;
string cell = "g" + (dtMain.Rows.Count + 3);
ra = etSheet.get_Range("a3", cell);
ra.Cells.Borders.LineStyle = ET.ETLineStyle.etContinuous;
ra.Borders.Weight = ET.ETBorderWeight.etThin;
}
#endregion
savePath = Request.PhysicalApplicationPath + "ExcelModel" + "\\" + ViewState["FILENAME"].ToString();
etWork.SaveAs(savePath, missing, missing, missing, missing, missing, ET.ETSaveAsAccessMode.etExclusive, missing, missing, missing, missing);
etWork.Close(false, missing, missing);
etApp.Quit(); filename = Convert.ToString(savePath);
name = HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes(ViewState["FILENAME"].ToString())); System.IO.FileInfo fileInfo = new System.IO.FileInfo(filename);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();请教各位大侠,问题该如何解决
Button.RaisePostBackEvent => Button.OnClick => Student.btnExcel_Click
message:System.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
在 ET.Range.get_Cells()
在 OSTS.Web.Exam.Student.btnExcel_Click(Object sender, EventArgs e)代码如下object missing = Type.Missing;
string temp = Request.PhysicalApplicationPath + "ExcelModel" + "\\" + ViewState["FILE"].ToString();//文档模版
ET.Application etApp = new ET.ApplicationClass();
ET._Workbook etWork = etApp.Workbooks.Open(temp, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
ET.Worksheet etSheet = (ET.Worksheet)etWork.Sheets.get_Item(1);
ET.Range ra;
string filename = "";
string name = "";
string savePath = "";
DataSet ds;
DataTable dtMain;
DataTable dtSub;
DataView dv; #region 全部试卷
if (ViewState["FILE"].ToString() == "paper.xls" && ViewState["DATA"].GetType() == typeof(DataTable))
{
dtMain = (DataTable)ViewState["DATA"];
int index = 4;
int sum = 0;
etSheet.Cells[2, 1] = ViewState["BATCHNAME"];
for (int i = 0; i < dtMain.Rows.Count; i++)
{
etSheet.Cells[index + i, 1] = i + 1;
etSheet.Cells[index + i, 2] = "'" + dtMain.Rows[i]["jobcode"];
etSheet.Cells[index + i, 3] = dtMain.Rows[i]["jobname"];
etSheet.Cells[index + i, 4] = dtMain.Rows[i]["itemname"];
etSheet.Cells[index + i, 5] = dtMain.Rows[i]["num"];
sum += int.Parse(dtMain.Rows[i]["num"].ToString());
}
etSheet.Cells[index + dtMain.Rows.Count, 1] = "合计";
etSheet.Cells[index + dtMain.Rows.Count, 5] = sum;
string cell = "g" + (dtMain.Rows.Count + 3);
ra = etSheet.get_Range("a3", cell);
ra.Cells.Borders.LineStyle = ET.ETLineStyle.etContinuous;
ra.Borders.Weight = ET.ETBorderWeight.etThin;
}
#endregion
savePath = Request.PhysicalApplicationPath + "ExcelModel" + "\\" + ViewState["FILENAME"].ToString();
etWork.SaveAs(savePath, missing, missing, missing, missing, missing, ET.ETSaveAsAccessMode.etExclusive, missing, missing, missing, missing);
etWork.Close(false, missing, missing);
etApp.Quit(); filename = Convert.ToString(savePath);
name = HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes(ViewState["FILENAME"].ToString())); System.IO.FileInfo fileInfo = new System.IO.FileInfo(filename);
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();请教各位大侠,问题该如何解决
我现在也正在做这个
希望能借鉴点你的经验
提示:其实这类方法网上有很多种,你可以试者换换其他的实现方法,或许不会出现这个问题
程序本身的问题。
使得内存资源没有及时释放导致此错误