web導(dǎo)出excel數(shù)據(jù)格式化
首先,我們了解一下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>
<table style='vnd.ms-excel.numberformat:#,##0.00'>
<td>542</td>
<td style='vnd.ms-excel.numberformat: #0.00%'>0.25</td>
</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è)的公司會遇到類似的問題,解決方法只是提供給大家一個思路,希望可以起到拋磚引玉的效果
excel常用的一些格式
2010-11-17 13:13
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%
Excel導(dǎo)出及數(shù)據(jù)格式化處理(摘)
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:@");//這里是將要導(dǎo)出到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) 數(shù)字:vnd.ms-excel.numberformat:#,##0.00
//4) 貨幣:vnd.ms-excel.numberformat:¥#,##0.00
//5) 百分比:vnd.ms-excel.numberformat: #0.00%
}
}
js 將table內(nèi)容導(dǎo)入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 控件”,您的瀏覽器須允許執(zhí)行控件。請點擊【幫助】了解瀏覽器設(shè)置方法!");
return "";
}
xls.visible =true; // 設(shè)置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="發(fā)卡記錄";
xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,3)).Interior.ColorIndex=5; // 設(shè)置底色為藍(lán)色
// xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,6)).Font.ColorIndex=4; // 設(shè)置字體色
// xlsheet.Rows(1). Interior .ColorIndex = 5 ;//設(shè)置底色為藍(lán)色 設(shè)置背景色 Rows(1).Font.ColorIndex=4
<!--設(shè)置行高-->
xlsheet.Rows(1).RowHeight = 25;
<!--設(shè)置字體 ws.Range(ws.Cells(i0+1,j0), ws.Cells(i0+1,j1)).Font.Size = 13 -->
xlsheet.Rows(1).Font.Size=14;
<!--設(shè)置字體 設(shè)置選定區(qū)的字體 xlsheet.Range(xlsheet.Cells(i0,j0), ws.Cells(i0,j0)).Font.Name = "黑體" -->
xlsheet.Rows(1).Font.Name="黑體";
<!--設(shè)置列寬 xlsheet.Columns(2)=14;-->
xlsheet.Columns("A:D").ColumnWidth =18;
<!--設(shè)置顯示字符而不是數(shù)字-->
xlsheet.Columns(2).NumberFormatLocal="@";
xlsheet.Columns(7).NumberFormatLocal="@";
//設(shè)置單元格內(nèi)容自動換行 range.WrapText = true ;
//設(shè)置單元格內(nèi)容水平對齊方式 range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//設(shè)置單元格內(nèi)容豎直堆砌方式
//range.VerticalAlignment=Excel.XlVAlign.xlVAlignCenter
//range.WrapText = true; xlsheet.Rows(3).WrapText=true 自動換行
//設(shè)置標(biāo)題欄
//xlsheet.Cells(2, 1).Value = "卡號";
//xlsheet.Cells(2, 2).Value = "密碼";
//xlsheet.Cells(2, 3).Value = "計費方式";
//xlsheet.Cells(2, 4).Value = "有效天數(shù)";
//xlsheet.Cells(2, 5).Value = "金額";
//xlsheet.Cells(2, 6).Value = "所屬服務(wù)項目";
//xlsheet.Cells(2, 7).Value = "發(fā)卡時間";
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; //設(shè)置左邊距
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(4).Weight = 2;//設(shè)置右邊距
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(1).Weight = 2;//設(shè)置頂邊距
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(2).Weight = 2;//設(shè)置底邊距
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>有效天數(shù)</td>
<td>金額</td>
<td>所屬服務(wù)項目</td>
<td>發(fā)卡時間</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 科菱財神 閱讀(3987) 評論(2) 編輯 收藏 所屬分類: JavaScript