package gw.rating.rtm.excel uses gw.api.web.document.DocumentsHelper uses gw.document.DocumentContentsInfo uses gw.lang.Deprecated uses gw.pl.util.FileUtil uses gw.rating.rtm.domain.ErrorCollector uses gw.rating.rtm.domain.table.RateBookModel uses gw.rating.rtm.domain.table.RateTableModel uses org.apache.poi.ss.usermodel.Workbook uses org.apache.poi.xssf.usermodel.XSSFSheet uses org.apache.poi.xssf.usermodel.XSSFWorkbook uses java.io.FileInputStream uses java.io.FileOutputStream class ExcelExport { public static final var EXCEL_MIME_TYPE : String = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" @Deprecated(:value="Use RateBookBatchExport.start() instead.", :version="9.0.0") function exportRateBook(rateBook : RateBook) { var workbook = createRateBookWorkbook(rateBook) saveExcelFile(workbook, rateBook.LocalisedBookName + " - " + rateBook.BookEdition) } function updateWorkbookWithErrorTables(workbook: XSSFWorkbook, model: RateBookModel, errorCollectorMap: Map) { //Clear validation error messages and highlighting before update var codesOfRateTablesWithErrors = errorCollectorMap?.Keys.map(\tableDef -> tableDef.TableCode).toSet() var rateTableValidationRemover = new RateTableValidationRemover(workbook, codesOfRateTablesWithErrors) rateTableValidationRemover.clearValidationErrorData() model.accept(new RateTableErrorExportVisitor(workbook, errorCollectorMap)) } function exportRateTableImportErrors(workbook: XSSFWorkbook, model: RateBookModel, errorCollectorMap: Map) { updateWorkbookWithErrorTables(workbook, model, errorCollectorMap) var fileName = model.Book.LocalisedBookName + " - " + model.Book.BookEdition + " - " + "Rate Tables_error" saveExcelFile(workbook, fileName) } function exportRateTable(model: RateTableModel) { var workbook = createRateTableWorkbook(model, model.RateTableDefinition.TableCode) saveExcelFile(workbook, model.RateTableDefinition.TableCode) } function createRateBookWorkbook(rateBook: RateBook): XSSFWorkbook { var workbook = new XSSFWorkbook() var model = new RateBookModel(rateBook) model.accept(new RateBookExcelExportVisitor(workbook)) workbook.each(\sheet -> (sheet as XSSFSheet).disableLocking()) return workbook } protected function createRateTableWorkbook(model: RateTableModel, tableTitle: String): XSSFWorkbook { var workbook = new XSSFWorkbook() model.accept(new RateBookExcelExportVisitor(workbook)) workbook.toList().each( \ elt -> (elt as XSSFSheet).disableLocking()) return workbook } function saveExcelFile(workbook: Workbook, title: String): void { var excelFileName = "${title}.xlsx" var tmpWksFile = FileUtil.createDeletableTempFile("wks",null) try { using(var os = new FileOutputStream(tmpWksFile)) { workbook.write(os) } var dci = new DocumentContentsInfo(DocumentContentsInfo.ContentResponseType.DOCUMENT_CONTENTS, new FileInputStream(tmpWksFile), EXCEL_MIME_TYPE) DocumentsHelper.renderDocumentContentsWithDownloadDisposition(excelFileName, dci) } finally { tmpWksFile.delete() } } @Deprecated(:value="No longer necessary: was only being used to track PC Version number, but that is now done in a field on each worksheet.", :version="PC 9.0.0") public static function createMetaDataVariable(workbook: XSSFWorkbook, variableName: String, variableValue: String) { var variable = workbook.createName() variable.setNameName(variableName) variable.setRefersToFormula("\"${variableValue}\"") } @Deprecated(:value="No longer necessary, since we no longer create any metadata variables.", :version="PC 9.0.0") public static function retrieveMetaDataVariableValue(workbook: XSSFWorkbook, variableName: String): String { var variableValue = workbook.getName(variableName).RefersToFormula if (variableValue == null or variableValue.length < 2 or not(variableValue.charAt(0) == '\"') or not(variableValue.charAt(variableValue.length - 1) == '\"')) { return null } return variableValue.substring(1, variableValue.length - 1) } public static function createHyperlinkAddressToWorksheet(targetSheetName: String): String { return "'" + targetSheetName + "'!A1" } }