gridview中的数据导出到EXCEL问题
实现功能,例如数据有60条,导出报表1为50条数据,报表2为10条数据,以50条数据为分页,实现导出2个报表。...
实现功能,例如数据有60条,导出报表1为50条数据,报表2为10条数据,以50条数据为分页,实现导出2个报表。
展开
4个回答
展开全部
DataTable dtResult = bll.CustomerQuerySQL(strBuilder.ToString()).Tables[0];//获取所有数据
List<DataRow> drList = new List<DataRow>();//分配的行
ArrayList arrlist = new ArrayList();//分配行以后归组
if (dtResult.Rows.Count > 50)
{
for (int i = 0; i < dtResult.Rows.Count; i++)
{
drList.Add(dtResult.Rows[i]);
if ((i + 1) % 50 == 0)
{
arrlist.Add(drList);
drList = new List<DataRow>();
}
}
if (drList.Count > 0)
{
arrlist.Add(drList);
drList = new List<DataRow>();
}
}
else
{
for (int i = 0; i < dtResult.Rows.Count; i++)
{
drList.Add(dtResult.Rows[i]);
}
arrlist.Add(drList);
drList = new List<DataRow>();
}
string Path = MapPath("../document/SalesExcel.xls");
Workbook wb = new Workbook();
wb.Open(Path);
//Worksheet ws = wb.Worksheets[0];
wb.Worksheets[0].Name = FormNO;
if (arrlist.Count > 1)
{
wb.Worksheets[0].Name = FormNO + "01";
for (int i = 1; i < arrlist.Count; i++)
{
wb.Worksheets.Add(FormNO+"0"+(i+1));
wb.Worksheets[i].Copy(wb.Worksheets[0]);
}
}
for (int i = 0; i < arrlist.Count; i++)
{
List<DataRow> drListS = (List<DataRow>)(arrlist[i]);
for (int k = 0; k < drListS.Count; k++)
{
//写入数据
}
}
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentEncoding = Encoding.UTF7;
string strFileName = SalesFormNO + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
strFileName = HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8);
// 添加头信息,为"文件下载/另存为"对话框指定默认文件名
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=\"" + strFileName + "\"");
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.BinaryWrite(wb.SaveToStream().ToArray());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.End();
以上是我在一个项目中导出Excel的部分代码,具体思路是,获取数据源后分组,就比如120条数据,分成三组,第一组50条,第二组50条,第三组20条~~~·
然后遍历每组,循环产生Excel工作薄,有几个组就产生几个工作薄,并将数据写入对应的工作薄中。
采用的excel读写组件是Aspose.Cells.dll
希望对你有帮助
List<DataRow> drList = new List<DataRow>();//分配的行
ArrayList arrlist = new ArrayList();//分配行以后归组
if (dtResult.Rows.Count > 50)
{
for (int i = 0; i < dtResult.Rows.Count; i++)
{
drList.Add(dtResult.Rows[i]);
if ((i + 1) % 50 == 0)
{
arrlist.Add(drList);
drList = new List<DataRow>();
}
}
if (drList.Count > 0)
{
arrlist.Add(drList);
drList = new List<DataRow>();
}
}
else
{
for (int i = 0; i < dtResult.Rows.Count; i++)
{
drList.Add(dtResult.Rows[i]);
}
arrlist.Add(drList);
drList = new List<DataRow>();
}
string Path = MapPath("../document/SalesExcel.xls");
Workbook wb = new Workbook();
wb.Open(Path);
//Worksheet ws = wb.Worksheets[0];
wb.Worksheets[0].Name = FormNO;
if (arrlist.Count > 1)
{
wb.Worksheets[0].Name = FormNO + "01";
for (int i = 1; i < arrlist.Count; i++)
{
wb.Worksheets.Add(FormNO+"0"+(i+1));
wb.Worksheets[i].Copy(wb.Worksheets[0]);
}
}
for (int i = 0; i < arrlist.Count; i++)
{
List<DataRow> drListS = (List<DataRow>)(arrlist[i]);
for (int k = 0; k < drListS.Count; k++)
{
//写入数据
}
}
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.ContentEncoding = Encoding.UTF7;
string strFileName = SalesFormNO + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
strFileName = HttpUtility.UrlEncode(strFileName, System.Text.Encoding.UTF8);
// 添加头信息,为"文件下载/另存为"对话框指定默认文件名
HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=\"" + strFileName + "\"");
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.BinaryWrite(wb.SaveToStream().ToArray());
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.End();
以上是我在一个项目中导出Excel的部分代码,具体思路是,获取数据源后分组,就比如120条数据,分成三组,第一组50条,第二组50条,第三组20条~~~·
然后遍历每组,循环产生Excel工作薄,有几个组就产生几个工作薄,并将数据写入对应的工作薄中。
采用的excel读写组件是Aspose.Cells.dll
希望对你有帮助
展开全部
数据源需要用游标来写,并写成存储过程,一个Output返回参数,用以返回页数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以 把表 分别导出数据
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的意思是有多少页,就导出多少个报表吧?其实它就是数据源不同而已。这个很简单,我可以帮到你!
更多追问追答
追问
怎么弄,求教
追答
你的qq多少,这个说起来还比较复杂!qq聊吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询