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
writeback message: Ready to post a comment.
