如题, 导出第一次没有问题, 再导就有问题了, 不知道是因为哪里没有释放. 部份代码如下.
protected void outExcel_Click(object sender, EventArgs e)
{
OutExcel outE = new OutExcel(); //实例化OutExcel类,打开Excel模版
string sUserName = Common.Get_LoginName.Trim();//以用户名为导出的文件夹名
FileHelper.DeleteDirectory("~\\Public\\OutExc\\" + sUserName + ""); //删除以前导出过的文件
string sFileName = string.Empty;
ArrayList lstFileName = new ArrayList();
ArrayList list = new ArrayList();
int count = 0;
int i = 0;
foreach (GridViewRow GridRow in this.gvList.Rows)
{
CheckBox ck = GridRow.FindControl("cbSelect") as CheckBox;
if (ck.Checked)
{
i = i + 1;
HiddenField FieldValueID = GridRow.FindControl("RsID") as HiddenField;
string ComID = FieldValueID.Value;
OutExcel objOutExcel = new OutExcel();
sFileName = objOutExcel.ExportExcel(ComID, sUserName, "", i);
count++;
}
}
outE.file.Close();
outE.file.Dispose(); //释放内存
if (count == 1)
{
Response.Redirect(Page.ResolveUrl("~/") + "Public/OutExc/" + sUserName + "/" + Server.UrlEncode(sFileName.ToString()), false);
}
else
{
string sPathFrom = Server.MapPath("~\\Public\\OutExc\\" + sUserName + "").ToString().Trim();
string sPathTo = Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\企业信息.zip").ToString().Trim();
ZipFileFromDirectory(sPathFrom, sPathTo, 9);
if (File.Exists(sPathTo)) //判断是否存在物理路径的压缩文件
{
Response.Redirect(Page.ResolveUrl("~/") + "Public/OutExc/" + sUserName + "/企业信息.zip", false);
} }
}
OutExcel类:private int ZsCount = 0;
public string strLayerName = "养殖企业@GDSC";
public string strLayerName2 = "养殖基地@GDSC";
private string zxdwd = ""; //中心点纬度
private string zxdjd = ""; //中心点经度
HSSFWorkbook hssfworkbook;
public FileStream file; public OutExcel()
{
string templatePath = HttpContext.Current.Server.MapPath("~\\hydgweb\\DataCollating\\ComInfo\\Template\\ExcelTemp\\ExcelTemplate.xls");
using (file = new FileStream(templatePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
} /// <summary>返回导出的文件名
///
/// </summary>
/// <param name="TitleID"></param>
/// <returns></returns>
public string ExportExcel(string ComId, string sUserName, string diqu, int num)
{
string area = "";
string myPath = ""; Wat_ComInfoEntity ut = BusinessRule.Wat_ComInfoDisp(ComId);
string sFileName = "";
if (ut.Com_Name.Trim() != "")
{
if (TakeOfStr(ut.Com_Name.Trim()) != "")
{
sFileName = TakeOfStr(ut.Com_Name.Trim());
}
else
{
sFileName = num.ToString();
}
}
DataTable dt = BusinessFacadeComInfo.GetAreaName(ut.Com_AreaCode);
if (dt != null && dt.Rows.Count > 0)
{
if (diqu == "")
{
//选择导出按钮
//省
if (dt.Rows[0]["City"].ToString() == "广东省") //因为有些数据的地区编码是广东省的,如果是广东省就不需要加广东省的目录
{
myPath = dt.Rows[0]["City"].ToString() + "\\" + dt.Rows[0]["County"].ToString();
area = dt.Rows[0]["City"].ToString() + "/" + dt.Rows[0]["County"].ToString();
}
else
{
myPath = "广东省\\" + dt.Rows[0]["City"].ToString() + "\\" + dt.Rows[0]["County"].ToString();
area = "广东省/" + dt.Rows[0]["City"].ToString() + "/" + dt.Rows[0]["County"].ToString();
}
}
//先创建目录,如果不存在
string fullPath = Common.CreateDirectory(HttpContext.Current.Server.MapPath(Common.UpLoadDir), "OutExc\\" + sUserName + "\\" + myPath);
}
else
{
//没有记录,可能是因为企业的行政代码是镇的,而字典表里的镇级是没有行政代码的。所以要根据前面位判断归纳到市级
string code = "";
if (ut.Com_AreaCode != "")
{
code = ut.Com_AreaCode.Substring(0, 4);
}
DataTable dt2 = BusinessFacadeComInfo.GetAreaName2(code);
if (dt2 != null && dt2.Rows.Count > 0)
{
if (diqu == "") //省
{
//选择导出按钮
myPath = "广东省\\" + dt2.Rows[0]["City"].ToString();
area = "广东省/" + dt2.Rows[0]["City"].ToString();
}
else //市
{
//导出全部按钮
myPath = dt2.Rows[0]["City"].ToString().Trim();
area = dt2.Rows[0]["City"].ToString().Trim();
}
//先创建目录,如果不存在
string fullPath = Common.CreateDirectory(HttpContext.Current.Server.MapPath(Common.UpLoadDir), "OutExc\\" + sUserName + "\\" + myPath);
}
}
string sPathNew = HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath + "\\" + sFileName + ".xls");
if (!File.Exists(sPathNew))
{
ExportExcel(ComId, ut, sFileName, myPath, sUserName);
}
else
{
ExportExcel(ComId, ut, sFileName + num, myPath, sUserName); //如果文件已经存在了,就用企业名称加序号
}
return area + "/" + sFileName.Trim() + ".xls"; //返回带地区的文件名
} /// <summary>导出Excel文件
///
/// </summary>
/// <param name="id"></param>
private void ExportExcel(string ComId, Wat_ComInfoEntity ut, string sFileName, string myPath, string sUserName)
{
string ComName = ut.Com_Name.Trim();
HSSFSheet sheet = hssfworkbook.GetSheetAt(2);
//企业名称(姓名)
string ComName_C = sheet.GetRow(1).GetCell(2).ToString(); //获取单元格的值
string ComName_V = ComName_C.Replace("$Com_Name$", ComName); //替换标识符
sheet.GetRow(1).GetCell(2).SetCellValue(ComName_V); //重新设置单元格的值
int position = 0; //尾页的位置
if (ZsCount > 1)
{
position = 4 + ZsCount;
}
else
{
position = 5;
}
hssfworkbook.CloneSheet(1); //克隆“尾页1”
hssfworkbook.SetSheetName(position, "尾页");
hssfworkbook.RemoveSheetAt(1); //删除“尾页1” string sPathNew = "";//附件
if (!System.IO.Directory.Exists(HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath)))
{
Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath));
}
sPathNew = HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath + "\\" + sFileName + ".xls"); //保存Excel
sheet.ForceFormulaRecalculation = true;
FileStream file2 = new FileStream(sPathNew, FileMode.Create);
hssfworkbook.Write(file2);
}
protected void outExcel_Click(object sender, EventArgs e)
{
OutExcel outE = new OutExcel(); //实例化OutExcel类,打开Excel模版
string sUserName = Common.Get_LoginName.Trim();//以用户名为导出的文件夹名
FileHelper.DeleteDirectory("~\\Public\\OutExc\\" + sUserName + ""); //删除以前导出过的文件
string sFileName = string.Empty;
ArrayList lstFileName = new ArrayList();
ArrayList list = new ArrayList();
int count = 0;
int i = 0;
foreach (GridViewRow GridRow in this.gvList.Rows)
{
CheckBox ck = GridRow.FindControl("cbSelect") as CheckBox;
if (ck.Checked)
{
i = i + 1;
HiddenField FieldValueID = GridRow.FindControl("RsID") as HiddenField;
string ComID = FieldValueID.Value;
OutExcel objOutExcel = new OutExcel();
sFileName = objOutExcel.ExportExcel(ComID, sUserName, "", i);
count++;
}
}
outE.file.Close();
outE.file.Dispose(); //释放内存
if (count == 1)
{
Response.Redirect(Page.ResolveUrl("~/") + "Public/OutExc/" + sUserName + "/" + Server.UrlEncode(sFileName.ToString()), false);
}
else
{
string sPathFrom = Server.MapPath("~\\Public\\OutExc\\" + sUserName + "").ToString().Trim();
string sPathTo = Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\企业信息.zip").ToString().Trim();
ZipFileFromDirectory(sPathFrom, sPathTo, 9);
if (File.Exists(sPathTo)) //判断是否存在物理路径的压缩文件
{
Response.Redirect(Page.ResolveUrl("~/") + "Public/OutExc/" + sUserName + "/企业信息.zip", false);
} }
}
OutExcel类:private int ZsCount = 0;
public string strLayerName = "养殖企业@GDSC";
public string strLayerName2 = "养殖基地@GDSC";
private string zxdwd = ""; //中心点纬度
private string zxdjd = ""; //中心点经度
HSSFWorkbook hssfworkbook;
public FileStream file; public OutExcel()
{
string templatePath = HttpContext.Current.Server.MapPath("~\\hydgweb\\DataCollating\\ComInfo\\Template\\ExcelTemp\\ExcelTemplate.xls");
using (file = new FileStream(templatePath, FileMode.Open, FileAccess.Read))
{
hssfworkbook = new HSSFWorkbook(file);
}
} /// <summary>返回导出的文件名
///
/// </summary>
/// <param name="TitleID"></param>
/// <returns></returns>
public string ExportExcel(string ComId, string sUserName, string diqu, int num)
{
string area = "";
string myPath = ""; Wat_ComInfoEntity ut = BusinessRule.Wat_ComInfoDisp(ComId);
string sFileName = "";
if (ut.Com_Name.Trim() != "")
{
if (TakeOfStr(ut.Com_Name.Trim()) != "")
{
sFileName = TakeOfStr(ut.Com_Name.Trim());
}
else
{
sFileName = num.ToString();
}
}
DataTable dt = BusinessFacadeComInfo.GetAreaName(ut.Com_AreaCode);
if (dt != null && dt.Rows.Count > 0)
{
if (diqu == "")
{
//选择导出按钮
//省
if (dt.Rows[0]["City"].ToString() == "广东省") //因为有些数据的地区编码是广东省的,如果是广东省就不需要加广东省的目录
{
myPath = dt.Rows[0]["City"].ToString() + "\\" + dt.Rows[0]["County"].ToString();
area = dt.Rows[0]["City"].ToString() + "/" + dt.Rows[0]["County"].ToString();
}
else
{
myPath = "广东省\\" + dt.Rows[0]["City"].ToString() + "\\" + dt.Rows[0]["County"].ToString();
area = "广东省/" + dt.Rows[0]["City"].ToString() + "/" + dt.Rows[0]["County"].ToString();
}
}
//先创建目录,如果不存在
string fullPath = Common.CreateDirectory(HttpContext.Current.Server.MapPath(Common.UpLoadDir), "OutExc\\" + sUserName + "\\" + myPath);
}
else
{
//没有记录,可能是因为企业的行政代码是镇的,而字典表里的镇级是没有行政代码的。所以要根据前面位判断归纳到市级
string code = "";
if (ut.Com_AreaCode != "")
{
code = ut.Com_AreaCode.Substring(0, 4);
}
DataTable dt2 = BusinessFacadeComInfo.GetAreaName2(code);
if (dt2 != null && dt2.Rows.Count > 0)
{
if (diqu == "") //省
{
//选择导出按钮
myPath = "广东省\\" + dt2.Rows[0]["City"].ToString();
area = "广东省/" + dt2.Rows[0]["City"].ToString();
}
else //市
{
//导出全部按钮
myPath = dt2.Rows[0]["City"].ToString().Trim();
area = dt2.Rows[0]["City"].ToString().Trim();
}
//先创建目录,如果不存在
string fullPath = Common.CreateDirectory(HttpContext.Current.Server.MapPath(Common.UpLoadDir), "OutExc\\" + sUserName + "\\" + myPath);
}
}
string sPathNew = HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath + "\\" + sFileName + ".xls");
if (!File.Exists(sPathNew))
{
ExportExcel(ComId, ut, sFileName, myPath, sUserName);
}
else
{
ExportExcel(ComId, ut, sFileName + num, myPath, sUserName); //如果文件已经存在了,就用企业名称加序号
}
return area + "/" + sFileName.Trim() + ".xls"; //返回带地区的文件名
} /// <summary>导出Excel文件
///
/// </summary>
/// <param name="id"></param>
private void ExportExcel(string ComId, Wat_ComInfoEntity ut, string sFileName, string myPath, string sUserName)
{
string ComName = ut.Com_Name.Trim();
HSSFSheet sheet = hssfworkbook.GetSheetAt(2);
//企业名称(姓名)
string ComName_C = sheet.GetRow(1).GetCell(2).ToString(); //获取单元格的值
string ComName_V = ComName_C.Replace("$Com_Name$", ComName); //替换标识符
sheet.GetRow(1).GetCell(2).SetCellValue(ComName_V); //重新设置单元格的值
int position = 0; //尾页的位置
if (ZsCount > 1)
{
position = 4 + ZsCount;
}
else
{
position = 5;
}
hssfworkbook.CloneSheet(1); //克隆“尾页1”
hssfworkbook.SetSheetName(position, "尾页");
hssfworkbook.RemoveSheetAt(1); //删除“尾页1” string sPathNew = "";//附件
if (!System.IO.Directory.Exists(HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath)))
{
Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath));
}
sPathNew = HttpContext.Current.Server.MapPath("~\\Public\\OutExc\\" + sUserName + "\\" + myPath + "\\" + sFileName + ".xls"); //保存Excel
sheet.ForceFormulaRecalculation = true;
FileStream file2 = new FileStream(sPathNew, FileMode.Create);
hssfworkbook.Write(file2);
}
解决方案 »
- 怎样用asp.net mvc 实现两表左右移动,然后保存右表(有图)
- 我在asp.net站点中建了一个框架页面,我想在其他页面中点击连接时调用那个框架页面怎么办?
- 伪静态下不能使用FCKeditor怎么办?[
- 如何动态确定label标签的输出字体大小
- 动态模板列取值问题(分不够可以再加)
- 求教:多字段过滤,如何实现?
- 求js脚本控制FileUpload是否隐藏的方法!!!
- 通过DATAVIEW自动生的DATAGRID列,如何取得列标题
- gridview中删除uniqueidentifier为主键时的问题
- 为什么下面的上传文件的代码在我的机器上出现安全性问题?
- 发送邮件的问题 服务器响应为: 5.7.1 Unable to relay for [email protected]
- 求解答相关response.wrire
这个流好像没有关闭
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.GetTotalMemory(true);
有兴趣可以加入.net开源交流群共同讨论学习 69594961