Apr 24, 2006

JExcelAPI にチャレンジ(6)

チマチマと動作確認のために作成していたコードを貼っておく。 ここ数日の内容をまとめたもの。

package jp.in_vitro.codelets.jexcelapi;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import jxl.HeaderFooter;
import jxl.SheetSettings;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.PageOrientation;
import jxl.format.PaperSize;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCellFeatures;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public class Codelet2 {

    public Codelet2() {
        super();
    }

    protected void execute() throws IOException, RowsExceededException,
            WriteException {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        WorkbookSettings settings = new WorkbookSettings();
        settings.setGCDisabled(true);
        WritableWorkbook book = Workbook.createWorkbook(baos, settings);

        WritableSheet sheet = book.createSheet("my sheet", 0);
        this.configureSheet(sheet);
        this.adjustColumnWidth(sheet);
        this.writeHeader(sheet, 1);
        this.writeBookmark(sheet, 2, 1, "Google", "http://www.google.com/",
                "サーチエンジン");
        this.writeBookmark(sheet, 3, 2, "CNN", "http://www.cnn.com/", "ニュース");
        this.writeBookmark(sheet, 4, 3, "Amazon", "http://www.amazon.co.jp/",
                "ショッピング");

        book.write();
        book.close();

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(new File("c:\\tmp.xls"));
            fos.write(baos.toByteArray());
            fos.flush();
        } finally {
            if (fos != null) {
                fos.close();
            }
        }
    }

    protected void configureSheet(final WritableSheet sheet) {

        SheetSettings settings = sheet.getSettings();

        HeaderFooter header = new HeaderFooter();
        header.getCentre().append("My Bookmarks");
        settings.setHeader(header);

        HeaderFooter footer = new HeaderFooter();
        footer.getCentre().appendPageNumber();
        footer.getCentre().append(" / ");
        footer.getCentre().appendTotalPages();
        settings.setFooter(footer);

        settings.setProtected(true);
        settings.setPassword("mypassword");

        settings.setFitHeight(2);
        settings.setFitWidth(0);
        settings.setFitToPages(true);

        settings.setHorizontalFreeze(1);
        settings.setVerticalFreeze(2);

        settings.setZoomFactor(75);

        sheet.setPageSetup(PageOrientation.LANDSCAPE, PaperSize.B5, 10, 10);
    }

    protected void adjustColumnWidth(final WritableSheet sheet) {

        int[] widths = new int[] { 10, 30, 50, 50 };

        for (int i = 0; i < widths.length; i++) {
            sheet.setColumnView(i, widths[i]);
        }
    }

    protected void writeHeader(final WritableSheet sheet, final int y)
            throws WriteException {

        String[] headers = new String[] { "No.", "Title", "URL", "Description" };
        String[] comments = new String[] { "番号", "タイトル", "", "備考" };

        WritableCellFormat format = new WritableCellFormat();
        format.setBorder(Border.ALL, BorderLineStyle.THIN);
        format.setBackground(Colour.LIGHT_ORANGE);
        format.setAlignment(Alignment.CENTRE);

        WritableFont font = new WritableFont(format.getFont());
        font.setBoldStyle(WritableFont.BOLD);
        format.setFont(font);

        for (int i = 0; i < headers.length; i++) {
            WritableCellFeatures feature = new WritableCellFeatures();
            if (!"".equals(comments[i])) {
                feature.setComment(comments[i]);
            }
            Label label = new Label(i, y, headers[i]);
            label.setCellFeatures(feature);
            label.setCellFormat(format);
            sheet.addCell(label);
        }
    }

    protected void writeBookmark(final WritableSheet sheet, final int y,
            final int no, final String title, final String url,
            final String description) throws RowsExceededException,
            WriteException {

        WritableCellFormat format = new WritableCellFormat();
        format.setBorder(Border.ALL, BorderLineStyle.THIN);

        Number noNumber = new Number(0, y, no);
        noNumber.setCellFormat(format);
        Label titleLabel = new Label(1, y, title);
        titleLabel.setCellFormat(format);
        Formula urlLabel = new Formula(2, y, "HYPERLINK(\"" + url + "\",\""
                + url + "\")");
        urlLabel.setCellFormat(format);
        Label descriptionLabel = new Label(3, y, description);
        descriptionLabel.setCellFormat(format);

        sheet.addCell(noNumber);
        sheet.addCell(titleLabel);
        sheet.addCell(urlLabel);
        sheet.addCell(descriptionLabel);
    }

    public static void main(String[] args) throws IOException,
            RowsExceededException, WriteException {
        Codelet2 me = new Codelet2();
        me.execute();
    }

}

TrackBack ping me at
http://www.in-vitro.jp/blog/index.cgi/Library/20060424_01.trackback
Post a comment

writeback message: Ready to post a comment.