diff --git a/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/csv/function/WriteCsvFunction.java b/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/csv/function/WriteCsvFunction.java index edc7ac7e8737a4344c29e435fecc0a346f9ee690..6fc30452929c14d795138a8268d21c537c169376 100644 --- a/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/csv/function/WriteCsvFunction.java +++ b/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/csv/function/WriteCsvFunction.java @@ -1,5 +1,6 @@ package org.tinygroup.tinyscript.csv.function; +import java.io.IOException; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; @@ -87,7 +88,13 @@ public class WriteCsvFunction extends AbstractScriptFunction { private void writeCsv(DataSet dataSet, String filePath, String encode, int start, int end, String type) throws Exception { - FileObject csvFile = FileObjectUtil.getOrCreateFile(filePath, false); + FileObject csvFile = null; + try { + csvFile = FileObjectUtil.getOrCreateFile(filePath, false); + } catch (IOException e) { + throw new ScriptException(ResourceBundleUtil.getResourceMessage("excel", "file.create.error", filePath), e); + } + CSVPrinter printer = null; try { printer = new CSVPrinter(new OutputStreamWriter(csvFile.getOutputStream(), encode), @@ -101,12 +108,24 @@ public class WriteCsvFunction extends AbstractScriptFunction { for (Field field : dataSet.getFields()) { records.add(field.getName()); } - printer.printRecord(records); + + try { + printer.printRecord(records); + } catch (IOException e) { + printer.close(); + throw new ScriptException(ResourceBundleUtil.getResourceMessage("excel", "csv.write.title.error"), e); + } for (int i = start; i <= end; i++) { records = new ArrayList(); for (int j = 1; j <= dataSet.getColumns(); j++) { - records.add(dataSet.getData(i, j)); + try { + records.add(dataSet.getData(i, j)); + } catch (Exception e) { + printer.close(); + throw new ScriptException(ResourceBundleUtil.getResourceMessage("excel", "write.cell.error", i, j), + e); + } } printer.printRecord(records); } diff --git a/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/excel/function/WriteExcelFunction.java b/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/excel/function/WriteExcelFunction.java index b359385826c9fdabf165bd9fe5824454f503164e..c0d3da6787030156a8ab8358f6511f24f6659d07 100644 --- a/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/excel/function/WriteExcelFunction.java +++ b/org.tinygroup.tinyscript.excel/src/main/java/org/tinygroup/tinyscript/excel/function/WriteExcelFunction.java @@ -1,5 +1,6 @@ package org.tinygroup.tinyscript.excel.function; +import java.io.IOException; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFWorkbook; @@ -76,20 +77,29 @@ public class WriteExcelFunction extends AbstractScriptFunction { private void writeExcel(String fileUrl, Object dataSet, List sheetNames, int start, int end) throws Exception { Workbook wb = null; - FileObject excelFile = FileObjectUtil.getOrCreateFile(fileUrl, false); + FileObject excelFile; + + try { + excelFile = FileObjectUtil.getOrCreateFile(fileUrl, false); + } catch (IOException e) { + throw new ScriptException(ResourceBundleUtil.getResourceMessage("excel", "file.create.error", fileUrl)); + } if (fileUrl.endsWith("xls")) { wb = new HSSFWorkbook(); } else if (fileUrl.endsWith("xlsx")) { wb = new XSSFWorkbook(); + } else { + throw new ScriptException(ResourceBundleUtil.getResourceMessage("excel", "file.type.nonsupport")); } if (dataSet instanceof DataSet) { writeSheet(wb, (DataSet) dataSet, (sheetNames == null || sheetNames.size() == 0) ? "sheet1" : sheetNames.get(0), start, checkEnd((DataSet) dataSet, end)); - } else { + } else if (dataSet instanceof List && ((List) dataSet).get(0) instanceof DataSet) { List dataSets = ((List) dataSet); + for (int i = 0; i < dataSets.size(); i++) { String sheetName = null; @@ -101,6 +111,9 @@ public class WriteExcelFunction extends AbstractScriptFunction { writeSheet(wb, dataSets.get(i), sheetName, start, checkEnd(dataSets.get(i), end)); } + } else { + wb.close(); + throw new ScriptException(ResourceBundleUtil.getResourceMessage("excel", "dataset.type.nonsupport")); } wb.write(excelFile.getOutputStream()); @@ -127,7 +140,11 @@ public class WriteExcelFunction extends AbstractScriptFunction { row = sheet.createRow(i - start); for (int j = 1; j <= dataSet.getFields().size(); j++) { cell = row.createCell(j - 1); - cell.setCellValue(dataSet.getData(i, j).toString()); + try { + cell.setCellValue(dataSet.getData(i, j).toString()); + } catch (Exception e) { + throw new ScriptException(ResourceBundleUtil.getResourceMessage("excel", "write.cell.error", i, j)); + } cell.setCellStyle(style); } } diff --git a/org.tinygroup.tinyscript.excel/src/main/resources/excel.properties b/org.tinygroup.tinyscript.excel/src/main/resources/excel.properties index 895d69046df719f646c0f199086869e19ae1ba34..b3a814bef7253ea539aa4e8a9fd99ea6eaf26647 100644 --- a/org.tinygroup.tinyscript.excel/src/main/resources/excel.properties +++ b/org.tinygroup.tinyscript.excel/src/main/resources/excel.properties @@ -1,2 +1,7 @@ -csv.type.error=CSV mode error, unsupported CSV mode -file.find.error=An exception occurred while extracting [%s] \ No newline at end of file +csv.type.error=CSV mode error, unsupported CSV mode:[%s] +csv.write.title.error=Write the dataset field failed! +file.find.error=An exception occurred while extracting [%s] +file.create.error=Failed to create file:[%s] +file.type.nonsupport=Only support xls and xlsx file types! +dataset.type.nonsupport=Only support for dataset and list dataset! +write.cell.error=Write a cell error:[%d,%d] \ No newline at end of file diff --git a/org.tinygroup.tinyscript.excel/src/main/resources/excel_zh_CN.properties b/org.tinygroup.tinyscript.excel/src/main/resources/excel_zh_CN.properties index 75fd7545bc13a3ea54e6f9b0137e5e67a35ff251..eebac439a88f5f7c2b39f8a3b626f870e3f7958f 100644 --- a/org.tinygroup.tinyscript.excel/src/main/resources/excel_zh_CN.properties +++ b/org.tinygroup.tinyscript.excel/src/main/resources/excel_zh_CN.properties @@ -1,2 +1,7 @@ csv.type.error=\u0063\u0073\u0076\u6a21\u5f0f\u9519\u8bef\u002c\u4e0d\u652f\u6301\u7684\u0063\u0073\u0076\u6a21\u5f0f:[%s] -file.find.error=\u62bd\u53d6[%s]\u6587\u4ef6\uff0c\u53d1\u751f\u5f02\u5e38 \ No newline at end of file +csv.write.title.error=\u5199\u5165\u5e8f\u8868\u5b57\u6bb5\u540d\u5931\u8d25\uff01 +file.find.error=\u62bd\u53d6[%s]\u6587\u4ef6\uff0c\u53d1\u751f\u5f02\u5e38 +file.create.error=\u521b\u5efa\u6587\u4ef6\u5931\u8d25\uff1a[%s] +file.type.nonsupport=\u4ec5\u652f\u6301\u0078\u006c\u0073\u548c\u0078\u006c\u0073\u0078\u6587\u4ef6\u7c7b\u578b\uff01 +dataset.type.nonsupport=\u4ec5\u652f\u6301\u5e8f\u8868\u96c6\u5408\u548c\u5e8f\u8868\uff01 +write.cell.error=\u5199\u5165\u5355\u5143\u683c\u62a5\u9519\uff1a[%d,%d] diff --git a/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/ExcelTest.java b/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/ExcelTest.java index 21944b03dad72d3b45062b0874a49eb009816aca..0e50573488c4b18f19313fc93fcddc508ef80b35 100644 --- a/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/ExcelTest.java +++ b/org.tinygroup.tinyscript/src/test/java/org/tinygroup/tinyscript/ExcelTest.java @@ -2,6 +2,8 @@ package org.tinygroup.tinyscript; import junit.framework.TestCase; +import java.util.List; + import org.tinygroup.tinyscript.dataset.DataSet; import org.tinygroup.tinyscript.impl.DefaultTinyScriptEngine; @@ -10,36 +12,38 @@ public class ExcelTest extends TestCase { public void testXls() throws Exception{ ScriptEngine engine = new DefaultTinyScriptEngine(); - DataSet dataSet = (DataSet) engine.execute("return readExcel(\"src/test/resources/hello.xls\");"); + @SuppressWarnings("unchecked") + List dataSet = (List) engine.execute("return readExcel(\"src/test/resources/hello.xls\");"); assertNotNull(dataSet); - assertEquals(3, dataSet.getColumns()); - assertEquals(5, dataSet.getRows()); - assertEquals(true, dataSet.next()); - assertEquals("0.0", (String)dataSet.getData("name")); - assertEquals("111.0", dataSet.getData("age")); - assertEquals(true,dataSet.absolute(6)); - assertEquals("", dataSet.getData("descrption")); + assertEquals(3, dataSet.get(0).getColumns()); + assertEquals(5, dataSet.get(0).getRows()); + assertEquals(true, dataSet.get(0).next()); + assertEquals("0.0", (String)dataSet.get(0).getData("name")); + assertEquals("111.0", dataSet.get(0).getData("age")); + assertEquals(true,dataSet.get(0).absolute(6)); + assertEquals("", dataSet.get(0).getData("descrption")); - dataSet.setIndexFromOne(false); - assertEquals(true,dataSet.absolute(5)); - assertEquals("", dataSet.getData("descrption")); + dataSet.get(0).setIndexFromOne(false); + assertEquals(true,dataSet.get(0).absolute(5)); + assertEquals("", dataSet.get(0).getData("descrption")); } public void testXlsx() throws Exception{ ScriptEngine engine = new DefaultTinyScriptEngine(); - DataSet dataSet = (DataSet) engine.execute("return readExcel(\"src/test/resources/hello.xlsx\");"); + @SuppressWarnings("unchecked") + List dataSet = (List) engine.execute("return readExcel(\"src/test/resources/hello.xlsx\");"); assertNotNull(dataSet); - assertEquals(3, dataSet.getColumns()); - assertEquals(5, dataSet.getRows()); - assertEquals(true, dataSet.next()); - assertEquals("0.0", (String)dataSet.getData("name")); - assertEquals("111.0", dataSet.getData("age")); - assertEquals(true,dataSet.absolute(6)); - assertEquals("", dataSet.getData("descrption")); + assertEquals(3, dataSet.get(0).getColumns()); + assertEquals(5, dataSet.get(0).getRows()); + assertEquals(true, dataSet.get(0).next()); + assertEquals("0.0", (String)dataSet.get(0).getData("name")); + assertEquals("111.0", dataSet.get(0).getData("age")); + assertEquals(true,dataSet.get(0).absolute(6)); + assertEquals("", dataSet.get(0).getData("descrption")); - dataSet.setIndexFromOne(false); - assertEquals(true,dataSet.absolute(5)); - assertEquals("", dataSet.getData("descrption")); + dataSet.get(0).setIndexFromOne(false); + assertEquals(true,dataSet.get(0).absolute(5)); + assertEquals("", dataSet.get(0).getData("descrption")); } }