最近の更新

ラベル ExCella Reports の投稿を表示しています。 すべての投稿を表示
ラベル ExCella Reports の投稿を表示しています。 すべての投稿を表示

2013年9月10日火曜日

ExCella Reports1.4でLibreOffice3経由でPDFを出力する方法(成功)

【目的】
ExCella Reports1.4のライブラリを使用し帳票・ExcelをLibreOffice3経由でPDFで出力します(成功しました)。



【準備】
1.「LibreOffice3.6.7のインストール方法」の手順で、LibreOffice3をインストールしておきます。



【手順1】
1.「C:\Program Files (x86)\LibreOffice 3」に移動。
2.「ure-link」を選択し、右クリックから「コピー」を選択。




【手順2】
1.「Ctrl+V」で貼り付け。
2.「続行」ボタンをクリック。




【手順3】
1.「ure-link - コピー」を選択し、右クリックから「名前の変更」を選択。




【手順4】
1.「続行」ボタンをクリック。




【手順5】
1.「basis-link」と入力。




【手順6】
1.「ノートパッドを管理者権限で起動する方法」の手順で、ノートパッドを管理者権限で起動。
2.メニューから「ファイル」⇒「開く」を選択。




【手順7】
1.「すべてのファイル」を選択。




【手順8】
1.「basis-link」を選択。
2.「開く」ボタンをクリック。




【手順9】
1.以下の内容を入力。
.




【手順10】
1.メニューから「ファイル」⇒「上書き保存」を選択。




【手順11】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample041-PdfLibreOffice3OK」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「ExCella Reports1.4のJDOConverterのバージョンアップ方法」の手順で、JODConverterをバージョンアップ。
4.「PdfLibreOffice3OKTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample041-PdfLibreOffice3OK」直下に配置。





5.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
6.「Main.java」を以下の様に入力。
import org.bbreak.excella.reports.exporter.OoPdfExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.SingleParamParser;

public class Main {

    public static void main(String[] args) throws Exception {

        String templateFilePath = "PdfLibreOffice3OKTemplate.xls";

        String outputFileName = "PdfLibreOffice3OK";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);
        ReportBook outputBook = new ReportBook(templateFilePath, outputFilePath, OoPdfExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("請求書");
        outputBook.addReportSheet(outputSheet);

        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値1", "値1に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値2", "値2に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値3", "値3に入るHello, World");

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);

    }
}
7.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
8.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。

9.「Javaパッケージの作成方法」の手順で「org.artofsolving.jodconverter.office」というパッケージを作成。
10.「Javaクラスファイルの作成方法」の手順で「OfficeProcess」というクラスを作成。
11.「OfficeProcess.java」を以下の様に入力。
//
// JODConverter - Java OpenDocument Converter
// Copyright 2004-2011 Mirko Nasato and contributors
//
// JODConverter is free software: you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// JODConverter is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General
// Public License along with JODConverter.  If not, see
// <http://www.gnu.org/licenses/>.
//
package org.artofsolving.jodconverter.office;

import static org.artofsolving.jodconverter.process.ProcessManager.PID_UNKNOWN;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import org.apache.commons.io.FileUtils;
import org.artofsolving.jodconverter.process.ProcessManager;
import org.artofsolving.jodconverter.process.ProcessQuery;
import org.artofsolving.jodconverter.util.PlatformUtils;

class OfficeProcess {

    private final File officeHome;
    private final UnoUrl unoUrl;
    private final String[] runAsArgs;
    private final File templateProfileDir;
    private final File instanceProfileDir;
    private final ProcessManager processManager;

    private Process process;
    private long pid = PID_UNKNOWN;

    private final Logger logger = Logger.getLogger(getClass().getName());

    public OfficeProcess(File officeHome, UnoUrl unoUrl, String[] runAsArgs, File templateProfileDir, File workDir, ProcessManager processManager) {
        this.officeHome = officeHome;
        this.unoUrl = unoUrl;
        this.runAsArgs = runAsArgs;
        this.templateProfileDir = templateProfileDir;
        this.instanceProfileDir = getInstanceProfileDir(workDir, unoUrl);
        this.processManager = processManager;
    }

    public void start() throws IOException {
        start(false);
    }

