Ext4.1.1a实现Excel导出
做应用时我们总会遇到这样的问题既导出Excel表格。如果前台我们使用Ext我们该如何做呢?首先实现Excel导出有这么两类:
1.后台生成
2.前台直接打印
本文就第二类来谈一谈Ext4.1.1的具体实现思路:
1.遍历gridPanel的store取的每一行每一列的数据
2.将数据用xml格式包装成字符串(例如:
3.将字符串转换为Base64编码(假设存入变量base64Code)
4.拼凑url,var url='data:application/vnd.ms-excel;base64,'+base64Code
5.通过执行window.location = url完成下载;
通过以上思路完成了Exporter2Excel-all.js封装好了大部分功能,运行效果如图:
Exporter2Excel-all.js介绍与用法:
功能:通过ExtJs导出gridPanel当前页面的内容。
支持的浏览器:360极速浏览器,谷歌浏览器
用法(首先要导入Exporter2Excel-all.js):
通过创建button增加事件处理函数:
function() {
var url = getExcelUrl.getExcelUrl(grid, "meng");
window.location = url;
}
完成Excel导出。
例如:
var menuPanel = Ext.create("Ext.panel.Panel", {
region :'south',
title :' ',
width : 1000,
buttons : [{
width : 250,
xtype :'button',
text : '打印',
handler :function() {
var url = getExcelUrl.getExcelUrl(grid, "meng");
window.location = url;
}
}]
});
当“打印”按钮被点击时就会触发事件处理函数,从而完成下载。
Exporter2Excel-all.js内容如下:
var getExcelUrl = (function() {
//Base64编码转换函数,用法Base64.encode(string)
var Base64 = (function() {
// private property
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// private method for UTF-8 encoding
function utf8Encode(string) {
string = string.replace(/\r\n/g, "\n");
var utftext = "";
for (var n = 0; n var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } elseif ((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } // public method for encoding return { // This was the original line, which tries to use Firefox's built in // Base64 encoder, but this kept throwing exceptions.... // encode : (typeofbtoa == 'function') ? function(input) { return // btoa(input); } : function (input) { encode :function(input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = utf8Encode(input); while (i chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } elseif (isNaN(chr3)) { enc4 = 64; } output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4); } return output; } }; })(); var getType = (function() { return { getType :function(value) { var type = Ext.type(value); var result = ""; switch (type) { case"number" : result = "Number"; break; case"int" : result = "Number"; break; case"float" : result = "Number"; break; case"bool" : case"boolean" : result = "String"; break; case"date" : result = "DateTime"; break; default : result = "String"; break; } return result; } }; })(); var getClass = (function() { return { getClass :function(value) { var type = Ext.type(value); var result = ""; switch (type) { case"number" : result = "float"; break; case"int" : result = "int"; break; case"float" : result = "float"; break; case"bool" : case"boolean" : result = ""; break; case"date" : result = "date"; break; default : result = ""; break; } return result; } }; })(); var storeToXml = (function() { return { storeToXml :function(gird, title) { var store = gird.store; var count = store.getCount(); var columns = grid.columns; var temp = ' var headerXml = ' ss:MergeAcross="' + (columns.length - 1) + '">' + ' + title + '' + ' + ''; temp += ' + ' + ''; temp += ' for (var k = 0; k temp += ' temp += columns[k].text; temp += ''; } temp += ''; for (var i = 0; i< count; i++) { var cellClass = (i& 1) ? 'odd' : 'even'; var model = store.getAt(i); var fields = model.fields; temp += ' for (var j = 0; j var name = columns[j].dataIndex; var value = model.get(name); temp += ' + getClass.getClass(value) + '"> + getType.getType(value) + '">'; if (getType.getType(value) == 'DateTime') { var date = Ext.util.Format.date(value, 'Y-m-d'); temp += date; } else { temp += value; } temp += ''; } temp += ''; } temp += ''; temp += ''; var main = ' + ' xmlns:o="urn:schemas-microsoft-com:office:office">' + ' + 'title111111111111111111111' + '' + ' + ' + 100 + '' + ' + 500 + '' + ' + ' + '' + ' + ' + ' />' + ' + ' + ' ss:LineStyle="Continuous" ss:Position="Top" />' + ' ss:LineStyle="Continuous" ss:Position="Bottom" />' + ' ss:LineStyle="Continuous" ss:Position="Left" />' + ' ss:LineStyle="Continuous" ss:Position="Right" />' + '' + ' + ' + ' + '' + ' + ' + ' + ' + ' + '' + ' + ' + ' ss:Horizontal="Center" />' + ' + '' + ' + ' + '' + ' + ' + '' + ' + ' + '' + ' + ' + '' + ' + ' + '' + ' + ' + '' + ' + ' + ' + ' + '' + '' + temp + ''; return main; } }; })(); return { getExcelUrl :function(inputGrid, inputTitle) { var content = storeToXml.storeToXml(inputGrid, inputTitle); var url = 'data:application/vnd.ms-excel;base64,' + Base64.encode(content); return url; } }; })(); 1.package https://www.wendangku.net/doc/f5820208.html,mon.utils; 2.import java.io.OutputStream; 3.import java.util.List; 4.import javax.servlet.http.HttpServletResponse; 5.import org.apache.struts2.ServletActionContext; 6.import https://www.wendangku.net/doc/f5820208.html,ng.reflect.Field; 7. 8.import jxl.Workbook; 9.import jxl.format.Alignment; 10.import jxl.format.Border; 11.import jxl.format.BorderLineStyle; 12.import jxl.format.VerticalAlignment; 13.import https://www.wendangku.net/doc/f5820208.html,bel; 14.import jxl.write.WritableCellFormat; 15.import jxl.write.WritableFont; 16.import jxl.write.WritableSheet; 17.import jxl.write.WritableWorkbook; 18./*** 19. * @author lsf 20. */ 21.public class ExportExcel { 22./*************************************************************************** 23. * @param fileName EXCEL文件名称 24. * @param listTitle EXCEL文件第一行列标题集合 25. * @param listContent EXCEL文件正文数据集合 26. * @return 27. */ 28.public final static String exportExcel(String fileName,String[] Title, List 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); string colHeaders= "", ls_item=""; int i=0; //定义表对象与行对像,同时用DataSet对其值进行初始化 DataTable dt=ds.Tables[0]; DataRow[] myRow=dt.Select(""); // typeid=="1"时导出为EXCEL格式文件;typeid=="2"时导出为XML格式文件if(typeid=="1") { //取得数据表各列标题,各标题之间以\t分割,最后一个列标题后加回车符for(i=0;i colHeaders+=dt.Columns[i].Caption.ToString()+"\t"; colHeaders +=dt.Columns[i].Caption.ToString() +"\n"; //向HTTP输出流中写入取得的数据信息 resp.Write(colHeaders); //逐行处理数据 foreach(DataRow row in myRow) { //在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n for(i=0;i ls_item +=row[i].ToString() + "\t"; ls_item += row[i].ToString() +"\n"; //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据 resp.Write(ls_item); ls_item=""; } } else { if(typeid=="2") { //从DataSet中直接导出XML数据并且写到HTTP输出流中 resp.Write(ds.GetXml()); } } //写缓冲区中的数据到HTTP头文件中 resp.End(); } using System; using System.Collections.Generic; using https://www.wendangku.net/doc/f5820208.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; using System.IO; namespace ExcelTest { public partial class frmMain : Form { public frmMain() { InitializeComponent(); } string[] ExcelColumTitle ={ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; int[] ExcelColumWidth ={10,15,15,12,12,12,20 };//各列宽度 private void btnOk_Click(object sender, EventArgs e) { this.Enabled = false; Excel.Application excelKccx = new Excel.Application();//创建excel对象 excelKccx.Workbooks.Add(true);//创建excel工作薄 int row = 2; //把数据表的各个信息输入到excel表中 for (int i = 0; i < dataGridView1.Columns.Count; i++)//取字段名 { excelKccx.Cells[1, i + 1] = dataGridView1.Columns[i].Name.ToString(); } for (int i = 0; i < dataGridView1.Rows.Count; i++)//取记录值 { for (int j = 0; j < dataGridView1.Columns.Count; j++) { excelKccx.Cells[row, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString(); } row++; } for (int i = 0; i < dataGridView1.Columns.Count; i++) { excelKccx.get_Range(ExcelColumTitle[i]+(i+1), Type.Missing).ColumnWidth =ExcelColumWidth[i] ; //宽度设置 } for (int i = 0; i <= dataGridView1.Rows.Count; i++) { excelKccx.get_Range("A" + (i + 1), Type.Missing).RowHeight = 14.25; //高度设置 } excelKccx.Visible = true;//使excel可见*/ } private void frmMain_Load(object sender, EventArgs e) { List DataGirdμ?3?EXCELμ?????·?·¨£¨WebControl£? using System; using System.Data; using System.Text; using System.Web; using System.Web.UI; using System.Diagnostics; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Data.SqlClient; using System.Collections; namespace bookstore { /// html导出excel的方法(简单) 在html实现打印和导出excel的实现: 2006/11/05 01:54 P.M. 在所要打印和导如的EXCES的table 加个如 id = "PrintA" 在打印按纽上注册监听如:onclick="javascript:AllAreaWord(); 在加上如下内容:
excel导入导出通用方法
.NET页面数据导出excel表方法
C# 导出Excel 表
DataGrid导出EXCEL的几个方法(WebControl)
html导出excel的方法(简单)