导出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();请教各位大侠,问题该如何解决

解决方案 »

  1.   

    顺便说一局,程序部署在我的机器上没事,但是部署到客户的服务器上导出Excel(客户要求导出wps表格)就有问题了。
      

  2.   

    是导出到个sheet吗
    我现在也正在做这个
    希望能借鉴点你的经验
      

  3.   

    不懂,前几天我也做了一个把GV导出到Excel表,自己测试通过了。不过你说的这种部署到服务器上会出现问题我还没有试过先在此留个脚印,帮你顶顶
    提示:其实这类方法网上有很多种,你可以试者换换其他的实现方法,或许不会出现这个问题
      

  4.   

    EXCEL版本是否一致
    程序本身的问题。
    使得内存资源没有及时释放导致此错误