xlsx ファイルの操作に現在何を使用しているかわかりません。ただし、CF9 のスプレッドシート機能はPOIを利用しており、これは明らかに CF8 からも使用できます。もう少し低レベルのコードが必要です。
前提条件:
POIはCF8に同梱されていますが、古いバージョンです。.xlsx ファイルを操作するには、新しいバージョンが必要です。javaLoaderを使用するか、またはフォルダー内の既存の jar を置き換えることができ{cf_root}\lib
ます。瓶を交換することで悪影響があるかどうかはわかりません.
画像の追加:
Excel は実際には<img>
タグをサポートしておらず、ハイパーリンクのみをサポートしています。ただし、SpreadsheetAddImage のようにワークブック内に画像を埋め込むことができます。POI のBusy Developers Guideで概説されているように、基本的なプロセスは次のとおりです。
- WorkBookFactory を使用して xlsx ファイルをロードします。
- 各画像のバイナリを取得し、ワークブックに追加します
- 各画像を目的のセルに固定します
- 変更したワークブックをディスクに保存する
例:
<cfscript>
// ..
// load the xlsx file with the javaLoader
factory = loader.create("org.apache.poi.ss.usermodel.WorkbookFactory");
input = loader.create("java.io.FileInputStream").init( "c:/path/to/someFile.xlsx" );
workbook = factory.create( input );
input.close();
// get the desired sheet and load helper objects (once)
sheet = workbook.getSheet("Your Sheet Name");
patriarch = sheet.createDrawingPatriarch();
helper = workbook.getCreationHelper();
// add the image to the workbook
imageBytes = fileReadBinary( "c:/path/to/someImage.jpg" );
imageIndex = workbook.addPicture( imageBytes, workbook.PICTURE_TYPE_JPEG );
// anchor the picture to the first cell ie A1
anchor = helper.createClientAnchor();
anchor.setRow1( javacast("int", 0) ); // row of first cell (zero based)
anchor.setCol1( javacast("int", 0) ); // column of first cell (zero based)
picture = patriarch.createPicture( anchor, imageIndex );
picture.resize(); // only supported for jpg and png
// save it back to disk
outstream = loader.create("java.io.FileOutputStream").init( "c:/path/to/outFile.xlsx"" );
workbook.write( outstream );
outstream.flush();
outstream.close();
</cfscript>
新しい列
皮肉なことに、新しい列を挿入するのは、画像を追加するよりも厄介です。最後に確認したところ、POI には新しい列を挿入するための組み込み関数がまだありませんでした。したがって、画像を最初の列に挿入する前に、既存のすべてのセルを右にシフトする必要があります。トリッキーな部分は、セルのフォーマット、結合されたセルなどを維持することです。