多用户同时通过Excel生成报表的问题

xuefeng_zzg 2014-03-11 02:52:47
最近开发出的项目碰到了一个问题,在程序中如果的当个用户即自己调试是没有问题的,但是当多个用户同时执行的话就出现了数据无法访问的问题。请大家帮帮忙,看看可以怎么改。
主要代码如下

public void GetURL(Reprots reprotsInfo)
{
if (Session["FileName"] != null)
{
string oldfileName = Session["FileName"].ToString();
string oldxlsPath = Server.MapPath("~/DownLoad/" + oldfileName);
//保存Excel单网页格式的文件路径
string oldhtmlPath = oldxlsPath.Replace(".xls", ".mht");
FilePicDelete(oldhtmlPath);
FilePicDelete(oldxlsPath);
}

SpreadsheetGear.IWorkbookSet workbookSet = SpreadsheetGear.Factory.GetWorkbookSet(System.Globalization.CultureInfo.CurrentCulture);
SpreadsheetGear.IWorkbook workbook = workbookSet.Workbooks.OpenFromMemory(reprotsInfo.ReportContent);
SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets[0];
//向Excel中添加单元格和图形的填充数据
GetConfigData(workbook, reprotsInfo.ReportID);
//把当前的Excel转为二进制
Byte[] reportContent = workbook.SaveToMemory(SpreadsheetGear.FileFormat.Excel8);
//保存文件名
string fileName = Session["Account"].ToString() + reprotsInfo.ReportName + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
Session["FileName"] = Session["Account"].ToString() + reprotsInfo.ReportName + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls"; ;
//保存Excel文件路径
string xlsPath = Server.MapPath("~/DownLoad/" + fileName);
//保存Excel单网页格式的文件路径
string htmlPath = xlsPath.Replace(".xls", ".mht");
//设置当前的Excel的保存路径
FileStream fs = new FileStream(xlsPath, FileMode.Create);
//保存当前Excel文件
fs.Write(reportContent, 0, reportContent.Length);
//清除缓存
fs.Flush();
//关闭Excel文件
fs.Close();
//删除老的Excel单网页文件
FilePicDelete(htmlPath);
//生成新的Excel单网页文件
ExcelConvertToHtml(xlsPath, htmlPath);
//把新的Excel单网页文件显示到页面上
System.IO.FileInfo file = new System.IO.FileInfo(htmlPath);
if (file.Exists)
{
this.Panel2.IFrameUrl = "/DownLoad/" + fileName.Replace(".xls", ".mht");
}
}

我生成报表的原理是先从数据库中获得Excel的模板,然后把配置数据填入相应的单元格,生成Excel文件形式的报表,然后把该Excel另存为.mht形式,最后再把它嵌入网页中。
...全文
238 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
新页小星 2014-03-17
  • 打赏
  • 举报
回复
如果是客户端的话,柱状图、曲线图用EasyUI好像可以,你试一下
xuefeng_zzg 2014-03-17
  • 打赏
  • 举报
回复
我用excel最关键的是用它的柱状图、曲线图之类的东西,在网上也没找到web端可以支持显示excel图形的控件。所以我想了这样一个蛋疼的办法。
踏平扶桑 2014-03-17
  • 打赏
  • 举报
回复
不如换个思路
把数据从数据库返回到客户端,然后在客户端生成报表格式(Jquery来生成表格什么的。)
md5e 2014-03-17
  • 打赏
  • 举报
回复
static object _lock=new object(); public void GetURL(Reprots reprotsInfo) { lock(_lock){ if (Session["FileName"] != null) { string oldfileName = Session["FileName"].ToString(); string oldxlsPath = Server.MapPath("~/DownLoad/" + oldfileName); //保存Excel单网页格式的文件路径 string oldhtmlPath = oldxlsPath.Replace(".xls", ".mht"); FilePicDelete(oldhtmlPath); FilePicDelete(oldxlsPath); } SpreadsheetGear.IWorkbookSet workbookSet = SpreadsheetGear.Factory.GetWorkbookSet(System.Globalization.CultureInfo.CurrentCulture); SpreadsheetGear.IWorkbook workbook = workbookSet.Workbooks.OpenFromMemory(reprotsInfo.ReportContent); SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets[0]; //向Excel中添加单元格和图形的填充数据 GetConfigData(workbook, reprotsInfo.ReportID); //把当前的Excel转为二进制 Byte[] reportContent = workbook.SaveToMemory(SpreadsheetGear.FileFormat.Excel8); //保存文件名 string fileName = Session["Account"].ToString() + reprotsInfo.ReportName + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls"; Session["FileName"] = Session["Account"].ToString() + reprotsInfo.ReportName + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls"; ; //保存Excel文件路径 string xlsPath = Server.MapPath("~/DownLoad/" + fileName); //保存Excel单网页格式的文件路径 string htmlPath = xlsPath.Replace(".xls", ".mht"); //设置当前的Excel的保存路径 FileStream fs = new FileStream(xlsPath, FileMode.Create); //保存当前Excel文件 fs.Write(reportContent, 0, reportContent.Length); //清除缓存 fs.Flush(); //关闭Excel文件 fs.Close(); //删除老的Excel单网页文件 FilePicDelete(htmlPath); //生成新的Excel单网页文件 ExcelConvertToHtml(xlsPath, htmlPath); //把新的Excel单网页文件显示到页面上 System.IO.FileInfo file = new System.IO.FileInfo(htmlPath); if (file.Exists) { this.Panel2.IFrameUrl = "/DownLoad/" + fileName.Replace(".xls", ".mht"); } } }
xuefeng_zzg 2014-03-17
  • 打赏
  • 举报
回复
我知道用lock是锁,关键是锁哪里
md5e 2014-03-17
  • 打赏
  • 举报
回复
用lock(_lock){ .... }
xuefeng_zzg 2014-03-17
  • 打赏
  • 举报
回复
个人感觉是多线程方面的问题,因为对多线程不是很了解,求解答应该怎么锁
xuefeng_zzg 2014-03-12
  • 打赏
  • 举报
回复
顶。。。。。。。 求答案
xuefeng_zzg 2014-03-11
  • 打赏
  • 举报
回复
你这主要是Excel的上传下载的,和我的问题有区别
insus 2014-03-11
  • 打赏
  • 举报
回复
xuefeng_zzg 2014-03-11
  • 打赏
  • 举报
回复
求帮助。。。。。。。。。。

62,248

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