    public void start(boolean restart) throws IOException {
        ProcessQuery processQuery = new ProcessQuery("soffice.bin", unoUrl.getAcceptString());
        long existingPid = processManager.findPid(processQuery);
        if (existingPid != PID_UNKNOWN) {
            throw new IllegalStateException(String.format("a process with acceptString '%s' is already running; pid %d",
                                                          unoUrl.getAcceptString(), existingPid));
        }
        if (!restart) {
            prepareInstanceProfileDir();
        }
        List<String> command = new ArrayList<String>();
        File executable = OfficeUtils.getOfficeExecutable(officeHome);
        if (runAsArgs != null) {
            command.addAll(Arrays.asList(runAsArgs));
        }
        command.add(executable.getAbsolutePath());
        command.add("--accept=" + unoUrl.getAcceptString() + ";urp;");
//        command.add("--env:UserInstallation=" + OfficeUtils.toUrl(instanceProfileDir));
        command.add("--headless");
        command.add("--nocrashreport");
        command.add("--nodefault");
        command.add("--nofirststartwizard");
        command.add("--nolockcheck");
        command.add("--nologo");
        command.add("--norestore");
        ProcessBuilder processBuilder = new ProcessBuilder(command);
        if (PlatformUtils.isWindows()) {
            addBasisAndUrePaths(processBuilder);
        }
        logger.info(String.format("starting process with acceptString '%s' and profileDir '%s'", unoUrl, instanceProfileDir));
        process = processBuilder.start();
        pid = processManager.findPid(processQuery);
        logger.info("started process" + (pid != PID_UNKNOWN ? "; pid = " + pid : ""));
    }

    private File getInstanceProfileDir(File workDir, UnoUrl unoUrl) {
        String dirName = ".jodconverter_" + unoUrl.getAcceptString().replace(',', '_').replace('=', '-');
        return new File(workDir, dirName);
    }

    private void prepareInstanceProfileDir() throws OfficeException {
        if (instanceProfileDir.exists()) {
            logger.warning(String.format("profile dir '%s' already exists; deleting", instanceProfileDir));
            deleteProfileDir();
        }
        if (templateProfileDir != null) {
            try {
                FileUtils.copyDirectory(templateProfileDir, instanceProfileDir);
            } catch (IOException ioException) {
                throw new OfficeException("failed to create profileDir", ioException);
            }
        }
    }

    public void deleteProfileDir() {
        if (instanceProfileDir != null) {
            try {
                FileUtils.deleteDirectory(instanceProfileDir);
            } catch (IOException ioException) {
                File oldProfileDir = new File(instanceProfileDir.getParentFile(), instanceProfileDir.getName() + ".old." + System.currentTimeMillis());
                if (instanceProfileDir.renameTo(oldProfileDir)) {
                    logger.warning("could not delete profileDir: " + ioException.getMessage() + "; renamed it to " + oldProfileDir);
                } else {
                    logger.severe("could not delete profileDir: " + ioException.getMessage());
                }
            }
        }
    }

    private void addBasisAndUrePaths(ProcessBuilder processBuilder) throws IOException {
        // see
// http://wiki.services.openoffice.org/wiki/ODF_Toolkit/Efforts/Three-Layer_OOo
        File basisLink = new File(officeHome, "basis-link");
        if (!basisLink.isFile()) {
            logger.fine("no %OFFICE_HOME%/basis-link found; assuming it's OOo 2.x and we don't need to append URE and Basic paths");
            return;
        }
        String basisLinkText = FileUtils.readFileToString(basisLink).trim();
        File basisHome = new File(officeHome, basisLinkText);
        File basisProgram = new File(basisHome, "program");
        File ureLink = new File(basisHome, "ure-link");
        String ureLinkText = FileUtils.readFileToString(ureLink).trim();
        File ureHome = new File(basisHome, ureLinkText);
        File ureBin = new File(ureHome, "bin");
        Map<String, String> environment = processBuilder.environment();
        // Windows environment variables are case insensitive but Java maps are
// not :-/
        // so let's make sure we modify the existing key
        String pathKey = "PATH";
        for (String key : environment.keySet()) {
            if ("PATH".equalsIgnoreCase(key)) {
                pathKey = key;
            }
        }
        String path = environment.get(pathKey) + ";" + ureBin.getAbsolutePath() + ";" + basisProgram.getAbsolutePath();
        logger.fine(String.format("setting %s to \"%s\"", pathKey, path));
        environment.put(pathKey, path);
    }

    public boolean isRunning() {
        if (process == null) {
            return false;
        }
        return getExitCode() == null;
    }

    private class ExitCodeRetryable extends Retryable {

        private int exitCode;

        protected void attempt() throws TemporaryException, Exception {
            try {
                exitCode = process.exitValue();
            } catch (IllegalThreadStateException illegalThreadStateException) {
                throw new TemporaryException(illegalThreadStateException);
            }
        }

        public int getExitCode() {
            return exitCode;
        }

    }

    public Integer getExitCode() {
        try {
            return process.exitValue();
        } catch (IllegalThreadStateException exception) {
            return null;
        }
    }

    public int getExitCode(long retryInterval, long retryTimeout) throws RetryTimeoutException {
        try {
            ExitCodeRetryable retryable = new ExitCodeRetryable();
            retryable.execute(retryInterval, retryTimeout);
            return retryable.getExitCode();
        } catch (RetryTimeoutException retryTimeoutException) {
            throw retryTimeoutException;
        } catch (Exception exception) {
            throw new OfficeException("could not get process exit code", exception);
        }
    }

    public int forciblyTerminate(long retryInterval, long retryTimeout) throws IOException, RetryTimeoutException {
        logger.info(String.format("trying to forcibly terminate process: '" + unoUrl + "'" + (pid != PID_UNKNOWN ? " (pid " + pid + ")" : "")));
        processManager.kill(process, pid);
        return getExitCode(retryInterval, retryTimeout);
    }

}

