[.NET] datagrid存入EXCEL問題
小弟使用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
→
09/02 07:14, , 1F
09/02 07:14, 1F
→
09/02 09:41, , 2F
09/02 09:41, 2F
→
09/02 09:58, , 3F
09/02 09:58, 3F
補充說明一下
我的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)
推
09/03 11:14, , 4F
09/03 11:14, 4F
→
09/03 11:15, , 5F
09/03 11:15, 5F
→
09/03 11:15, , 6F
09/03 11:15, 6F
→
09/03 16:06, , 7F
09/03 16:06, 7F
→
09/03 16:06, , 8F
09/03 16:06, 8F
→
09/03 16:58, , 9F
09/03 16:58, 9F
→
09/03 16:59, , 10F
09/03 16:59, 10F