加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex导入EXCEL并在页面显示

发布时间:2020-12-15 01:00:23 所属栏目:百科 来源:网络整理
导读:? 个人觉得做这个功能最重要的就是在哪里解析EXCEL ?本来想着偷懒就在FLEX端解析算了,可是整了一早上实在整不下去了,至于原因,懒的说了。 ?下午就实行了第二套解决方案, 首先:在FLEX端加载EXCEL文件转换为BYTE数组代码如下: ? ? xml ? version = "1.0"

? 个人觉得做这个功能最重要的就是在哪里解析EXCEL

?本来想着偷懒就在FLEX端解析算了,可是整了一早上实在整不下去了,至于原因,懒的说了。

?下午就实行了第二套解决方案,

首先:在FLEX端加载EXCEL文件转换为BYTE数组代码如下:

?

 
 
  1. <?xml?version="1.0"?encoding="utf-8"?>?
  2. <s:Application?xmlns:fx="http://ns.adobe.com/mxml/2009"?
  3. ???????????????xmlns:s="library://ns.adobe.com/flex/spark"?
  4. ???????????????xmlns:mx="library://ns.adobe.com/flex/mx"?minWidth="955"?minHeight="600"?
  5. ???????????????currentState="pre_upload"?
  6. ???????????????creationComplete="init()">?
  7. ????<s:layout>?
  8. ????????<s:BasicLayout/>?
  9. ????</s:layout>?
  10. ????<fx:Script>?
  11. ????????<![CDATA[?
  12. ????????????//import?mx.events.ImageUploadedEvent;?
  13. ????????????import?flash.events.Event;?
  14. ????????????import?flash.net.FileFilter;?
  15. ????????????import?flash.net.FileReference;?
  16. ????????????import?mx.controls.Alert;?
  17. ????????????import?mx.managers.PopUpManager;?
  18. ????????????import?mx.rpc.events.FaultEvent;?
  19. ????????????import?mx.rpc.events.ResultEvent;?
  20. ????????????import?mx.rpc.remoting.mxml.RemoteObject;?
  21. ?????????????
  22. ????????????private?var?fileRef:FileReference?=?new?FileReference();?
  23. ?????????????
  24. ????????????private?var?upload:RemoteObject?=?new?RemoteObject();?
  25. ????????????private?function?init():void{?
  26. ????????????????upload.destination="UploadFile";?
  27. ????????????}?
  28. ?????????????
  29. ????????????private?function?pickFile(evt:MouseEvent):void?
  30. ????????????{?
  31. ????????????????var?imageTypes:FileFilter?=?new?FileFilter("图片?(*.jpg,?*.jpeg,?*.gif,*.png)",?"*.jpg;?*.jpeg;?*.gif;?*.png");?
  32. ????????????????var?allTypes:Array?=?new?Array(imageTypes);?
  33. ????????????????fileRef.addEventListener(Event.SELECT,?selectHandler);?
  34. ????????????????fileRef.addEventListener(ProgressEvent.PROGRESS,?progressHandler);?
  35. ????????????????fileRef.addEventListener(Event.COMPLETE,?completeHandler);?
  36. ????????????????try{?
  37. ????????????????????fileRef.browse(allTypes);?
  38. ????????????????}catch?(error:Error){?
  39. ????????????????????trace("Unable?to?browse?for?files."+error.toString());?
  40. ????????????????}?
  41. ????????????}?
  42. ?????????????
  43. ????????????private?function?progressHandler(evt:ProgressEvent):void?
  44. ????????????{?
  45. ????????????????lb_progress.text?=?"?已上传?"?+?(evt.bytesLoaded/1024).toFixed(2)+?"?K,共?"?+?(evt.bytesTotal/1024).toFixed(2)?+?"?K";?
  46. ????????????????var?proc:?uint?=?evt.bytesLoaded?/?evt.bytesTotal?*?100;?
  47. ????????????????progress.setProgress(proc,?100);?
  48. ????????????????progress.label=?"当前进度:?"?+?"?"?+?proc?+?"%";?
  49. ????????????}?
  50. ?????????????
  51. ????????????private?function?selectHandler(evt:Event):void?
  52. ????????????{?
  53. ????????????????currentState?=?"uploading";?
  54. ????????????????fileRef.load();?
  55. ????????????}?
  56. ?????????????
  57. ????????????private?function?completeHandler(evt:Event):void{?
  58. ????????????????currentState?=?"post_upload";?
  59. ????????????????upload.uploadFile(fileRef.data,fileRef.name);?
  60. ????????????????image_post_upload.source?=?fileRef.data;?
  61. ????????????}?
  62. ?????????????
  63. ????????]]>?
  64. ????</fx:Script>?
  65. ????<s:states>?
  66. ????????<s:State?name?=?"pre_upload"/>?
  67. ????????<s:State?name?=?"uploading"/>?
  68. ????????<s:State?name?=?"post_upload"/>?
  69. ????</s:states>?
  70. ????<s:Button?includeIn="pre_upload"?label="从电脑上上传图片"?width="119"?click="pickFile(event)"?horizontalCenter="-1"?y="29"/>?
  71. ????<mx:ProgressBar?id="progress"?includeIn="uploading"?x="43"?y="43"?width="153"/>?
  72. ????<s:Label?id="lb_progress"?includeIn="uploading"?x="45"?y="10"?width="149"?height="25"/>?
  73. ????<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"/>?
  74. ????<mx:Image?id="image_post_upload"?includeIn="post_upload"?x="10"?y="10"?width="67"?height="67"/>?
  75. </s:Application>?