12.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
13.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
14.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
15.コンソールにエラーが出力されていないか確認。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
16.「リフレッシュ(ローカルファイルとの同期)の方法」の手順で、プロジェクトをリフレッシュ。
17.「ExCellaSample041-PdfLibreOffice3OK/PdfLibreOffice3OK.pdf」が作成されています。
18.「ExCellaSample041-PdfLibreOffice3OK/PdfLibreOffice3OK.pdf」をダブルクリック。
19.「PdfLibreOffice3OK.pdf」が以下の様に開けば成功です。


































【結論】
ExCellaからLibreOffice3経由でPDFを出力するには少々手を入れないと動きませんでした。

まずはライブラリの位置を指定する「ure-link」の配置が必要でした。

また、JODConveterでLibreOfficeを起動するオプションが「-」ではなく「--」である必用があるので「OfficeProcess.java」を修正する必要がありました。

PDFはLibreOffice3経由で作成した方が、OpenOffice3経由よりも線が細く、綺麗に変換されていると思います。



以上です。

ExCella Reports1.4でLibreOffice3経由でPDFを出力する方法(失敗)

【目的】
ExCella Reports1.4のライブラリを使用し帳票・ExcelをLibreOffice33経由でPDFで出力します(失敗しました)。



【準備】
1.「LibreOffice3.6.7のインストール方法」の手順で、LibreOffice3をインストールしておきます。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample040-PdfLibreOffice3NG」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「ExCella Reports1.4のJDOConverterのバージョンアップ方法」の手順で、JODConverterをバージョンアップ。
4.「PdfOpenOffice3OKTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample040-PdfLibreOffice3NG」直下に配置。

































5.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
6.「Main.java」を以下の様に入力。
import org.bbreak.excella.reports.exporter.OoPdfExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.SingleParamParser;

public class Main {

    public static void main(String[] args) throws Exception {

        String templateFilePath = "PdfLibreOffice3NGTemplate.xls";

        String outputFileName = "PdfLibreOffice3NG";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);
        ReportBook outputBook = new ReportBook(templateFilePath, outputFilePath, OoPdfExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("請求書");
        outputBook.addReportSheet(outputSheet);

        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値1", "値1に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値2", "値2に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値3", "値3に入るHello, World");

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);

    }
}
7.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
8.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
9.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
10.コンソールに以下の様にエラーが出力されます。
log4j:WARN No appenders could be found for logger (org.bbreak.excella.core.BookController).
log4j:WARN Please initialize the log4j system properly.
2013/09/10 13:55:32 org.artofsolving.jodconverter.office.ProcessPoolOfficeManager <init>
情報: ProcessManager implementation is PureJavaProcessManager
2013/09/10 13:55:32 org.artofsolving.jodconverter.office.OfficeProcess prepareInstanceProfileDir
警告: profile dir 'C:\Users\admin\AppData\Local\Temp\.jodconverter_socket_host-127.0.0.1_port-8100' already exists; deleting
2013/09/10 13:55:32 org.artofsolving.jodconverter.office.OfficeProcess start
情報: starting process with acceptString 'socket,host=127.0.0.1,port=8100,tcpNoDelay=1' and profileDir 'C:\Users\admin\AppData\Local\Temp\.jodconverter_socket_host-127.0.0.1_port-8100'
2013/09/10 13:55:32 org.artofsolving.jodconverter.office.OfficeProcess start
情報: started process
Exception in thread "main" org.artofsolving.jodconverter.office.OfficeException: failed to start and connect
    at org.artofsolving.jodconverter.office.ManagedOfficeProcess.startAndWait(ManagedOfficeProcess.java:64)
    at org.artofsolving.jodconverter.office.PooledOfficeManager.start(PooledOfficeManager.java:101)
    at org.artofsolving.jodconverter.office.ProcessPoolOfficeManager.start(ProcessPoolOfficeManager.java:62)
    at org.bbreak.excella.reports.exporter.OoPdfExporter.output(OoPdfExporter.java:138)
    at org.bbreak.excella.reports.exporter.ReportBookExporter.export(ReportBookExporter.java:96)
    at org.bbreak.excella.reports.processor.ReportProcessor.processBook(ReportProcessor.java:207)
    at org.bbreak.excella.reports.processor.ReportProcessor.process(ReportProcessor.java:110)
    at Main.main(Main.java:26)
Caused by: java.util.concurrent.ExecutionException: org.artofsolving.jodconverter.office.OfficeException: could not establish connection
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
    at java.util.concurrent.FutureTask.get(FutureTask.java:83)
    at org.artofsolving.jodconverter.office.ManagedOfficeProcess.startAndWait(ManagedOfficeProcess.java:62)
    ... 7 more
