web導出excel數據格式化
首先,我們了解一下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>
同樣,我們也可以給<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>
對,當我們在父標簽對和子標簽對都添加樣式時,數據會以哪一個樣式呈現呢?經過測試,會以離數據最近的 樣式呈現,這也是符合我們的意愿的(好像也符合一句俗話:縣官不如現管)。這樣我們就可以通過改變樣式而改變數據在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%
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 科菱財神 閱讀(3975) 評論(2) 編輯 收藏 所屬分類: JavaScript