public static void main(String[] args) throws Exception { // クラスの場所から読み込むファイルのパスを取得 String filename = "勤務表.xls"; URL url = WorkFactReportReader.class.getResource(filename); String filepath = URLDecoder.decode(url.getFile(), "UTF-8"); ///// パース処理 ///// BookController controller = new BookController(filepath); // 標準パーサの追加 controller.addTagParser(new ListParser("@List")); controller.addTagParser(new MapParser("@Map")); controller.addTagParser(new ArraysParser("@Arrays")); controller.addTagParser(new ObjectsParser("@Objects")); controller.addTagParser(new MapsParser("@Maps")); // コンソール出力用エクスポータの設定 controller.addBookExporter(new ConsoleExporter()); // デバッグ用エラーハンドラの設定(エラー時はエラーファイルを作成) controller.setErrorHandler(new DebugErrorHandler()); // パースの実行 controller.parseBook(); // パース結果の取得 BookData bookData = controller.getBookData(); // パース結果の操作 List<String> sheetNames = bookData.getSheetNames(); for (String sheetName : sheetNames) { bookData.getSheetData(sheetName); } }
/** * ワークブックの変換処理を実行する。 * * @param reportBook ワークブックの置換情報 */ private void processBook(ReportBook reportBook) { if (reportBook == null) { return; } Workbook workbook = getTemplateWorkbook(reportBook.getInputStream()); for (ReportProcessListener listener : listeners) { listener.preBookParse(workbook, reportBook); } checkReportBook(reportBook); // テンプレート展開 Set<Integer> delTemplateIndexs = expandTemplate(workbook, reportBook); // 出力ファイル取得 BookController controller = new BookController(workbook); // Parserの設定 for (ReportsTagParser<?> tagParser : parsers.values()) { controller.addTagParser(tagParser); } // リスナーの設定 controller.addSheetParseListener(new RemoveAdapter()); for (ReportProcessListener listener : listeners) { controller.addSheetParseListener(listener); } // Exporterの設定 for (ConvertConfiguration configuration : reportBook.getConfigurations()) { if (configuration == null) { continue; } for (ReportBookExporter reportExporter : exporters.values()) { if (configuration.getFormatType().equals(reportExporter.getFormatType())) { reportExporter.setConfiguration(configuration); reportExporter.setOutputStream(reportBook.getOutputStream()); controller.addBookExporter(reportExporter); } } } ReportsParserInfo reportsParserInfo = new ReportsParserInfo(); reportsParserInfo.setReportParsers(new ArrayList<ReportsTagParser<?>>(parsers.values())); reportsParserInfo.setReportBook(reportBook); BookData bookData = controller.getBookData(); bookData.clear(); for (String sheetName : controller.getSheetNames()) { if (sheetName.startsWith(BookController.COMMENT_PREFIX)) { continue; } ReportSheet reportSheet = ReportsUtil.getReportSheet(sheetName, reportBook); if (reportSheet != null) { reportsParserInfo.setParamInfo(reportSheet.getParamInfo()); // 解析の実行 SheetData sheetData = controller.parseSheet(sheetName, reportsParserInfo); // 結果の追加 controller.getBookData().putSheetData(sheetName, sheetData); } } // 不要テンプレート削除 for (Integer deleteSheetIndex : delTemplateIndexs) { workbook.removeSheetAt(deleteSheetIndex); } // 出力処理前にリスナー呼び出し for (ReportProcessListener listener : listeners) { listener.postBookParse(workbook, reportBook); } // 出力処理の実行 for (BookExporter exporter : controller.getExporter()) { if (exporter != null) { exporter.setup(); try { exporter.export(workbook, bookData); } finally { exporter.tearDown(); } } } }