Flex导入EXCEL并在页面显示
2011-12-13 14:45
281 查看
个人觉得做这个功能最重要的就是在哪里解析EXCEL
本来想着偷懒就在FLEX端解析算了,可是整了一早上实在整不下去了,至于原因,懒的说了。
下午就实行了第二套解决方案,
首先:在FLEX端加载EXCEL文件转换为BYTE数组代码如下:
这是上传的例子,接着把byte数组传给java端,先转换为输入流再利用POI解析EXCEL后封装数据,最后传递给FLEX端
代码如下:
POI解析EXCEL的详细列子:
JXL解析例子:
其实我当时最开始使用的是JXL解析方式,可是把flex端的字节数组转换为输入流再丢给jxl的工作簿时得不到该对象,挺郁闷的,也不知道到底是什么原因。先丢其一边。
本文出自 “技术积累” 博客,请务必保留此出处http://jiarong.blog.51cto.com/3398433/740819
本来想着偷懒就在FLEX端解析算了,可是整了一早上实在整不下去了,至于原因,懒的说了。
下午就实行了第二套解决方案,
首先:在FLEX端加载EXCEL文件转换为BYTE数组代码如下:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" currentState="pre_upload" creationComplete="init()"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Script> <![CDATA[ //import mx.events.ImageUploadedEvent; import flash.events.Event; import flash.net.FileFilter; import flash.net.FileReference; import mx.controls.Alert; import mx.managers.PopUpManager; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; import mx.rpc.remoting.mxml.RemoteObject; private var fileRef:FileReference = new FileReference(); private var upload:RemoteObject = new RemoteObject(); private function init():void{ upload.destination="UploadFile"; } private function pickFile(evt:MouseEvent):void { var imageTypes:FileFilter = new FileFilter("图片 (*.jpg, *.jpeg, *.gif,*.png)", "*.jpg; *.jpeg; *.gif; *.png"); var allTypes:Array = new Array(imageTypes); fileRef.addEventListener(Event.SELECT, selectHandler); fileRef.addEventListener(ProgressEvent.PROGRESS, progressHandler); fileRef.addEventListener(Event.COMPLETE, completeHandler); try{ fileRef.browse(allTypes); }catch (error:Error){ trace("Unable to browse for files."+error.toString()); } } private function progressHandler(evt:ProgressEvent):void { lb_progress.text = " 已上传 " + (evt.bytesLoaded/1024).toFixed(2)+ " K,共 " + (evt.bytesTotal/1024).toFixed(2) + " K"; var proc: uint = evt.bytesLoaded / evt.bytesTotal * 100; progress.setProgress(proc, 100); progress.label= "当前进度: " + " " + proc + "%"; } private function selectHandler(evt:Event):void { currentState = "uploading"; fileRef.load(); } private function completeHandler(evt:Event):void{ currentState = "post_upload"; upload.uploadFile(fileRef.data,fileRef.name); image_post_upload.source = fileRef.data; } ]]> </fx:Script> <s:states> <s:State name = "pre_upload"/> <s:State name = "uploading"/> <s:State name = "post_upload"/> </s:states> <s:Button includeIn="pre_upload" label="从电脑上上传图片" width="119" click="pickFile(event)" horizontalCenter="-1" y="29"/> <mx:ProgressBar id="progress" includeIn="uploading" x="43" y="43" width="153"/> <s:Label id="lb_progress" includeIn="uploading" x="45" y="10" width="149" height="25"/> <s:Label id="lb_post_upload" includeIn="post_upload" x="108" y="21" width="124" height="32" fontSize="16" text="upload success!" fontFamily="Arial" color="#3374DE"/> <mx:Image id="image_post_upload" includeIn="post_upload" x="10" y="10" width="67" height="67"/> </s:Application>
这是上传的例子,接着把byte数组传给java端,先转换为输入流再利用POI解析EXCEL后封装数据,最后传递给FLEX端
代码如下:
InputStream by=new ByteArrayInputStream("FLEX端传递过来的字节数组"); //初始整个Excel HSSFWorkbook workbook; try { workbook = new HSSFWorkbook(by); //获取第一个Sheet表 HSSFSheet sheet = workbook.getSheetAt(0);//或者 HSSFSheet sheet = workbook.getSheet("Sheet1"); int total = sheet.getLastRowNum(); //获取第一行 for(int i=0;i<total;i++){ HSSFRow row = sheet.getRow(i); for(int j=0;j<3;j++){ //获取第一行的第一个单元格 HSSFCell cell = row.getCell(j); //打印 System.out.print(cell.getRichStringCellValue().getString()); } System.out.println(); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
POI解析EXCEL的详细列子:
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("e:\\test.xls")); // 创建工作簿 HSSFWorkbook workBook = new HSSFWorkbook(fs); /** * 获得Excel中工作表个数 */ System.out.println("工作表个数 :" + workBook.getNumberOfSheets() + "<br>"); for (int i = 0; i < workBook.getNumberOfSheets(); i++) { System.out.println("<font color='red'> " + i + " ***************工作表名称:" + workBook.getSheetName(i) + " ************</font><br>"); // 创建工作表 HSSFSheet sheet = workBook.getSheetAt(i); int rows = sheet.getPhysicalNumberOfRows(); // 获得行数 if (rows > 0) { sheet.getMargin(HSSFSheet.TopMargin); for (int j = 0; j < rows; j++) { // 行循环 HSSFRow row = sheet.getRow(j); if (row != null) { int cells = row.getLastCellNum();// 获得列数 for (short k = 0; k < cells; k++) { // 列循环 HSSFCell cell = row.getCell(k); // ///////////////////// if (cell != null) { String value = ""; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: // 数值型 if (HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是date类型则 ,获取该cell的date值 value =sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); } else {// 纯数字 value = String.valueOf(cell.getNumericCellValue()); System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); } break; /* 此行表示单元格的内容为string类型 */ case HSSFCell.CELL_TYPE_STRING: // 字符串型 value = cell.getRichStringCellValue().toString(); System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); break; case HSSFCell.CELL_TYPE_FORMULA:// 公式型 // 读公式计算值 value = String.valueOf(cell.getNumericCellValue()); if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串 value = cell.getRichStringCellValue().toString(); } // cell.getCellFormula();读公式 System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); break; case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔 value = " " + cell.getBooleanCellValue(); System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); break; /* 此行表示该单元格值为空 */ case HSSFCell.CELL_TYPE_BLANK: // 空值 value = ""; System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); break; case HSSFCell.CELL_TYPE_ERROR: // 故障 value = ""; System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); break; default: value = cell.getRichStringCellValue().toString(); System.out.println("第" + j + "行,第" + k + "列值:" + value + "<br>"); } } } }
JXL解析例子:
package excel; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; public class TestForExcel { /** * @param args */ public static void main(String[] args) { Workbook rwb = null; // byte b[]={1,23,1,123,123,123}; // InputStream by=new ByteArrayInputStream(b); try { InputStream is=new FileInputStream("E:\\test.xls"); //声名一个工作薄 rwb= Workbook.getWorkbook(is); //获得工作薄的个数 rwb.getNumberOfSheets(); //在Excel文档中,第一张工作表的缺省索引是0 Sheet st = rwb.getSheet("Sheet1"); //通用的获取cell值的方式,getCell(int column, int row) 行和列 int rows=st.getRows(); int cols=st.getColumns(); System.out.println("当前工作表的名字:"+st.getName()); System.out.println("总行数:"+rows); System.out.println("总列数:"+cols); for(int i=0;i<rows;i++){ Cell c1=st.getCell(0,i); Cell c2=st.getCell(1,i); Cell c3=st.getCell(2,i); System.out.println("卡号:"+c1.getContents()+";密码: "+c2.getContents()); } } catch(Exception e) { e.printStackTrace(); System.out.println("出错了"); }finally{ rwb.close(); } } }
其实我当时最开始使用的是JXL解析方式,可是把flex端的字节数组转换为输入流再丢给jxl的工作簿时得不到该对象,挺郁闷的,也不知道到底是什么原因。先丢其一边。
本文出自 “技术积累” 博客,请务必保留此出处http://jiarong.blog.51cto.com/3398433/740819
相关文章推荐
- 数据导入到excel 并显示在页面
- FH_1Excel报表导入,显示在JSP页面.人为判断后,不正确的数据生成PDF文档
- 将excel中数据显示在页面上,然后再导入到SqlServer数据库中
- 把Excel中的数据导入到数据库中并显示在页面
- 用struts2来导入excel文件并显示到页面上
- 【C#MVC】使用ajaxFileUpload导入Excel,并显示在Grid中
- winform中 将DataGrid中的数据导入Excel中,并显示Excel应用程序
- jsp页面直接显示excel
- 页面内容导入Excel
- 把页面Table表格内容导出为Excel-仅是当前页面上显示的table 分页未知(转载 略修改)
- execle导入后 数据 无刷新 显示在 输入页面
- 用flex实现前台导入excel,可调取js实现与.net交互
- 页面指定区域导入到Excel和world
- 如何在.aspx页面上做导入Excel功能?
- flex实现百度库文浏览文档使用word文档转pdf然后再用pdf转swf最后flex页面使用flexpaper显示文库数据
- 页面数据导入Excel
- 如何将excel导入到数据库中并在gridview中显示
- 在WEB页面上将EXCEL文件导入、导出到数据库中
- [转载]jsp页面显示数据导出到excel表中
- C# 操作EXCEL 类 可以实现导入导出功能 折腾了好长时间 现在两种方法显示出来