Caused by: org.artofsolving.jodconverter.office.OfficeException: could not establish connection
    at org.artofsolving.jodconverter.office.ManagedOfficeProcess.doStartProcessAndConnect(ManagedOfficeProcess.java:142)
    at org.artofsolving.jodconverter.office.ManagedOfficeProcess.access$000(ManagedOfficeProcess.java:31)
    at org.artofsolving.jodconverter.office.ManagedOfficeProcess$1.run(ManagedOfficeProcess.java:58)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: org.artofsolving.jodconverter.office.OfficeException: office process died with exit code -1073741515
    at org.artofsolving.jodconverter.office.ManagedOfficeProcess$6.attempt(ManagedOfficeProcess.java:136)
    at org.artofsolving.jodconverter.office.Retryable.execute(Retryable.java:40)
    at org.artofsolving.jodconverter.office.Retryable.execute(Retryable.java:30)
    at org.artofsolving.jodconverter.office.ManagedOfficeProcess.doStartProcessAndConnect(ManagedOfficeProcess.java:120)
    ... 8 more



























【結論】
ExCellaからLibreOffice3経由でPDFを出力するには、通常の方法では上手くいきませんでした。



以上です。

ExCella Reports1.4でOpenOffice3経由でPDFを出力する方法(成功)

【目的】
ExCella Reports1.4のライブラリを使用し帳票・ExcelをOpenOffice3経由でPDFで出力します(成功しました)。



【準備】
1.「OpenOffice3.4.1のインストール方法」の手順で、OpenOffice3をインストールしておきます。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample039-PdfOpenOffice3OK」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「ExCella Reports1.4のJDOConverterのバージョンアップ方法」の手順で、JODConverterをバージョンアップ。
4.「PdfOpenOffice3OKTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample039-PdfOpenOffice3OK」直下に配置。


































5.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
6.「Main.java」を以下の様に入力。
import org.bbreak.excella.reports.exporter.OoPdfExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.SingleParamParser;

public class Main {

    public static void main(String[] args) throws Exception {

        String templateFilePath = "PdfOpenOffice3OKTemplate.xls";

        String outputFileName = "PdfOpenOffice3OK";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);
        ReportBook outputBook = new ReportBook(templateFilePath, outputFilePath, OoPdfExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("請求書");
        outputBook.addReportSheet(outputSheet);

        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値1", "値1に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値2", "値2に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値3", "値3に入るHello, World");

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);

    }
}
7.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
8.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
9.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
10.コンソールにエラーが出力されていないか確認。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
11.「リフレッシュ(ローカルファイルとの同期)の方法」の手順で、プロジェクトをリフレッシュ。
12.「ExCellaSample039-PdfOpenOffice3OK/PdfOpenOffice3OK.pdf」が作成されています。
13.「ExCellaSample039-PdfOpenOffice3OK/PdfOpenOffice3OK.pdf」をダブルクリック。
14.「PdfOpenOffice3OK.pdf」が以下の様に開けば成功です。



































【結論】
OpenOffice3経由でPDFに変換した場合は罫線が太い様な気がしました。



以上です。

ExCella Reports1.4のJDOConverterのバージョンアップ方法

【目的】
ExCella ReportsのJDOConverterを3.0-beta3から3.0-beta4にバージョンアップします。



【手順1】
1.「JODConverter3.0-beta4の解凍方法」の手順で解凍した以下の7つのライブラリを選択し、右クリックから「コピー」を選択。




【手順2】
1.「ExCellaSample001-HelloWorld」(バージョンアップしたいプロジェクト名)の「lib」を選択し「Ctrl+V」で貼り付け。




【手順3】
1.「ExCellaSample001-HelloWorld」(バージョンアップしたいプロジェクト名)の「lib」配下の古いバージョンのJarファイルを選択し、「Delete」ボタンを押下。




【手順4】
1.「OK」ボタンをクリック。




【手順5】
1.「すべてはい」ボタンをクリック。




【手順6】
1.「ExCellalSample001-HelloWorld」(バージョンアップしたいプロジェクト名)を選択しを選択し、右クリック「プロパティー」を選択。




【手順7】
1.左のメニューで「Javaのビルドパス」を選択。
2.右のタブで「ライブラリー」を選択。
3.削除したJarファイルを選択し「除去」ボタンをクリック。




【手順8】
3.「Jar追加」ボタンをクリック。




【手順9】
1.「ExCellaSample001-HelloWorld(バージョンアップしたいプロジェクト名)/lib以下の全てのファイル」を選択。
2.「OK」ボタンをクリック。




【手順10】
1.「OK」ボタンをクリック。




【手順11】
1.「ExCellaSample001-HelloWorld」(バージョンアップしたいプロジェクト名)の参照ライブラリにバージョンアップしたJarファイルが表示されれば成功です。






























以上です。

ExCella Reports1.4でOpenOffice3経由でPDFを出力する方法(失敗)

【目的】
ExCella Reports1.4のライブラリを使用し帳票・ExcelをOpenOffice3経由でPDFで出力します(失敗しました)。



