作者nickboy (残心)
看板Visual_Basic
标题[.NET] datagrid存入EXCEL问题
时间Wed Sep 2 00:58:33 2009
小弟使用VB.NET写了一个程式
需要将datagrid内的资料存入EXCEL
小弟的做法是将"另存EXCEL"的button触发JavaScript程式
再开启本身页面并清除datagrid以外所有的东西
但是datagrid内有资料为长串纯数字
存入EXCEL则自动转为科学符号
EX:070090988000482会变成7.0091E+13
有没有比较有效率的储存方式
可以将datagrid存入EXCEL时自动将储存格格式定为文字
以防纯长串数字被转为科学符号!?
在"另存excel"onclick触发以下JavaScript程式
<script language="javascript">
function ExportExcel(){
var sSYY = document.getElementById("hidSYY").value;
var sSMM = document.getElementById("hidSMM").value;
var sEYY = document.getElementById("hidEYY").value;
var sEMM = document.getElementById("hidEMM").value;
var sType= document.getElementById("hidTYPE").value;
var sUrl = "页面档案名称.aspx?EXCEL=YES&sYY=" + sSYY + "&sMM=" +
sSMM + "&eYY=" + sEYY + "&eMM=" + sEMM + "&TYPE=" + sType;
window.open (sUrl, 'newwindow', 'height=200, width=500, top=0, left=0,
toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no');
}
</script>
然後再.aspx档中的<asp:datagrid>之前加入以下程式片段
<%
'将DataGrid转入EXCEL并询问储存
if bIsExcel then
Response.Clear()
Response.ContentType = "application/vnd.ms-excel"
'下面这行是要确保编码
Response.ContentEncoding = HttpContext.Current.Request.ContentEncoding.Default
Response.AddHeader("content-disposition", "attachment; filename=" &
System.Web.HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8))
end If
%>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.166.221.23
1F:→ MOONRAKER:在前面或後面加入一个空白试试 以前好像是这样绕过去的 09/02 07:14
2F:→ nickboy:没有办法,依然自动被EXCEL省略掉 09/02 09:41
3F:→ MOONRAKER:那麽前面加单引号( ' )试试看 09/02 09:58
补充说明一下
我的datagrid中有碰到困扰的栏位为以下
<asp:TemplateColumn Visible="false" HeaderText="追踪考核案号">
<HeaderStyle HorizontalAlign="Center" Width="15%" ></HeaderStyle>
<ItemStyle HorizontalAlign="Center" Width="15%" ></ItemStyle>
<ItemTemplate>
<asp:Label Runat="server" id="dglblCASEID"
text='<%
#DataBinder.Eval(Container.DataItem,"CASEID")%>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
若我在text属性串上空白
text='<%#" " & DataBinder.Eval(Container.DataItem,"CASEID")%>'
则存入EXCEL时会变成 "?070090988000482"
而假使串上" "则会被EXCEL自动忽略掉而一样显示为科学符号
若是串上单引号,则页面显示为错误无法执行
个人猜测应该是单引号为保留字之类的原因
而且在转入的EXCEL档案中,把原始档打开
在长串数字前加上单引号如下
'070090988000482
在进入EXCEL时显示一样同上,但点选储存格两下之後则自动变为文字储存格式
※ 编辑: nickboy 来自: 61.67.153.180 (09/02 14:02)
已经解决,自问自答一下
感谢MOONRAKER大提供的意见,在文字前面加上空白
可能是text内的属性会自动把空白转成问号
我试着在页面原始档(.aspx)中的<asp:Label>之前加入空白如下
<asp:Label Runat="server" id="dglblCASEID"
text='<%
#DataBinder.Eval(Container.DataItem,"CASEID")%>'>
</asp:Label>
在存入EXCEL的时候就会自动变成文字储存格式了
在存入的EXCEL档中去检视原始档则会看到该栏位如下
</td><td class="td2c" align="Center" style="width:15%;">
<span id="dgRpt__ctl2_dglblCASEID">070090988000482</span>
</td>
所以存入EXCEL时不会自动移除开头的0以及自动转为科学符号
※ 编辑: nickboy 来自: 61.67.153.180 (09/02 14:36)
4F:推 MOONRAKER:推很详细…下次我还有机会写大概也会来看这篇 09/03 11:14
5F:→ MOONRAKER:我已经忘记以前怎麽绕过去的,只记得空白,不记得 09/03 11:15
6F:→ MOONRAKER:其实可能也不是这样解决的…总之再推。 09/03 11:15
7F:→ disc1002:原来单引号也可以这样用 之前用在手机号码前面可以保留0 09/03 16:06
8F:→ disc1002:谢版大提供资源^^ 09/03 16:06
9F:→ MOONRAKER:单引号那是从Lotus 123时期就有的设计 Excel学过来的 09/03 16:58
10F:→ MOONRAKER:Lotus使用'表示文字 "表示文字靠左对齐 ^文字置中对齐 09/03 16:59