关于控件导出Excel格式问题的新解决方案

今天弄了一下控件导出Excel,于是产生了格式问题了,一些日期如20091222的名称被显示为科学记数法。

所以,我搜了博客园。一大堆的文章都是复制来复制去的资料。

基本上都有这么一行闪亮的代码:文本:vnd.ms-excel.numberformat:@

有深入一点的文章,会告诉你,这个东西要写在<td style="vnd.ms-excel.numberformat:@">xxx</td>里

于是这里就产生这两个分支方法:

1.直接就写上<td style="vnd.ms-excel.numberformat:@"><%# Eval("XXX") %></td>

2.没法直接写<td的,由GridView等直接产生Table的就来后台循环输出法:

这里随便拿一段:

//对需要格式化的列进行格式化
//e.Item.Cells[0].Attributes.Add("style", "vnd.ms-excel.numberformat:@");

--------------------------------------------------------------------------------------

实际上,我们导出Excel后,如果用记事本打开,可以发现,实际差不多就是个html。

即然是html,当然也可以用样式了。既然不能引用外部样式,那直接就写内部样式就行了。

于是,我产生了这么一小段代码:

 


代码

HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>");
            HttpContext.Current.Response.AppendHeader("content-disposition", "attachment;filename=export.xls");
            HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
            StringBuilder sb = new StringBuilder();
            sb.Append("<head><style>table td,th{vnd.ms-excel.numberformat:@;text-align: center;} table th{color:red}</style></head>");//关键看这里,格式化,并为标题加红色            

       System.IO.StringWriter sw = new System.IO.StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);
            foreach (Control  ct in ctList)
            {
                ct.RenderControl(htw);
            }
            sb.Append(sw.ToString());
            sw.Close();
            HttpContext.Current.Response.Write(sb.ToString());
            HttpContext.Current.Response.End();

 

 

至此,通过在输出前,附加<style></style>样式,即可控件Excel的输出格式了。

时间: 2024-12-28 22:46:48

关于控件导出Excel格式问题的新解决方案的相关文章

利用Aspose.Cell控件导入Excel非强类型的数据

导入Excel的操作是非常常见的操作,可以使用Aspose.Cell.APOI.MyXls.OLEDB.Excel VBA等操作Excel文件,从而实现数据的导入,在导入数据的时候,如果是强类型的数据,那么这几种方式好像都表现差不多,正常操作能够导入数据.如果是非强类型的数据,那么就需要特别注意了,一般情况下,导入的DataTable数据列的类型是以第一行内容作为确定列类型的,本文介绍利用Aspose.Cell控件导入Excel非强类型的数据的操作. 什么是强类型的数据呢,就是在Excel表格中

使用Aspose.Cell控件实现Excel高难度报表的生成(三)

在之前几篇文章中,介绍了关于Apsose.cell这个强大的Excel操作控件的使用,相关文章如下: 使用Aspose.Cell控件实现Excel高难度报表的生成(一) 使用Aspose.Cell控件实现Excel高难度报表的生成(二) 使用Aspose.Cell控件实现多个Excel文件的合并 这几篇文章,都对Apose.Cell这个控件生成各种Excel的方式进行了阐述,对直接把DataTable或者IList生成Excel的操作,对通过模板方式实现自定义报表的各种方式,以及多个文件的合并的

使用Aspose.Cell控件实现Excel高难度报表的生成(二)

继续在上篇<使用Aspose.Cell控件实现Excel高难度报表的生成(一)>随笔基础上,研究探讨基于模板的Aspose.cell报表实现,其中提到了下面两种报表的界面,如下所示:  或者这样的报表格式    首先来分析第一种报表,这个其实还是比较固定的二维表,我们只要绑定相关的信息即可,设计模板如下所示:   实际生成的报表如下所示:   实现的代码其实不复杂,如下所示:          private DataTable GetTable(string sql)         {  

php导出excel格式数据问题

 本篇文章主要是对php导出excel格式数据的问题进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 解决2个问题: 1.身份证之类的文本数据自动转为科学计数法的问题. 2.中文乱码的问题   excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取 它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默

用Jmail控件发送HTML格式邮件,如何使HTML代码引用附件中的图片?

问题描述 用Jmail控件发送HTML格式邮件,如何使HTML代码引用附件中的图片? RT,如何获取附件地址?string cid=mymail.addattachment(filename,true,null),得到的是什么?在HTML代码中要怎么用才能引用成功呢?本人小白一枚,请大神指点 解决方案 jmail发送html格式的邮件Java发送HTML格式的邮件javamail实现向多人发送带附件的html格式邮件

ctl-关于DataList控件的ID格式问题

问题描述 关于DataList控件的ID格式问题 我在Usercontrol中放置了嵌套的两个DataList,本地使用非常正常,将该网站上传至服务器上分别建立了正式和测试两个站点. 这两个站点在DataList的ID上出现了不同的格式.以下为DataList生成的HTML后table的ID格式,我不知道为何会出现不同,麻烦知道的告知下原因,谢谢. 本地格式: HTLSelectRoomTypeControl1_dlHotel_ctl00_dlRoom 测试站点格式: HTLSelectRoom

jscalendar控件如何设置格式为 yyyy/MM/dd HH24:mi

问题描述 jscalendar控件如何设置格式为 yyyy/MM/dd HH24:mi? 解决方案 dateFormat: "%Y-%m-%d %H:%M"解决方案二:jscal2吗?还是老版本?

Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案_javascript技巧

UEditor组件是百度提供的一套开源的web在线所见即所得富文本编辑器,具有轻量,可定制,注重用户体验等特点,基于MIT协议,功能很强大.最近在使用的过程中发现其中上传的图片(或者插入已有的表情包图片)都无法正常缩放,选中图片,用鼠标点击并拖动图片边沿的小标签,图片只能缩小不能放大.尝试过很多方法都没办法解决,甚至检查了js源码,也没有发现有任何异常的地方. 后来无意中发现页面上引入了Bootstrap,而Bootstrap默认将box-sizing样式统一设成border-box了.具体内容

导出CListCtrl控件到Excel文件

CListCtrl获得列的属性可以使用BOOL CListCtrl::GetColumn( int nCol, LVCOLUMN* pColumn ),nCol为需要获得获得属性值的列序号,pColumn 为 LVCOLUMN 结构体的指针.LVCOLUMN结构体中的 UINT mask 作为输入,决定返回哪些属性的值,如果 mask 的值包含 LVCF_TEXT ,则需要将字符串缓存的首地址指针置入结构体中的 LPTSTR pszText; 变量,缓存大小置入 int cchTextMax;