Hopes

          Start Here..

           

          web導(dǎo)出excel格式問題 、、、如何讓導(dǎo)出到Excel的數(shù)字不按科學(xué)計數(shù)顯示。。

          1  web導(dǎo)出excel格式問題 


          當(dāng)我們把web頁面上的數(shù)據(jù)導(dǎo)成excel形式時,有時候我們的數(shù)據(jù)需要以特定的格式呈現(xiàn)出來,這時候我們就需要給cell添加一些樣式規(guī)格信息。

          首先,我們了解一下excel從web頁面上導(dǎo)出的原理。當(dāng)我們把這些數(shù)據(jù)發(fā)送到客戶端時,我們想讓客戶端程序(瀏覽器)以excel的格式讀取它,所以把mime類型設(shè)為:application/vnd.ms-excel,當(dāng)excel讀取文件時會以每個cell的格式呈現(xiàn)數(shù)據(jù),如果cell沒有規(guī)定的格式,則excel會以默認(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中呢?很簡單,我們只需要把樣式添加到對應(yīng)的標(biāo)簽對(即閉合標(biāo)簽)即可。如<td></td>,給標(biāo)簽對<td></td>添加樣式,如下:

          <td style="vnd.ms-excel.numberformat:@">410522198402161833</td>


          同樣,我們也可以給<div></div>添加樣式,也可以給<tr></tr>,<table></table>添加樣式,這樣就會引入一個問題,你注意到了嗎?先看如下的代碼:

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



          對,當(dāng)我們在父標(biāo)簽對和子標(biāo)簽對都添加樣式時,數(shù)據(jù)會以哪一個樣式呈現(xiàn)呢?經(jīng)過測試,會以離數(shù)據(jù)最近的樣式呈現(xiàn),這也是符合我們的意愿的(好像也符合一句俗話:縣官不如現(xiàn)管)。這樣我們就可以通過改變樣式而改變數(shù)據(jù)在excel中呈現(xiàn)的方式(這些樣式規(guī)格你可以在前臺頁面上添加也可以在后臺代碼里給相應(yīng)的控件如:DataGrid等添加這些樣式)。如果你的應(yīng)用比較簡單,那么這已經(jīng)足夠滿足你的需求。但如果你的應(yīng)用比較復(fù)雜,那么你也可以采取一種方式來達(dá)到不同的數(shù)據(jù)呈現(xiàn)效果。下面,我就舉一個稍微復(fù)雜一點的應(yīng)用。

          例如:你的數(shù)據(jù)要呈現(xiàn)給不同國家和地區(qū)的用戶查看,這樣數(shù)據(jù)的呈現(xiàn)的格式就會不一樣,那么我們怎么解決這個問題呢?當(dāng)然了,你可以手工把這些數(shù)據(jù)處理好,但這畢竟不是最好的方法,因為如果我們每增加一個其他國家或地區(qū)的用戶,那么我們就需要把所有的數(shù)據(jù)以客戶要求的格式處理一遍,當(dāng)數(shù)據(jù)量很大時,這無疑是一件很沉重且無聊的工作。那么我們究竟應(yīng)該怎樣解決類似這樣的問題呢?下面我說一下,我自己的看法:把這些格式化的信息抽取到一個xml文件中,程序運行時根據(jù)不同的客戶讀取不同的格式化信息,然后把這些格式化信息動態(tài)的添加到我們的數(shù)據(jù)上,這樣,當(dāng)我們每增加一個其他國家或地區(qū)的用戶時,我們只需要多增加一個xml文件,把對應(yīng)的格式化信息寫入這個xml文件,然后當(dāng)這個國家或地區(qū)的用戶查看時,就把對應(yīng)的格式化信息讀取出來應(yīng)用到數(shù)據(jù)上即可。

          以上這個例子是我突然想到的,相信跨國企業(yè)的公司會遇到類似的問題,解決方法只是提供給大家一個思路,希望可以起到拋磚引玉的效果。

          DataGrid:
          Asp.Net WebForm中DataGrid導(dǎo)出的時候,在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)
          則需要在后臺打印click事件代碼中加兩句話:

          // More Codes


          string style = @"<style> .text { mso-number-format:\@; } </script> ";

          Response.Write(style);

          Response.Output.Write(oStringWriter.ToString());





          2  導(dǎo)出EXCEL表格不顯示科學(xué)計數(shù)法 

          public void CreateExcel(DataSet ds,string typeid,string FileName)
          {
          HttpResponse resp;
          resp = Page.Response;
          resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
          resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
          resp.Charset ="UTF-8";
          //HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;
          resp.ContentType ="application/ms-excel";//image/JPEG;text/HTML;image/GIF;vnd.ms-excel
          string colHeaders= "", ls_item="";
          int i=0;

          //定義表對象與行對像,同時用DataSet對其值進(jìn)行初始化
          DataTable dt=ds.Tables[0];
          DataRow[] myRow=dt.Select("");
          // typeid=="1"時導(dǎo)出為EXCEL格式文件;typeid=="2"時導(dǎo)出為XML格式文件
          if(typeid=="1")
          {

          //取得數(shù)據(jù)表各列標(biāo)題,各標(biāo)題之間以\t分割,最后一個列標(biāo)題后加回車符
          colHeaders += "<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\"> <tr style=\"font-weight: bold; white-space: nowrap;\">";
          for(i=0;i<dt.Columns.Count-1;i++)
          //colHeaders+=dt.Columns[i].Caption.ToString()+"\t";
          colHeaders += "<td>"+dt.Columns[i].Caption.ToString() + "</td>";
          //colHeaders +=dt.Columns[i].Caption.ToString() +"\n";
          colHeaders += "<td>"+dt.Columns[i].Caption.ToString() + "</td></tr>";
          //向HTTP輸出流中寫入取得的數(shù)據(jù)信息
          resp.Write(colHeaders);
          //逐行處理數(shù)據(jù)
          foreach(DataRow row in myRow)
          {
          ls_item += "<tr>";
          //在當(dāng)前行中,逐列獲得數(shù)據(jù),數(shù)據(jù)之間以\t分割,結(jié)束時加回車符\n
          for(i=0;i<dt.Columns.Count-1;i++)
          //ls_item +=row[i].ToString().Replace("\t","") + "\t";
          ls_item +="<td style=\"vnd.ms-excel.numberformat:@\">"+ row[i].ToString().Replace("\t", "") + "</td>";
          ls_item += "<td>"+row[i].ToString().Replace("\t","") +"</td></tr>";
          //當(dāng)前行數(shù)據(jù)寫入HTTP輸出流,并且置空ls_item以便下行數(shù)據(jù)
          resp.Write(ls_item);
          ls_item="";
          }
          }
          else
          {
          if(typeid=="2")
          {
          //從DataSet中直接導(dǎo)出XML數(shù)據(jù)并且寫到HTTP輸出流中
          resp.Write(ds.GetXml());
          }
          }
          //寫緩沖區(qū)中的數(shù)據(jù)到HTTP頭文件中
          resp.End();
          }



          3 加個引號



          4 通過CSS

          .txt {
          padding-top:1px;
          padding-right:1px;
          padding-left:1px;
          mso-ignore:padding;
          color:black;
          font-size:11.0pt;
          font-weight:400;
          font-style:normal;
          text-decoration:none;
          font-family:宋體;
          mso-generic-font-family:auto;
          mso-font-charset:134;
          mso-number-format:"\@";
          text-align:general;
          vertical-align:middle;
          mso-background-source:auto;
          mso-pattern:auto;
          white-space:nowrap;
          }




          posted on 2012-09-13 18:47 ** 閱讀(2717) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學(xué)習(xí)

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 奉新县| 特克斯县| 新闻| 成武县| 南岸区| 沈阳市| 秦安县| 克拉玛依市| 镇巴县| 拉孜县| 麻阳| 吉木萨尔县| 鸡西市| 库伦旗| 柏乡县| 长白| 吴旗县| 来凤县| 三明市| 双城市| 武山县| 宜宾县| 磴口县| 大足县| 上犹县| 罗平县| 永和县| 郴州市| 苏尼特右旗| 丰宁| 禹州市| 平罗县| 辽源市| 浪卡子县| 浠水县| 定西市| 新营市| 靖江市| 定远县| 博兴县| 漯河市|