天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

頁面導(dǎo)出為Excel的時(shí)間格式的問題

現(xiàn)象:
是這樣的,公司的一個(gè)系統(tǒng),新增加一個(gè)新的功能,在頁面生成報(bào)表時(shí)允許用戶選擇他prefer的時(shí)間格式,有下面四種時(shí)間格式可供選擇:
Default Option: yyyy-mm-dd
Descriptive (1-Jan-07)
Short Date: mm/dd/yy
Short Date: dd/mm/yy
另外,用戶可以選擇報(bào)表是頁面形式還是導(dǎo)出為Excel文件。原有的處理在頁面上顯示時(shí)間格式?jīng)]有任何問題,但是昨天發(fā)現(xiàn),如果導(dǎo)出Excel,那么時(shí)間格式就出錯(cuò)了:(
原因:
經(jīng)過這半天的摸索,終于有了一些頭緒,下面首先貼出我搜到的關(guān)于這方面的資料:
---------------------------偶就是傳說中華麗的分割線啦拉拉~~~----------------------------
當(dāng)我們把web頁面上的數(shù)據(jù)導(dǎo)成excel形式時(shí),有時(shí)候我們的數(shù)據(jù)需要以特定的格式呈現(xiàn)出來,這時(shí)候我們就需要給cell添加一些樣式規(guī)格信息。
首先,我們了解一下excel從web頁面上導(dǎo)出的原理。當(dāng)我們把這些數(shù)據(jù)發(fā)送到客戶端時(shí),我們想讓客戶端程序(瀏覽器)以excel的格式讀取它,所以把 mime類型設(shè)為:application/vnd.ms-excel,當(dāng)excel讀取文件時(shí)會(huì)以每個(gè)cell的格式呈現(xiàn)數(shù)據(jù),如果cell沒有規(guī)定的格式,則excel會(huì)以默認(rèn)的格式去呈現(xiàn)該cell的數(shù)據(jù)。這樣就給我們提供了自定義數(shù)據(jù)格式的空間,當(dāng)然我們必須使用excel支持的格式。下面就列出常用的一些格式:
1) 文本:vnd.ms-excel.numberformat:@
2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd
3) 數(shù)字:vnd.ms-excel.numberformat:#,##0.00
4) 貨幣:vnd.ms-excel.numberformat:¥#,##0.00
5) 百分比:vnd.ms-excel.numberformat: #0.00%
這些格式你也可以自定義,比如年月你可以定義為:yy-mm等等。那么知道了這些格式,怎么去把這些格式添加到cell中呢?很簡(jiǎn)單,我們只需要把樣式添加到對(duì)應(yīng)的標(biāo)簽對(duì)(即閉合標(biāo)簽)即可。如<td></td>,給標(biāo)簽對(duì)<td></td>添加樣式,如下:
<td style="vnd.ms-excel.numberformat:@">410522198402161833</td>
同樣,我們也可以給<div></div>添加樣式,也可以給<tr></tr>,<table></table>添加樣式,這樣就會(huì)引入一個(gè)問題,你注意到了嗎?先看如下的代碼:
<table style='vnd.ms-excel.numberformat:#,##0.00'>
<tr>
<td>542</td>
<td style='vnd.ms-excel.numberformat: #0.00%'>0.25</td>
</tr>
</table>
對(duì),當(dāng)我們?cè)诟笜?biāo)簽對(duì)和子標(biāo)簽對(duì)都添加樣式時(shí),數(shù)據(jù)會(huì)以哪一個(gè)樣式呈現(xiàn)呢?經(jīng)過測(cè)試,會(huì)以離數(shù)據(jù)最近的樣式呈現(xiàn),這也是符合我們的意愿的(好像也符合一句俗話:縣官不如現(xiàn)管)。這樣我們就可以通過改變樣式而改變數(shù)據(jù)在excel中呈現(xiàn)的方式(這些樣式規(guī)格你可以在前臺(tái)頁面上添加也可以在后臺(tái)代碼里給相應(yīng)的控件如:DataGrid等添加這些樣式)。如果你的應(yīng)用比較簡(jiǎn)單,那么這已經(jīng)足夠滿足你的需求。但如果你的應(yīng)用比較復(fù)雜,那么你也可以采取一種方式來達(dá)到不同的數(shù)據(jù)呈現(xiàn)效果。下面,我就舉一個(gè)稍微復(fù)雜一點(diǎn)的應(yīng)用
例如:你的數(shù)據(jù)要呈現(xiàn)給不同國(guó)家和地區(qū)的用戶查看,這樣數(shù)據(jù)的呈現(xiàn)的格式就會(huì)不一樣,那么我們?cè)趺唇鉀Q這個(gè)問題呢?當(dāng)然了,你可以手工把這些數(shù)據(jù)處理好,但這畢竟不是最好的方法,因?yàn)槿绻覀兠吭黾右粋€(gè)其他國(guó)家或地區(qū)的用戶,那么我們就需要把所有的數(shù)據(jù)以客戶要求的格式處理一遍,當(dāng)數(shù)據(jù)量很大時(shí),這無疑是一件很沉重且無聊的工作。那么我們究竟應(yīng)該怎樣解決類似這樣的問題呢?下面我說一下,我自己的看法:把這些格式化的信息抽取到一個(gè)xml文件中,程序運(yùn)行時(shí)根據(jù)不同的客戶讀取不同的格式化信息,然后把這些格式化信息動(dòng)態(tài)的添加到我們的數(shù)據(jù)上,這樣,當(dāng)我們每增加一個(gè)其他國(guó)家或地區(qū)的用戶時(shí),我們只需要多增加一個(gè)xml文件,把對(duì)應(yīng)的格式化信息寫入這個(gè)xml文件,然后當(dāng)這個(gè)國(guó)家或地區(qū)的用戶查看時(shí),就把對(duì)應(yīng)的格式化信息讀取出來應(yīng)用到數(shù)據(jù)上即可。
以上這個(gè)例子是我突然想到的,相信跨國(guó)企業(yè)的公司會(huì)遇到類似的問題,解決方法只是提供給大家一個(gè)思路,希望可以起到拋磚引玉的效果。
DataGrid:
ASP.NET WebForm中DataGrid導(dǎo)出的時(shí)候,在ItemDataBound內(nèi)
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@");
}
如果在WinForm內(nèi)則可以
Excel.Range range = (Excel.Range)worksheet.Cells[1,1];
range.NumberFormat = Excel.XlParameterDataType.xlParamTypeUnknown;
VB:
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
e.Item.Cells(1).Attributes.Add("style", "vnd.ms-excel.numberformat:@")
End If
如果是Label,則在<td>的style中加上:
<td style="height: 22px; vnd.ms-excel.numberformat:@" bgcolor="#eff3fb">
<ASP:Label ID="Label2" runat="server" Text="Label"></ASP:Label></td>
如果是Gridview,(07.12.13 Update)
則需要在后臺(tái)打印click事件代碼中加兩句話:
// More Codes
string style = @"<style> .text { mso-number-format:/@; } </script> ";
Response.Write(style);
Response.Output.Write(oStringWriter.ToString());
---------------------------------------------------------------
下面開始說我處理這個(gè)問題的過程:
首先,根據(jù)上面那篇文章中說的那樣,在<td></td>標(biāo)簽上加上style屬性,并根據(jù)用戶選擇的時(shí)間格式設(shè)定:
<TD VALIGN=TOP style="vnd.ms-excel.numberformat:<%=DateFormat%>">...</td>
然后開始測(cè)試,結(jié)果前三種時(shí)間格式都沒問題,最后一個(gè):dd/mm/yy,有的時(shí)間正確的,有的是錯(cuò)誤的,錯(cuò)誤的時(shí)間均為dd>12的那些。為什么會(huì)這樣呢,經(jīng)過反復(fù)的測(cè)試琢磨,最后終于弄清楚了:原來,在我們使用導(dǎo)出數(shù)據(jù)到Excel中去時(shí),Excel會(huì)從中作梗!不只是這樣,我們可以試著在Excel中輸入時(shí)間,不管你輸入的是什么格式,它都會(huì)把這個(gè)時(shí)間強(qiáng)行轉(zhuǎn)化為 mm/dd/yyyy 格式。我傳過去的日期(例如:30/10/08)到它那邊,它就傻了,因?yàn)樗徽J(rèn)識(shí)了,然后在cell里顯示時(shí),就老老實(shí)實(shí)地顯示為30/10/08,也算歪打正著吧(其實(shí)是錯(cuò)的)。但是如果是 1/10/08 (這個(gè)是我已經(jīng)轉(zhuǎn)換好的 dd/mm/yy 格式)呢?它可不管,認(rèn)為這個(gè)(1/10/08)是 mm/dd/yy 格式的,不管三七二十一,轉(zhuǎn)換為 1/10/2008,注意,這個(gè)( 1/10/2008)的意思是 2008年1月10日,已經(jīng)完全背離了我的意愿了:(
忘了說一個(gè)東西了,我們從數(shù)據(jù)庫(kù)中取出日期數(shù)據(jù)時(shí),會(huì)根據(jù)用戶選擇的格式(上面列出的4種格式)來進(jìn)行format。這時(shí)我想到一個(gè)trick,就是如果用戶選擇的是dd/mm/yy這種格式,我先不把date格式化為 dd/mm/yy,而是mm/dd/yy,這樣數(shù)據(jù)到達(dá)Excel時(shí)它就可以分辨出來了,同時(shí),由于我指定了<td>的 style 屬性,excle會(huì)嚴(yán)格地按照那種格式來進(jìn)行顯示(不管Excel上顯示的時(shí)間格式是什么樣的,當(dāng)你編輯時(shí)間是,你會(huì)看到,你可以編輯的格式永遠(yuǎn)是 mm/dd/yyyy)。
至此,問題圓滿得到解決。

AspNet技術(shù)頁面導(dǎo)出為Excel的時(shí)間格式的問題,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 伊人精品影院 | 国产精品99精品无码视亚 | 国产精品久久久久久亚洲毛片 | 99精品久久精品一区二区 | 日本久久久WWW成人免费毛片丨 | 麻豆高潮AV久久久久久久 | 美美哒免费影视8 | 中文字幕亚洲第一 | 国精产品砖一区二区三区糖心 | 久久精品一区二区影院 | 麻豆精品传媒卡一卡二传媒短视频 | 国产99久9在线 | 天天躁日日躁狠狠躁中文字幕老牛 | 久久青草免费线观最新 | 国产亚洲AV精品无码麻豆 | videosgrati欧美另类 | 久久99AV无色码人妻蜜柚 | 亚洲日韩中文字幕日本有码 | 试看做受120秒免费午夜剧场 | 久久久久99精品成人片三人毛片 | 韩国和日本免费不卡在线 | 国产性夜夜性夜夜爽91 | 国产亚洲精品成人AV久久 | 伊人影院2019| 嘟嘟嘟在线视频免费观看高清中文 | 亚洲欧美精品无码一区二在线 | 亚洲AV无码专区国产精品99 | 365电影成人亚洲网在线观看 | 欧美人妖12p | 2019中文字幕乱码免费 | 国产精品青草久久福利不卡 | 久久精品电影网 | 国产自产第一区c国产 | 老熟人老女人国产老太 | 日日操夜夜操天天操 | 97在线视频免费人妻 | 亚洲中文字幕欧美自拍一区 | 高清日本片免费观看 | 菠萝菠萝蜜在线观看视频 | 久久vs国产综合色 | 丰满的女朋友韩国版在线观看 |