【準備】
1.「OpenOffice3.4.1のインストール方法」の手順で、OpenOffice3をインストールしておきます。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample038-PdfOpenOffice3NG」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「PdfOpenOffice3NGTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample038-PdfOpenOffice3NG」直下に配置。

































4.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
5.「Main.java」を以下の様に入力。
import org.bbreak.excella.reports.exporter.OoPdfExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.SingleParamParser;

public class Main {

    public static void main(String[] args) throws Exception {

        String templateFilePath = "PdfOpenOffice3NGTemplate.xls";

        String outputFileName = "PdfOpenOffice3NG";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);
        ReportBook outputBook = new ReportBook(templateFilePath, outputFilePath, OoPdfExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("請求書");
        outputBook.addReportSheet(outputSheet);

        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値1", "値1に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値2", "値2に入るHello, World");
        outputSheet.addParam(SingleParamParser.DEFAULT_TAG, "値3", "値3に入るHello, World");

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);

    }
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
9.コンソールに以下の様なエラーが出力されます。(Windows7の64bit版の場合)
log4j:WARN No appenders could be found for logger (org.bbreak.excella.core.BookController).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.IllegalStateException: officeHome doesn't exist or is not a directory: C:\Program Files\OpenOffice.org 3
    at org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration.buildOfficeManager(DefaultOfficeManagerConfiguration.java:117)
    at org.bbreak.excella.reports.exporter.OoPdfExporter.output(OoPdfExporter.java:137)
    at org.bbreak.excella.reports.exporter.ReportBookExporter.export(ReportBookExporter.java:96)
    at org.bbreak.excella.reports.processor.ReportProcessor.processBook(ReportProcessor.java:207)
    at org.bbreak.excella.reports.processor.ReportProcessor.process(ReportProcessor.java:110)
    at Main.main(Main.java:26)




























【結論】
JODConverterのバージョンがbeta3の場合、Windowsが64bitの場合のパスを上手く判断できないようです。



以上です。

ExCella Reports1.4で行方向にブロック単位で繰り返し出力する方法(ネストされた場合)

【目的】
ExCella Reports1.4のライブラリを使用し帳票・Excelのファイルで行方向にブロック単位で繰り返し出力します。
※ブロック単位がネストされた場合。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample037-BlockRowRepeatNestedBlockRowRepeat」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「BlockRowRepeatNestedBlockRowRepeatNestedBlockRowRepeat.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample037-BlockRowRepeatNestedBlockRowRepeat」直下に配置。

































4.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
5.「Main.java」を以下の様に入力。
import java.util.ArrayList;
import java.util.List;

import org.bbreak.excella.reports.exporter.ExcelExporter;
import org.bbreak.excella.reports.model.ParamInfo;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.BlockColRepeatParamParser;
import org.bbreak.excella.reports.tag.BlockRowRepeatParamParser;
import org.bbreak.excella.reports.tag.SingleParamParser;

public class Main {

    public static void main(String[] args) throws Exception {
        String templateFilePath = "BlockRowRepeatNestedBlockRowRepeatTemplate.xls";
        String outputFileName = "BlockRowRepeatNestedBlockRowRepeat";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);

        ReportBook outputBook = new ReportBook(templateFilePath,
                outputFilePath, ExcelExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("TemplateSheet", "Sheet1");
        outputBook.addReportSheet(outputSheet);


        List<ParamInfo> personList = new ArrayList<ParamInfo>();
        personList.add(createNameData("あいうえお", "男", "21"));
        personList.add(createNameData("かきくけこ", "女", "28"));
        personList.add(createNameData("さしすせそ", "男", "32"));
        outputSheet.addParam(BlockRowRepeatParamParser.DEFAULT_TAG, "参加者", personList.toArray(new ParamInfo[personList.size()]));

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);
    }

    private static ParamInfo createNameData(String name, String gendar, String age) {
        ParamInfo nameData = new ParamInfo();
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "名前", name);
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "性別", gendar);
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "年齢", age);
        List<ParamInfo> attributeList = new ArrayList<ParamInfo>();
        attributeList.add(createAttributeData("A", "B"));
        attributeList.add(createAttributeData("M", "N"));
        attributeList.add(createAttributeData("Y", "Z"));
        nameData.addParam(BlockColRepeatParamParser.DEFAULT_TAG, "属性", attributeList.toArray(new ParamInfo[attributeList.size()]));
        return nameData;
    }


    private static ParamInfo createAttributeData(String attribute1, String attribute2) {
        ParamInfo attributeData = new ParamInfo();
        attributeData.addParam(SingleParamParser.DEFAULT_TAG, "属性1", attribute1);
        attributeData.addParam(SingleParamParser.DEFAULT_TAG, "属性2", attribute2);
        return attributeData;
    }
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
9.コンソールにエラーが出力されていないか確認。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
10.「リフレッシュ(ローカルファイルとの同期)の方法」の手順で、プロジェクトをリフレッシュ。
11.「ExCellaSample037-BlockRowRepeatNestedBlockRowRepeat/BlockRowRepeatNestedBlockRowRepeat.xls」が作成されています。
12.「ExCellaSample037-BlockRowRepeatNestedBlockRowRepeat/BlockRowRepeatNestedBlockRowRepeat.xls」をダブルクリック。
13.「BlockRowRepeatNestedBlockRowRepeat.xls」が以下の様に開けば成功です。





