这是上传的例子,接着把byte数组传给java端,先转换为输入流再利用POI解析EXCEL后封装数据,最后传递给FLEX端

代码如下:

?

 
 
  1. InputStream?by=new?ByteArrayInputStream("FLEX端传递过来的字节数组");?
  2. ?
  3. ????//初始整个Excel????
  4. ?????HSSFWorkbook?workbook;?
  5. try?{?
  6. ????workbook?=?new?HSSFWorkbook(by);?
  7. ?????
  8. ?????//获取第一个Sheet表????
  9. ??????HSSFSheet?sheet?=?workbook.getSheetAt(0);//或者?HSSFSheet?sheet?=?workbook.getSheet("Sheet1");????
  10. ??????int???total???=???sheet.getLastRowNum();??????
  11. ???????????//获取第一行????
  12. ??????for(int?i=0;i<total;i++){?
  13. ??????????HSSFRow?row?=?sheet.getRow(i);??
  14. ??????????for(int?j=0;j<3;j++){?
  15. ????????????????//获取第一行的第一个单元格????
  16. ??????????HSSFCell?cell?=?row.getCell(j);???
  17. ??????????
  18. ??????????//打印????
  19. ???????????System.out.print(cell.getRichStringCellValue().getString());?
  20. ??????????}?
  21. ??????????System.out.println();?
  22. ??????}?
  23. ????????
  24. }?catch?(Exception?e)?{?
  25. ????//?TODO?Auto-generated?catch?block?
  26. ????e.printStackTrace();?
  27. }???

POI解析EXCEL的详细列子:

