OfficeOpenXML形式のエクセルファイルを読めないのかなとおもいためしてみました。
でも、今はまだ、単純にCellの内容(値)を取得できるレベルです。
(当たり前ですが、100% ActionScriptです。AIRライブラリを含む・・・)
OfficeOpenXML形式とは、Excel2007 などからサポートされた形式で拡張子がxlsxになっています。Excel2003などでも、変換ツールがMicrosoftから公開されていて、これらの拡張子のファイルを開こうとすると、ツールをダウンロードしようとしますので、xlsxのファイルも広く使えるようになっているのではないでしょうか。
実体はいろいろなxmlをzipで圧縮した形式なのでxlsよりもファイルサイズが小さいです。
そして、以前作成したAirでZIP解凍するライブラリとあわせれば、後は通常のXMLの解析なので、OfficeOpenXML形式の仕様とにらめっこすればいいわけです。
(OfficeOpenXMLの仕様はhttp://www.ecma-international.org/publications/standards/Ecma-376.htmからみることができます。)
それに、ZIP解凍するライブラリを作ったのも、半分くらいはこのオフィスファイルを制御するためにつくったのですが・・・
下記例で使うクラスは・・・
[as]
import com.coltware.oox.SpreadsheetML;
import com.coltware.oox.excel.SMLCell;
import com.coltware.oox.excel.SMLRow;
import com.coltware.oox.excel.SMLWorkbook;
import com.coltware.oox.excel.SMLWorksheet;
[/as]
です。
まず、エクセルファイルのオープンの方法とワークブックの取得は
[as]
var file:File = new File(…..); // ここでxlsxファイルを指定
var excel:SpreadsheetML = new SpreadsheetML();
excel.openFile(file);
var workbook:SMLWorkbook = excel.getWorkbook();
excel.closeFile();
[/as]
ここで、closeFile()としていますが、これは将来、変更もできるようにするためで、いろいろと作業中に作ったゴミの削除をしています。
次に、シートの取得とロードは
[as]
var sheet:SMLWorksheet = workbook.getSheetAt(0);
sheet.load();
trace(sheet.name); // シートの名前がとれます。
[/as]
このシート(実際はデータ)はファイルが大きい可能性があるので、最初のopenFileでは読み込んでいません。
使うときに、loadをしてから使うようにします。
後で、ここで非同期loadを作る予定です。
次にシートからRowとCellの取得方法です。
Rowとは縦の1から・・・・で、Cellとは、”A1″とか、”B5″などのように指定するあれです。
Rowの取得
[as]
var row:SMLRow = sheet.getRow(119);
if(row){
var cellList:Array = row.getCellList();
for each(var _cell:SMLCell in cellList){
trace(_cell.getCellId() + “->” + _cell.getStringValue());
}
}
[/as]
SheetにあるすべてのRowをとる
[as]
var rowList:Array = sheet.getRowList();
for each(row in rowList){
if(row){
var cellList:Array = row.getCellList();
for each(var cell:SMLCell in cellList){
trace(cell.getCellId() + “=>” + cell.getStringValue());
}
}
}
[/as]
Sheetから直接Cellもとれます
[as]
var cell:SMLCell = sheet.getCell(“B3″);
if(cell){
// まだ、文字列としてしか値をとれません。
trace(cell.getStringValue());
}
[/as]
このレベルですが、もし試してみたい方はこちらからswcのダウンロードをどうぞ。
ダウンロード
実は、書き換えもすでにあるsheetのデータでしたら、管理情報も増えないので簡単なのですが、sheetの追加とかになるとちょっとめんどうなのでそれはまだできていません。