以上です。

2012年10月3日水曜日

ExCella Reports1.4でReportProcessListenerを使用し3行おきに罫線を太くする方法

【目的】
ExCella Reports1.4のライブラリを使用し帳票・ExcelのファイルでReportProcessListenerを使用し3行おきに罫線を太くします。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample036-ReportProcessListener3LineBoldBorder」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「ReportProcessListener3LineBoldBorderTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample036-ReportProcessListener3LineBoldBorder」直下に配置。





























4.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
5.「Main.java」を以下の様に入力。
import java.util.ArrayList;
import java.util.List;

import org.bbreak.excella.reports.exporter.ExcelExporter;
import org.bbreak.excella.reports.model.ParamInfo;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.BlockRowRepeatParamParser;
import org.bbreak.excella.reports.tag.SingleParamParser;

public class Main {

    public static void main(String[] args) throws Exception {
        String templateFilePath = "ReportProcessListener3LineBoldBorderTemplate.xls";
        String outputFileName = "ReportProcessListener3LineBoldBorder";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);

        ReportBook outputBook = new ReportBook(templateFilePath,
                outputFilePath, ExcelExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("TemplateSheet", "Sheet1");
        outputBook.addReportSheet(outputSheet);


        List<ParamInfo> personList = new ArrayList<ParamInfo>();
        personList.add(createNameData("あいうえお", "男", "21"));
        personList.add(createNameData("かきくけこ", "女", "28"));
        personList.add(createNameData("さしすせそ", "男", "32"));
        personList.add(createNameData("たちつてと", "女", "19"));
        personList.add(createNameData("なにぬねの", "男", "32"));
        outputSheet.addParam(BlockRowRepeatParamParser.DEFAULT_TAG, "参加者", personList.toArray());

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.addReportProcessListener(new ReportProcessListener3LineBold(5, 3));
        reportProcessor.process(outputBook);
    }

    private static ParamInfo createNameData(String name, String gendar, String age) {
        ParamInfo nameData = new ParamInfo();
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "名前", name);
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "性別", gendar);
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "年齢", age);
        return nameData;
    }
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.「Javaクラスファイルの作成方法」の手順で、「ReportProcessListener3LineBold」というクラスを作成。
9.「ReportProcessListener3LineBold.java」を以下の様に入力。
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.bbreak.excella.core.SheetData;
import org.bbreak.excella.core.SheetParser;
import org.bbreak.excella.core.exception.ParseException;
import org.bbreak.excella.reports.listener.ReportProcessListener;
import org.bbreak.excella.reports.model.ReportBook;

public class ReportProcessListener3LineBold implements ReportProcessListener {
    private static final int BODY_START_ROW_NO = 1;
    private static final int BODY_START_COL_NO = 1;
    private int rowCount;
    private int colCount;

    public ReportProcessListener3LineBold(int rowCount, int colCount) {
        this.rowCount = rowCount;
        this.colCount = colCount;
    }

    @Override
    public void postParse(Sheet sheet, SheetParser sheetParser, SheetData sheetData) throws ParseException {
        //HSSFSheet hssfSheet = (HSSFSheet) sheet;
        List<CellStyle> cellStyleCoplyColumnList = getCellStyleCoplyColumnList(sheet);

        for (int i = 0; i < rowCount; i++) {
            if (i % 3 == 2 || i == rowCount - 1) {
                for (int j = 0; j < cellStyleCoplyColumnList.size(); j++) {
                    sheet.getRow(BODY_START_ROW_NO + i).getCell(BODY_START_COL_NO + j).setCellStyle(cellStyleCoplyColumnList.get(j));
                }
            }
        }
    }

    private List<CellStyle> getCellStyleCoplyColumnList(Sheet sheet) {
        List<CellStyle> cellStyleCoplyColumnList = new ArrayList<CellStyle>();
        CellStyle cellStyle;
        CellStyle cellStyleCoplyColumn;

        for (int i = 0; i < colCount; i++) {
            cellStyle = sheet.getRow(BODY_START_ROW_NO).getCell(BODY_START_COL_NO + i).getCellStyle();
            cellStyleCoplyColumn = sheet.getWorkbook().createCellStyle();
            cellStyleCoplyColumn.cloneStyleFrom(cellStyle);
            cellStyleCoplyColumn.setBorderBottom(HSSFCellStyle.BORDER_THICK);
            cellStyleCoplyColumnList.add(cellStyleCoplyColumn);
        }

        return cellStyleCoplyColumnList;
    }


    @Override
    public void preParse(Sheet sheet, SheetParser sheetParser) throws ParseException {
    }

    @Override
    public void postBookParse(Workbook arg0, ReportBook arg1) {
    }

