pzxsheng

          有種相見不敢見的傷痛,有種愛還埋藏在心中

          web導出excel數據格式化

          原文地址:http://www.cnblogs.com/myaspnet/archive/2011/05/06/2038490.html


          當我們把web頁面上的數據導成excel形式時,有時候我們的數據需要以特定的格式呈現出來,這時候我們就需要給cell添加一些樣式規格信息。 


          首先,我們了解一下excel從web頁面上導出的原理。當我們把這些數據發送到客戶端時,我們想讓客戶端程序(瀏覽器)以excel的格式讀取它,所以把mime類型設為:application/vnd.ms-excel,當excel讀取文件時會以每個cell的格式呈現數據,如果cell沒有規定的格式,則excel會以默認的格式去呈現該cell的數據。這樣就給我們提供了自定義數據格式的空間,當然我們必須使用excel支持的格式。下面就列出常用的一些格式: 

          1)  文本:vnd.ms-excel.numberformat:@ 

          2)  日期:vnd.ms-excel.numberformat:yyyy/mm/dd 

          3)  數字:vnd.ms-excel.numberformat:#,##0.00 

          4)  貨幣:vnd.ms-excel.numberformat:¥#,##0.00 

          5)  百分比:vnd.ms-excel.numberformat: #0.00% 

          這些格式你也可以自定義,比如年月你可以定義為:yy-mm等等。那么知道了這些格式,怎么去把這些格式添加到cell中呢?很簡單,我們只需要把樣式添加到對應的標簽對(即閉合標簽)即可。如<td></td>,給標簽對<td></td>添加樣式,如下: 

          <td style="vnd.ms-excel.numberformat:@">410522198402161833</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>
          <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>


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

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

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

          excel常用的一些格式

          2010-11-17 13:13

          1) 文本:vnd.ms-excel.numberformat:@ 
          2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd 
          3) 數字:vnd.ms-excel.numberformat:#,##0.00 
          4) 貨幣:vnd.ms-excel.numberformat:¥#,##0.00 
          5) 百分比:vnd.ms-excel.numberformat: #0.00%

          Excel導出及數據格式化處理(摘)

                  public void ToExcel(System.Web.UI.Control ctl, string FileName)
                  {
                       HttpContext.Current.Response.Charset = "UTF-8";
                       HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;
                       HttpContext.Current.Response.ContentType = "application/ms-excel";
                       HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls");
                       ctl.Page.EnableViewState = false;
                       System.IO.StringWriter tw = new System.IO.StringWriter();
                       HtmlTextWriter hw = new HtmlTextWriter(tw);
                       ctl.RenderControl(hw);
                       HttpContext.Current.Response.Write(tw.ToString());
                       HttpContext.Current.Response.End();
                   }
                  public override void VerifyRenderingInServerForm(Control control)
                  {
                      //base.VerifyRenderingInServerForm(control);
                   }
                  protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
                  {
                      if (e.Row.RowType == DataControlRowType.DataRow)
                      {
                          //e.Row.Cells[0].Attributes.Add("style", "vnd.ms-excel.numberformat:@");//這里是將要導出到execl里的第一列格式化為字符類型。
                          //e.Row.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00");//這里是格式化為貨幣類型。
                           e.Row.Cells[4].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
                          //1) 文本:vnd.ms-excel.numberformat:@
                          //2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd
                          //3) 數字:vnd.ms-excel.numberformat:#,##0.00
                          //4) 貨幣:vnd.ms-excel.numberformat:¥#,##0.00
                          //5) 百分比:vnd.ms-excel.numberformat: #0.00%
                       }
                   }

           

          js 將table內容導入Excel

          <%@ page c %>
          <html>
          <head>
          <script language="javascript" type="text/javascript">
          function MakeExcel()
          {
           var i, j, n;
           try
           {
            var xls = new ActiveXObject("Excel.Application");
           }
           catch(e)
           { 
            alert( "要打印該表,您必須安裝Excel電子表格軟件,同時瀏覽器須使用“ActiveX 控件”,您的瀏覽器須允許執行控件。請點擊【幫助】了解瀏覽器設置方法!");
            return "";
           }
           xls.visible =true; // 設置excel為可見
           var xlBook = xls.Workbooks.Add;
           var xlsheet = xlBook.Worksheets(1);

          <!--合并-->
          xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).mergecells=true;
          xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).value="發卡記錄";
          xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,3)).Interior.ColorIndex=5; // 設置底色為藍色
          // xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,6)).Font.ColorIndex=4; // 設置字體色
          // xlsheet.Rows(1). Interior .ColorIndex = 5 ;//設置底色為藍色 設置背景色 Rows(1).Font.ColorIndex=4

          <!--設置行高-->
          xlsheet.Rows(1).RowHeight = 25;
          <!--設置字體 ws.Range(ws.Cells(i0+1,j0), ws.Cells(i0+1,j1)).Font.Size = 13 -->
          xlsheet.Rows(1).Font.Size=14;
          <!--設置字體 設置選定區的字體 xlsheet.Range(xlsheet.Cells(i0,j0), ws.Cells(i0,j0)).Font.Name = "黑體" -->
          xlsheet.Rows(1).Font.Name="黑體";
          <!--設置列寬 xlsheet.Columns(2)=14;-->
          xlsheet.Columns("A:D").ColumnWidth =18;
          <!--設置顯示字符而不是數字-->
          xlsheet.Columns(2).NumberFormatLocal="@";
          xlsheet.Columns(7).NumberFormatLocal="@";
          //設置單元格內容自動換行 range.WrapText = true ;
          //設置單元格內容水平對齊方式 range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//設置單元格內容豎直堆砌方式
          //range.VerticalAlignment=Excel.XlVAlign.xlVAlignCenter
          //range.WrapText = true; xlsheet.Rows(3).WrapText=true 自動換行
          //設置標題欄
          //xlsheet.Cells(2, 1).Value = "卡號";
          //xlsheet.Cells(2, 2).Value = "密碼";
          //xlsheet.Cells(2, 3).Value = "計費方式";
          //xlsheet.Cells(2, 4).Value = "有效天數";
          //xlsheet.Cells(2, 5).Value = "金額";
          //xlsheet.Cells(2, 6).Value = "所屬服務項目";
          //xlsheet.Cells(2, 7).Value = "發卡時間";
          var oTable = document.all['fors:data'];
          var rowNum = oTable.rows.length;
          for(i = 1; i <= rowNum; i++)
          {
           for (j = 1; j <= 7; j++)
           {
            //html table類容寫到excel
            xlsheet.Cells(i + 1, j).Value = oTable.rows(i - 1).cells(j - 1).innerHTML;
           }
          }
          <!-- xlsheet.Range(xls.Cells(i+4,2),xls.Cells(rowNum,4)).Merge; -->
          // xlsheet.Range(xlsheet.Cells(i, 4), xlsheet.Cells(i-1, 6)).BorderAround , 4
          // for(mn=1,mn<=6;mn++) . xlsheet.Range(xlsheet.Cells(1, mn), xlsheet.Cells(i1, j)).Columns.AutoFit;
          xlsheet.Columns.AutoFit;
          xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(rowNum+1,7)).HorizontalAlignment =-4108;//居中
          xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(1,7)).VerticalAlignment =-4108;
          xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Font.Size=10;
          xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(3).Weight = 2; //設置左邊距
          xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(4).Weight = 2;//設置右邊距
          xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(1).Weight = 2;//設置頂邊距
          xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(2).Weight = 2;//設置底邊距
          xls.UserControl = true; //很重要,不能省略,不然會出問題 意思是excel交由用戶控制
          xls=null;
          xlBook=null;
          xlsheet=null;
          }
          </script>
          </head>
          <body>

          <input type="button" name="fors:_id7" value="生成excel文件" onclick=MakeExcel() />

          <table id="fors:data" border="1" cellpadding="0" cellspacing="1" width="100%">
          <tr>
          <td>卡號</td>
          <td>密碼</td>
          <td>計費方式</td>
          <td>有效天數</td>
          <td>金額</td>
          <td>所屬服務項目</td>
          <td>發卡時間</td>
          </tr>
          <tr>
          <td>h000010010</td>
          <td>543860</td>
          <td>計點</td>
          <td>1 </td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010011</td>
          <td>683352</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010012</td>
          <td>433215</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010013</td>
          <td>393899</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010014</td>
          <td>031736</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010015</td>
          <td>188600</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010016</td>
          <td>363407</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010017</td>
          <td>175315</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010018</td>
          <td>354437</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          <tr>
          <td>h000010019</td>
          <td>234750</td>
          <td>計點</td>
          <td>1</td>
          <td>2.0</td>
          <td>測試項目</td>
          <td>2006-06-23 10:14:40.843</td>
          </tr>
          </table>
          </body>
          </html>

          posted on 2012-08-30 15:57 科菱財神 閱讀(3986) 評論(2)  編輯  收藏 所屬分類: JavaScript

          評論

          # re: web導出excel數據格式化 2014-01-27 15:24 8y8

          斤斤計較  回復  更多評論   

          # re: web導出excel數據格式化[未登錄] 2016-07-20 15:54 111

          111  回復  更多評論   


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


          網站導航:
           

          導航

          <2016年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 东丽区| 革吉县| 东平县| 克什克腾旗| 龙泉市| 灵宝市| 中卫市| 朔州市| 木兰县| 阳春市| 昭苏县| 延庆县| 汉寿县| 保靖县| 永州市| 平远县| 怀化市| 十堰市| 红河县| 兴文县| 珠海市| 五原县| 北安市| 安国市| 喀什市| 石阡县| 萝北县| 阳春市| 万全县| 西和县| 金溪县| 天柱县| 肇源县| 珠海市| 嘉义市| 深泽县| 新密市| 天门市| 郑州市| 惠东县| 许昌县|