作者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