    @Override
    public void preBookParse(Workbook arg0, ReportBook arg1) {
    }
}
10.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
11.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
12.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
13.コンソールにエラーが出力されていないか確認。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
14.「リフレッシュ(ローカルファイルとの同期)の方法」の手順で、プロジェクトをリフレッシュ。
15.「ExCellaSample036-ReportProcessListener3LineBoldBorder/ReportProcessListener3LineBoldBorder.xls」が作成されています。
16.「ExCellaSample036-ReportProcessListener3LineBoldBorder/ReportProcessListener3LineBoldBorder.xls」をダブルクリック。
17.「ReportProcessListener3LineBoldBorder.xls」が以下の様に開けば成功です。





























以上です。

ExCella Reports1.4で行方向にブロック単位で出力時に入れ子で列方向に繰り返し出力する方法

【目的】
ExCella Reports1.4のライブラリを使用し帳票・Excelのファイルで行方向にブロック単位で出力時に入れ子で列方向に繰り返し出力します。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample035-BlockRowRepeatNestedColRepeat」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「BlockRowRepeatNestedColRepeatTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample035-BlockRowRepeatNestedColRepeat」直下に配置。





























4.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
5.「Main.java」を以下の様に入力。
import java.util.ArrayList;
import java.util.List;

import org.bbreak.excella.reports.exporter.ExcelExporter;
import org.bbreak.excella.reports.model.ParamInfo;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.BlockRowRepeatParamParser;
import org.bbreak.excella.reports.tag.ColRepeatParamParser;
import org.bbreak.excella.reports.tag.SingleParamParser;

public class Main {

    public static void main(String[] args) throws Exception {
        String templateFilePath = "BlockRowRepeatNestedColRepeatTemplate.xls";
        String outputFileName = "BlockRowRepeatNestedColRepeat";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);

        ReportBook outputBook = new ReportBook(templateFilePath,
                outputFilePath, ExcelExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("TemplateSheet", "Sheet1");
        outputBook.addReportSheet(outputSheet);


        List<ParamInfo> personList = new ArrayList<ParamInfo>();
        personList.add(createNameData("あいうえお", "男", "21"));
        personList.add(createNameData("かきくけこ", "女", "28"));
        personList.add(createNameData("さしすせそ", "男", "32"));
        outputSheet.addParam(BlockRowRepeatParamParser.DEFAULT_TAG, "参加者", personList.toArray());

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);
    }

    private static ParamInfo createNameData(String name, String gendar, String age) {
        ParamInfo nameData = new ParamInfo();
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "名前", name);
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "性別", gendar);
        nameData.addParam(SingleParamParser.DEFAULT_TAG, "年齢", age);
        List<String> attributeList = new ArrayList<String>();
        attributeList.add("属性1");
        attributeList.add("属性2");
        attributeList.add("属性3");
        nameData.addParam(ColRepeatParamParser.DEFAULT_TAG, "属性", attributeList.toArray());
        return nameData;
    }
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
9.コンソールにエラーが出力されていないか確認。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
10.「リフレッシュ(ローカルファイルとの同期)の方法」の手順で、プロジェクトをリフレッシュ。
11.「ExCellaSample035-BlockRowRepeatNestedColRepeat/BlockRowRepeatNestedColRepeat.xls」が作成されています。
12.「ExCellaSample035-BlockRowRepeatNestedColRepeat/BlockRowRepeatNestedColRepeat.xls」をダブルクリック。
13.「BlockRowRepeatNestedColRepeat.xls」が以下の様に開けば成功です。





























以上です。

ExCella Reports1.4で行を繰り返しでJavaオブジェクトのフィールドをマッピングし合計を計算する方法

【目的】
ExCella Reports1.4のライブラリを使用し帳票・Excelのファイルで列方向にブロック単位で出力時にJavaオブジェクトのフィールドをマッピングし合計を計算します。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample034-BlockRowRepeatJavaMappingSum」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「BlockRowRepeatJavaMappingSumTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample034-BlockRowRepeatJavaMappingSum」直下に配置。





























4.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
5.「Main.java」を以下の様に入力。
import java.util.ArrayList;
import java.util.List;

import org.bbreak.excella.reports.exporter.ExcelExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.BlockRowRepeatParamParser;

public class Main {

    public static void main(String[] args) throws Exception {
        String templateFilePath = "BlockRowRepeatJavaMappingSumTemplate.xls";
        String outputFileName = "BlockRowRepeatJavaMappingSum";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);

        ReportBook outputBook = new ReportBook(templateFilePath,
                outputFilePath, ExcelExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("TemplateSheet", "Sheet1");
        outputBook.addReportSheet(outputSheet);


        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("あいうえお", "男", "21", 3000));
        personList.add(new Person("かきくけこ", "女", "28", 2000));
        personList.add(new Person("さしすせそ", "男", "32", 3000));
        outputSheet.addParam(BlockRowRepeatParamParser.DEFAULT_TAG, "参加者", personList.toArray());

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);
    }
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.「Javaクラスファイルの作成方法」の手順で、「Person」というクラスを作成。
9.「Person.java」を以下の様に入力。
public class Person {
    private String name;
    private String gendar;
    private String age;
    private int pay;

