用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里边写一个宏,导出成需要的格式,这里不做讨论。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。