# spreadsheet **Repository Path**: nomou/spreadsheet ## Basic Information - **Project Name**: spreadsheet - **Description**: 电子表格(csv, microsoft excel) 流式API(适用于关注性能和数据, 不需要考虑表格样式的场景) - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-09-04 - **Last Updated**: 2025-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spreadsheet - streaming spreadsheet API 电子表格(csv, microsoft excel) 流式API(适用于不考虑表格样式,主要考虑数据的场景) # Usage ### 引入依赖 ```xml com.github.nomou nougat-lang ${nougat.version} com.github.nomou.spreadsheet spreadsheet-api ${spreadsheet.version} com.github.nomou spreadsheet-csv ${spreadsheet.version} com.github.nomou spreadsheet-ms-excel ${spreadsheet.version} ``` ### 写入 ```java final OutputStream out = new FileOutputStream("out.xlsx"); final SpreadsheetWriter writer = Spreadsheet.getWriterFactory("xlsx").create(out); try { writer.configure("encoding", "UTF-8") .start() .write("SKU编码", "商品名称", "UPC编码", "价格").next() .write("B10-4").write("B10-4").write("B10-4").write(35.4); } finally { writer.close(); } ``` ### 按照事件解析 ```java final InputStream in = new BufferedInputStream(new FileInputStream("out.xlsx")); final SpreadsheetParser parser = Spreadsheet.getParserFactory("xlsx", "xls", "csv").create(in); parser.configure("encoding", "UTF-8"); try { int next; while (parser.hasNext()) { next = parser.next(); if (SpreadsheetParser.START_WORKBOOK == next) { // TODO System.out.println("Start parsing workbook"); } else if (SpreadsheetParser.END_WORKBOOK == next) { System.out.println("End of workbook"); } else if (SpreadsheetParser.START_WORKSHEET == next) { System.out.println("Start parsing worksheet"); } else if (SpreadsheetParser.END_WORKSHEET == next) { System.out.println("End of worksheet"); } else if (SpreadsheetParser.START_RECORD == next) { System.out.println("start parsing record, row=" + parser.getRow()); } else if (SpreadsheetParser.END_RECORD == next) { System.out.println("end of record, row=" + parser.getRow()); } else if (SpreadsheetParser.START_CELL == next) { final int row = parser.getRow(); final int col = parser.getCol(); final Object value = parser.getValue(); System.out.println(String.format("start cell, row=%s, col=%s, value=%s", row, col, value)); } else if (SpreadsheetParser.END_CELL == next) { final int row = parser.getRow(); final int col = parser.getCol(); final Object value = parser.getValue(); System.out.println(String.format("end cell, row=%s, col=%s, value=%s", row, col, value)); } else { System.out.println("Other ---------: " + next); } } } finally { parser.close(); } ``` ### 按照行解析 ```java final InputStream in = new BufferedInputStream(new FileInputStream("out.xlsx")); final SpreadsheetParser parser = Spreadsheet.getParserFactory("xlsx", "xls", "csv").create(in); try { parser.configure("encoding", "UTF-8"); do { final Object[] record = parser.nextRecord(true); if (null != record) { final int row = parser.getRow(); final int sheet = parser.getWorksheetIndex(); System.out.println("sheet" + sheet + ":" + row + ":" + Arrays.toString(record)); } } while (SpreadsheetParser.END_WORKBOOK != parser.getEventType()); } finally { parser.close(); } ```