123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- package net.lab1024.smartadmin.util.excel;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.CellType;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.util.CellRangeAddress;
- /**
- * @author zhuoda
- */
- public class SmartSheet {
- final String name;
- private final int rowCount;
- private final int columnCount;
- private final String[][] datas;
- public SmartSheet(org.apache.poi.ss.usermodel.Sheet sheet) {
- this.name = sheet.getSheetName();
- this.rowCount = sheet.getLastRowNum() + 1;
- // 初始化基本数据
- int maxColumnCount = 0;
- this.datas = new String[rowCount][];
- for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
- Row row = sheet.getRow(rowIndex);
- if (row == null) {
- continue;
- }
- int _columnCount = row.getLastCellNum() + 1;
- this.datas[rowIndex] = new String[_columnCount];
- for (int colIndex = 0; colIndex < _columnCount; colIndex++) {
- this.datas[rowIndex][colIndex] = getCellContents(row.getCell(colIndex));
- }
- if (maxColumnCount < _columnCount) {
- maxColumnCount = _columnCount;
- }
- }
- this.columnCount = maxColumnCount;
- // 根据单元格合并情况,填充内容
- for (int index = 0; index < sheet.getNumMergedRegions(); index++) {
- CellRangeAddress mergedRegion = sheet.getMergedRegion(index);
- String upperLeftData = this.datas[mergedRegion.getFirstRow()][mergedRegion.getFirstColumn()];
- for (int rowIndex = mergedRegion.getFirstRow(); rowIndex <= mergedRegion.getLastRow(); rowIndex++) {
- String[] _rowDatas = this.datas[rowIndex];
- if (_rowDatas == null) {
- this.datas[rowIndex] = new String[mergedRegion.getLastColumn() + 1];
- } else if (_rowDatas.length < mergedRegion.getLastColumn() + 1) {
- String[] newStrArray = new String[mergedRegion.getLastColumn() + 1];
- System.arraycopy(_rowDatas, 0, newStrArray, 0, _rowDatas.length);
- this.datas[rowIndex] = newStrArray;
- }
- for (int colIndex = mergedRegion.getFirstColumn(); colIndex <= mergedRegion.getLastColumn(); colIndex++) {
- this.datas[rowIndex][colIndex] = upperLeftData;
- }
- }
- }
- }
- private String getCellContents(Cell cell) {
- if (cell == null) {
- return null;
- }
- return getCellContents(cell.getCellType(), cell);
- }
- private String getCellContents(CellType type, Cell cell) {
- switch (type) {
- case BLANK:
- return "";
- case NUMERIC:
- return cell.getStringCellValue();
- case STRING:
- return cell.getStringCellValue();
- case FORMULA:
- return getCellContents(cell.getCachedFormulaResultType(), cell);
- case BOOLEAN:
- return String.valueOf(cell.getBooleanCellValue());
- case ERROR:
- default:
- throw new IllegalArgumentException(String.format("unsupported cell type:%d, col:%d, row:%d, sheet:%s", cell.getCellType(), cell.getColumnIndex(),
- cell.getRowIndex(), getName()));
- }
- }
- public int getRowCount() {
- return rowCount;
- }
- public int getColumnCount() {
- return columnCount;
- }
- public String getValue(int rowIndex, int columnIndex) {
- if (rowIndex < 0 || rowIndex >= datas.length) {
- return "";
- }
- if (columnIndex < 0 || datas[rowIndex] == null || columnIndex >= datas[rowIndex].length) {
- return "";
- }
- String value = datas[rowIndex][columnIndex];
- return value == null ? "": value;
- }
- public String getName() {
- return name;
- }
- }
|