    public Person(String name, String gendar, String age, int pay) {
        this.name = name;
        this.gendar = gendar;
        this.age = age;
        this.pay = pay;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGendar() {
        return gendar;
    }

    public void setGendar(String gendar) {
        this.gendar = gendar;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public int getPay() {
        return pay;
    }

    public void setPay(int pay) {
        this.pay = pay;
    }
}
10.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
11.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
12.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
13.コンソールにエラーが出力されていないか確認。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
14.「リフレッシュ(ローカルファイルとの同期)の方法」の手順で、プロジェクトをリフレッシュ。
15.「ExCellaSample034-BlockRowRepeatJavaMappingSum/BlockRowRepeatJavaMappingSum.xls」が作成されています。
16.「ExCellaSample034-BlockRowRepeatJavaMappingSum/BlockRowRepeatJavaMappingSum.xls」をダブルクリック。
17.「BlockRowRepeatJavaMappingSum.xls」が以下の様に開けば成功です。





























以上です。

ExCella Reports1.4で行を繰り返しでJavaオブジェクトのフィールドをマッピングする方法

【目的】
ExCella Reports1.4のライブラリを使用し帳票・Excelのファイルで列方向にブロック単位で出力時にJavaオブジェクトのフィールドをマッピングします。



【手順】
1.「Javaプロジェクトの作成方法」の手順で、「ExCellaSample033-BlockRowRepeatJavaMapping」といプロジェクトを作成。
2.「excella-reports-1.4.jarとそれに依存ライブラリを設定する方法」の手順で、プロジェクトにExCella Reports1.4とそれに依存するライブラリを追加。
3.「BlockRowRepeatJavaMappingTemplate.xls」という名前の、以下の様なテンプレートファイルを作成し、「ExCellaSample033-BlockRowRepeatJavaMapping」直下に配置。





























4.「Javaクラスファイルの作成方法」の手順で、「Main」というクラスを作成。
5.「Main.java」を以下の様に入力。
import java.util.ArrayList;
import java.util.List;

import org.bbreak.excella.reports.exporter.ExcelExporter;
import org.bbreak.excella.reports.model.ReportBook;
import org.bbreak.excella.reports.model.ReportSheet;
import org.bbreak.excella.reports.processor.ReportProcessor;
import org.bbreak.excella.reports.tag.BlockRowRepeatParamParser;

public class Main {

    public static void main(String[] args) throws Exception {
        String templateFilePath = "BlockRowRepeatJavaMappingTemplate.xls";
        String outputFileName = "BlockRowRepeatJavaMapping";
        String outputFileDir = "";
        String outputFilePath = outputFileDir.concat(outputFileName);

        ReportBook outputBook = new ReportBook(templateFilePath,
                outputFilePath, ExcelExporter.FORMAT_TYPE);

        ReportSheet outputSheet = new ReportSheet("TemplateSheet", "Sheet1");
        outputBook.addReportSheet(outputSheet);


        List<Person> personList = new ArrayList<Person>();
        personList.add(new Person("あいうえお", "男", "21"));
        personList.add(new Person("かきくけこ", "女", "28"));
        personList.add(new Person("さしすせそ", "男", "32"));
        outputSheet.addParam(BlockRowRepeatParamParser.DEFAULT_TAG, "参加者", personList.toArray());

        ReportProcessor reportProcessor = new ReportProcessor();
        reportProcessor.process(outputBook);
    }
}
6.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
7.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
8.「Javaクラスファイルの作成方法」の手順で、「Person」というクラスを作成。
9.「Person.java」を以下の様に入力。
public class Person {
    private String name;
    private String gendar;
    private String age;

    public Person(String name, String gendar, String age) {
        this.name = name;
        this.gendar = gendar;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGendar() {
        return gendar;
    }

    public void setGendar(String gendar) {
        this.gendar = gendar;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}
10.「Ctrl+Shift+O」を押し、パッケージのインポート文を補完。
11.「Ctrl+Shift+F」を押し、ソースコードをフォーマッティング。
12.「Javaプロジェクトの実行方法」の手順で、「Main.java」を実行。
13.コンソールにエラーが出力されていないか確認。
(※コンソールが表示されていない場合は、「コンソール・ビューの表示方法」を確認)
14.「リフレッシュ(ローカルファイルとの同期)の方法」の手順で、プロジェクトをリフレッシュ。
15.「ExCellaSample033-BlockRowRepeatJavaMapping/BlockRowRepeatJavaMapping.xls」が作成されています。
16.「ExCellaSample033-BlockRowRepeatJavaMapping/BlockRowRepeatJavaMapping.xls」をダブルクリック。
17.「BlockRowRepeatJavaMapping.xls」が以下の様に開けば成功です。





























以上です。

関連記事