Excel导出问题解决方案(导出时前面的0自动被去掉)
2012-10-17 22:39 C#与.NET探索者 阅读(2141) 评论(0) 编辑 收藏 举报最简单的方法是:在数字前面加'符号。即代码里添加: "'"
以下均是网上搜集到的其他解答:
一.代码如下:
style="mso-number-format:'/@';"
现在说明一下;一般在我在做ASP导出EXCEL页面时在开头加上如下代码:
<% response.ContentType ="application/vnd.ms-excel" Response.AddHeader "content-Disposition","filename=导出后的文件名称.xls;attachment;" Response.Flush %>
这部份在网上都有然后是我的代码了: style="mso-number-format:'/@';"
这段代码是把所在<td>或<tr>内的数据格式化为文本,我不知道HTML是否支持这个STYLE,但EXCEL是一定支持的,要不然我就不可能解决问题了,希望大家都能解决一直以来无法解决的问题吧可以写段代码做一下测试
<% response.ContentType ="application/vnd.ms-excel" Response.AddHeader "content-Disposition","filename=导出后的文件名称.xls;attachment;" Response.Flush %> <table> <tr> <td style="mso-number-format:'/@';">0001</tr> <td>0002</td> </tr> <table>
出来的数据将会是:
0001 2
二.在简易的Jsp导出html版本的execl中所有的文件导出默认都是文本文件,这给业务人员带来了一些不必要的操作,建议使用下面的方法,可以调整导出的格式类型.
- mso-number-format:"0" NO Decimals
- mso-number-format:"0/.000" 3 Decimals
- mso-number-format:"/#/,/#/#0/.000" Comma with 3 dec
- mso-number-format:"mm//dd//yy" Date7
- mso-number-format:"mmmm/ d/,/ yyyy" Date9
- mso-number-format:"m//d//yy/ h/:mm/ AM//PM" D -T AMPM
- mso-number-format:"Short Date" 01/03/1998
- mso-number-format:"Medium Date" 01-mar-98
- mso-number-format:"d/-mmm/-yyyy" 01-mar-1998
- mso-number-format:"Short Time" 5:16
- mso-number-format:"Medium Time" 5:16 am
- mso-number-format:"Long Time" 5:16:21:00
- mso-number-format:"Percent" Percent - two decimals
- mso-number-format:"0%" Percent - no decimals
- mso-number-format:"0/.E+00" Scientific Notation
- mso-number-format:"/@" Text
- mso-number-format:"/#/ ???//???" Fractions - up to 3 digits (312/943)
- mso-number-format:"/0022£/0022/#/,/#/#0/.00" £12.76
- mso-number-format:"/#/,/#/#0/.00_ /;/[Red/]/-/#/,/#/#0/.00/ "
- 2 decimals, negative numbers in red and signed
- (1.56 -1.56)
- 用法举例:
- 当我们用<%@page contentType="application/vnd.ms-excel; charset=UTF-8"%>的方法导出jsp文件为excel时,如果导出的数据中有数字以0开头,则该0会被省略,为了保留这个处于首位的0,可以在表格的style中加入:
- style='mso-number-format:"/@";'
- 这样的话,导出的该表格中首位为0的数字就会将该0保留啦!
三.在asp.net中导出excel 中比较通行的做法是 response.contenttype = "application/vnd.ms-excel";
然后直接向里面扔 html 的table
但是有中文的时候 老出现乱码,有很多解决方案,但都不能通盘解决,我在蓝色小铺上发现这篇文章方法不错,借鉴
就是在 输出html两头输出
response.write("<html><head><meta http-equiv=content-type content=/"text/html; charset=utf-8/">");
response.write("</body></html>");
这样就解决了,究其原因,大概是 excel读到 utf-8自己会改变字符集读取方式吧,其实文件本身改变为unicode字符集就可以读取了,但不知道response怎么输出unicode
另外 蓝色小铺上的同学问到 怎么 0001234输出 就变成了 1234 了,其实这个是excel搞鬼,你看输出的源文件就明白了,解决方案是老夫的独门特技,可惜蓝色小铺注册不了,台湾同胞还是不把咱当同胞阿,注册随机码的图片总是个叉叉
解决方法如下
碰到 0开头的字符串输出时,td 为
string.format("<td style='mso-number-format:general;mso-number-format:/"{1}/"'>{0}</td>", dt.rows[j][i], @"/@");