?

 
 
  1. POIFSFileSystem?fs?=?new?POIFSFileSystem(new?FileInputStream("e:test.xls"));?
  2. ????????????//?创建工作簿?
  3. ????????????HSSFWorkbook?workBook?=?new?HSSFWorkbook(fs);?
  4. ????????????/**?
  5. ?????????????*?获得Excel中工作表个数?
  6. ?????????????*/?
  7. ????????????System.out.println("工作表个数?:"?+?workBook.getNumberOfSheets()?+?"<br>");?
  8. ????????????for?(int?i?=?0;?i?<?workBook.getNumberOfSheets();?i++)?{?
  9. ????????????????System.out.println("<font?color='red'>?"?+?i?+?"?***************工作表名称:"?+?workBook.getSheetName(i)?+?"??************</font><br>");?
  10. ?
  11. ????????????????//?创建工作表?
  12. ????????????????HSSFSheet?sheet?=?workBook.getSheetAt(i);?
  13. ????????????????int?rows?=?sheet.getPhysicalNumberOfRows();?//?获得行数?
  14. ????????????????if?(rows?>?0)?{?
  15. ????????????????????sheet.getMargin(HSSFSheet.TopMargin);?
  16. ????????????????????for?(int?j?=?0;?j?<?rows;?j++)?{?//?行循环?
  17. ????????????????????????HSSFRow?row?=?sheet.getRow(j);?
  18. ????????????????????????if?(row?!=?null)?{?
  19. ????????????????????????????int?cells?=?row.getLastCellNum();//?获得列数?
  20. ????????????????????????????for?(short?k?=?0;?k?<?cells;?k++)?{?//?列循环?
  21. ????????????????????????????????HSSFCell?cell?=?row.getCell(k);?
  22. ????????????????????????????????//?/////////////////////?
  23. ????????????????????????????????if?(cell?!=?null)?{?
  24. ????????????????????????????????????String?value?=?"";?
  25. ????????????????????????????????????switch?(cell.getCellType())?{?
  26. ????????????????????????????????????case?HSSFCell.CELL_TYPE_NUMERIC:?//?数值型?
  27. ?
  28. ????????????????????????????????????????if?(HSSFDateUtil.isCellDateFormatted(cell))?{?
  29. ????????????????????????????????????????????//?如果是date类型则?,获取该cell的date值?
  30. ????????????????????????????????????????????value?=sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));?
  31. ????????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  32. ????????????????????????????????????????}?else?{//?纯数字?
  33. ?
  34. ????????????????????????????????????????????value?=?String.valueOf(cell.getNumericCellValue());?
  35. ????????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  36. ????????????????????????????????????????}?
  37. ????????????????????????????????????????break;?
  38. ????????????????????????????????????/*?此行表示单元格的内容为string类型?*/?
  39. ????????????????????????????????????case?HSSFCell.CELL_TYPE_STRING:?//?字符串型?
  40. ????????????????????????????????????????value?=?cell.getRichStringCellValue().toString();?
  41. ????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  42. ????????????????????????????????????????break;?
  43. ????????????????????????????????????case?HSSFCell.CELL_TYPE_FORMULA://?公式型?
  44. ????????????????????????????????????????//?读公式计算值?
  45. ????????????????????????????????????????value?=?String.valueOf(cell.getNumericCellValue());?
  46. ????????????????????????????????????????if?(value.equals("NaN"))?{//?如果获取的数据值为非法值,则转换为获取字符串?
  47. ?
  48. ????????????????????????????????????????????value?=?cell.getRichStringCellValue().toString();?
  49. ????????????????????????????????????????}?
  50. ????????????????????????????????????????//?cell.getCellFormula();读公式?
  51. ????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  52. ????????????????????????????????????????break;?
  53. ????????????????????????????????????case?HSSFCell.CELL_TYPE_BOOLEAN://?布尔?
  54. ????????????????????????????????????????value?=?"?"?+?cell.getBooleanCellValue();?
  55. ????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  56. ????????????????????????????????????????break;?
  57. ????????????????????????????????????/*?此行表示该单元格值为空?*/?
  58. ????????????????????????????????????case?HSSFCell.CELL_TYPE_BLANK:?//?空值?
  59. ????????????????????????????????????????value?=?"";?
  60. ????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  61. ????????????????????????????????????????break;?
  62. ????????????????????????????????????case?HSSFCell.CELL_TYPE_ERROR:?//?故障?
  63. ????????????????????????????????????????value?=?"";?
  64. ????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  65. ????????????????????????????????????????break;?
  66. ????????????????????????????????????default:?
  67. ????????????????????????????????????????value?=?cell.getRichStringCellValue().toString();?
  68. ????????????????????????????????????????System.out.println("第"?+?j?+?"行,第"?+?k?+?"列值:"?+?value?+?"<br>");?
  69. ????????????????????????????????????}?
  70. ?
  71. ????????????????????????????????}?
  72. ????????????????????????????}?
  73. ????????????????????????}?

JXL解析例子:

?

 
 
  1. package?excel;?
  2. ?
  3. import?java.io.FileInputStream;?
  4. import?java.io.InputStream;?
  5. ?
  6. import?jxl.Cell;?
  7. import?jxl.Sheet;?
  8. import?jxl.Workbook;?
  9. ?
  10. public?class?TestForExcel?{?
  11. ?
  12. ????/**?
  13. ?????*?@param?args?
  14. ?????*/?
  15. ????public?static?void?main(String[]?args)?{?
  16. ????????Workbook?rwb?=?null;?
  17. //??????byte?b[]={1,23,1,123,123};?
  18. //??????InputStream?by=new?ByteArrayInputStream(b);?
  19. ?????????
  20. ??????????try?
  21. ??????????{?
  22. ??????????????InputStream?is=new?FileInputStream("E:test.xls");?
  23. ??????????????//声名一个工作薄?
  24. ???????????????rwb=?Workbook.getWorkbook(is);?
  25. ??????????????//获得工作薄的个数?
  26. ??????????????rwb.getNumberOfSheets();?
  27. ??????????????//在Excel文档中,第一张工作表的缺省索引是0?
  28. ??????????????Sheet?st?=?rwb.getSheet("Sheet1");?
  29. ??????????????//通用的获取cell值的方式,getCell(int?column,?int?row)?行和列?
  30. ??????????????int?rows=st.getRows();?
  31. ??????????????int?cols=st.getColumns();?
  32. ??????????????System.out.println("当前工作表的名字:"+st.getName());?
  33. ??????????????System.out.println("总行数:"+rows);?
  34. ??????????????System.out.println("总列数:"+cols);?
  35. ????????????for(int?i=0;i<rows;i++){?
  36. ??????????????Cell?c1=st.getCell(0,i);?
  37. ??????????????Cell?c2=st.getCell(1,i);?
  38. ??????????????Cell?c3=st.getCell(2,i);?
  39. ??????????????System.out.println("卡号:"+c1.getContents()+";密码:?"+c2.getContents());?
  40. ????????????}?
  41. ??????????}?
  42. ??????????catch(Exception?e)?
  43. ??????????{?
  44. ??????????????e.printStackTrace();?
  45. ???????????????System.out.println("出错了");?
  46. ??????????}finally{?
  47. ????????????rwb.close();?
  48. ??????????}?
  49. ????}?
  50. ?
  51. }?

其实我当时最开始使用的是JXL解析方式,可是把flex端的字节数组转换为输入流再丢给jxl的工作簿时得不到该对象,挺郁闷的,也不知道到底是什么原因。先丢其一边。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读