用as3读取excel数据,用到一个类库。as3可以读取二进制,所以无论是excel还是其它格式,理论上来说都可以读取。只是大多数情况下,都是找别人写好的类库来用,而不是自己写一个,主要是自己水平不够。
package { import com.adobe.serialization.json.JSON; import com.as3xls.xls.ExcelFile; import com.as3xls.xls.Sheet; import flash.display.MovieClip; import flash.events.Event; import flash.net.FileReference; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.utils.ByteArray; /** * ... * @author hanyeah */ public class Main extends MovieClip { private var _xls:ExcelFile; private var _file:FileReference; private var _uld:URLLoader; public function Main() { trace("main"); stage?initStage(null):addEventListener(Event.ADDED_TO_STAGE, initStage); } private function initStage(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, initStage); _uld = new URLLoader(); _uld.dataFormat = URLLoaderDataFormat.BINARY; _uld.load(new URLRequest("步骤.xls")); _uld.addEventListener(Event.COMPLETE, onComplete); } private function onComplete(e:Event):void { trace("complete"); var byteArray:ByteArray = e.currentTarget.data as ByteArray; byteArray.position = 0; _xls = new ExcelFile(); _xls.loadFromByteArray(byteArray); var sheet:Sheet = _xls.sheets[0]; var arr:Array = []; var obj:Object = { }; var pageId:String = ""; for(var i:int = 2;i < sheet.values.length - 1; i++) { obj = { }; arr.push(obj); obj["pageId"] = sheet.values[i][0].value; obj["stepId"] = sheet.values[i][1].value ; obj["type"] = sheet.values[i][2].value ; obj["flag"] = sheet.values[i][3].value ; for (var j:int = 0; j < 3; j++ ) { var obj2:Object = { }; obj["mode"] = obj2; obj2["redo"] = sheet.values[i][4 + j * 8].value; obj2["relyStep"] = sheet.values[i][5 + j * 8].value; obj2["relyTools"] = sheet.values[i][6 + j * 8].value; obj2["useTools"] = sheet.values[i][7 + j * 8].value; obj2["effectStep"] = sheet.values[i][8 + j * 8].value; obj2["hint1"] = sheet.values[i][9 + j * 8].value; obj2["hint2"] = sheet.values[i][10 + j * 8].value; obj2["other"] = sheet.values[i][11 + j * 8].value; } } var s:String = com.adobe.serialization.json.JSON.encode(arr); //trace(s); tf.text = s; } } }
需要在库路径里添加as3xls-1.0.1.swc,只写了一个读取excel的demo,其它功能没仔细研究,而且,这个类智能读取excel97-2003的文件,不支持excel2007。需要的话,可以找一个支持2007的类库。
首先以二进制方式读取文件,然后新建一个ExcelFile对象,调用ExcelFile对象的loadFromByteArray方法,传入刚才的二进制文件。
_xls = new ExcelFile();
_xls.loadFromByteArray(byteArray);
var sheet:Sheet = _xls.sheets[0];来去读第几个表。excel文件其实是一个工作簿,里边会有好多excel表(默认是3个,可以添加删除,自定义)。sheet.values是一个二维数组,对应excel表里边的表格,通过这个二维数组来读取第几行第几列的数据。
策划人员经常会用到excel表,我们可以做个工具读取表格中的内容,然后保存成自己需要的格式,可能回升好多时间。当然,也可以用VBA来在excel里边写一个宏,导出成需要的格式,这里不做讨论。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。