org.apache.poi.hssf.record.LabelSSTRecord Java Examples
The following examples show how to use
org.apache.poi.hssf.record.LabelSSTRecord.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: RowBlock.java From dremio-oss with Apache License 2.0 | 6 votes |
static boolean isRowBlockRecord(int sid) { switch (sid) { case RowRecord.sid: case BlankRecord.sid: case BoolErrRecord.sid: case FormulaRecord.sid: case LabelRecord.sid: case LabelSSTRecord.sid: case NumberRecord.sid: case RKRecord.sid: case ArrayRecord.sid: case SharedFormulaRecord.sid: case TableRecord.sid: return true; } return false; }
Example #2
Source File: LabelSstRecordHandler.java From easyexcel with Apache License 2.0 | 6 votes |
@Override public void processRecord(XlsReadContext xlsReadContext, Record record) { LabelSSTRecord lsrec = (LabelSSTRecord)record; ReadCache readCache = xlsReadContext.readWorkbookHolder().getReadCache(); Map<Integer, Cell> cellMap = xlsReadContext.xlsReadSheetHolder().getCellMap(); if (readCache == null) { cellMap.put((int)lsrec.getColumn(), CellData.newEmptyInstance(lsrec.getRow(), (int)lsrec.getColumn())); return; } String data = readCache.get(lsrec.getSSTIndex()); if (data == null) { cellMap.put((int)lsrec.getColumn(), CellData.newEmptyInstance(lsrec.getRow(), (int)lsrec.getColumn())); return; } if (xlsReadContext.currentReadHolder().globalConfiguration().getAutoTrim()) { data = data.trim(); } cellMap.put((int)lsrec.getColumn(), CellData.newInstance(data, lsrec.getRow(), (int)lsrec.getColumn())); xlsReadContext.xlsReadSheetHolder().setTempRowType(RowTypeEnum.DATA); }
Example #3
Source File: RecordOrderer.java From lams with GNU General Public License v2.0 | 6 votes |
/** * @return <code>true</code> if the specified record id normally appears in the row blocks section * of the sheet records */ public static boolean isRowBlockRecord(int sid) { switch (sid) { case RowRecord.sid: case BlankRecord.sid: case BoolErrRecord.sid: case FormulaRecord.sid: case LabelRecord.sid: case LabelSSTRecord.sid: case NumberRecord.sid: case RKRecord.sid: case ArrayRecord.sid: case SharedFormulaRecord.sid: case TableRecord.sid: return true; } return false; }
Example #4
Source File: HSSFCell.java From lams with GNU General Public License v2.0 | 6 votes |
/** * used internally -- given a cell value record, figure out its type */ private static CellType determineType(CellValueRecordInterface cval) { if (cval instanceof FormulaRecordAggregate) { return CellType.FORMULA; } // all others are plain BIFF records Record record = ( Record ) cval; switch (record.getSid()) { case NumberRecord.sid : return CellType.NUMERIC; case BlankRecord.sid : return CellType.BLANK; case LabelSSTRecord.sid : return CellType.STRING; case BoolErrRecord.sid : BoolErrRecord boolErrRecord = ( BoolErrRecord ) record; return boolErrRecord.isBoolean() ? CellType.BOOLEAN : CellType.ERROR; } throw new RuntimeException("Bad cell value rec (" + cval.getClass().getName() + ")"); }
Example #5
Source File: HSSFCell.java From lams with GNU General Public License v2.0 | 6 votes |
/** * Creates an HSSFCell from a CellValueRecordInterface. HSSFSheet uses this when * reading in cells from an existing sheet. * * @param book - Workbook record of the workbook containing this cell * @param sheet - Sheet record of the sheet containing this cell * @param cval - the Cell Value Record we wish to represent */ protected HSSFCell(HSSFWorkbook book, HSSFSheet sheet, CellValueRecordInterface cval) { _record = cval; _cellType = determineType(cval); _stringValue = null; _book = book; _sheet = sheet; switch (_cellType) { case STRING : _stringValue = new HSSFRichTextString(book.getWorkbook(), (LabelSSTRecord ) cval); break; case BLANK : break; case FORMULA : _stringValue=new HSSFRichTextString(((FormulaRecordAggregate) cval).getStringValue()); break; default : break; } }
Example #6
Source File: StringRecordHandler.java From easyexcel with Apache License 2.0 | 5 votes |
@Override public void decode(Record record) { LabelSSTRecord labelSSTRecord = (LabelSSTRecord) record; int currColNum = labelSSTRecord.getColumn(); handlerContext.addCol2CurrRowList(handlerContext.getSSTRecord().getString(labelSSTRecord.getSSTIndex()).toString()); handlerContext.setCurrColNum(currColNum); }
Example #7
Source File: HSSFCell.java From lams with GNU General Public License v2.0 | 5 votes |
private String convertCellValueToString() { switch (_cellType) { case BLANK: return ""; case BOOLEAN: return ((BoolErrRecord) _record).getBooleanValue() ? "TRUE" : "FALSE"; case STRING: int sstIndex = ((LabelSSTRecord)_record).getSSTIndex(); return _book.getWorkbook().getSSTString(sstIndex).getString(); case NUMERIC: return NumberToTextConverter.toText(((NumberRecord)_record).getValue()); case ERROR: return FormulaError.forInt(((BoolErrRecord)_record).getErrorValue()).getString(); case FORMULA: // should really evaluate, but HSSFCell can't call HSSFFormulaEvaluator // just use cached formula result instead break; default: throw new IllegalStateException("Unexpected cell type (" + _cellType + ")"); } FormulaRecordAggregate fra = ((FormulaRecordAggregate)_record); FormulaRecord fr = fra.getFormulaRecord(); switch (CellType.forInt(fr.getCachedResultType())) { case BOOLEAN: return fr.getCachedBooleanValue() ? "TRUE" : "FALSE"; case STRING: return fra.getStringValue(); case NUMERIC: return NumberToTextConverter.toText(fr.getValue()); case ERROR: return FormulaError.forInt(fr.getCachedErrorValue()).getString(); default: throw new IllegalStateException("Unexpected formula result type (" + _cellType + ")"); } }
Example #8
Source File: HSSFCell.java From lams with GNU General Public License v2.0 | 5 votes |
/** * Chooses a new boolean value for the cell when its type is changing.<p> * * Usually the caller is calling setCellType() with the intention of calling * setCellValue(boolean) straight afterwards. This method only exists to give * the cell a somewhat reasonable value until the setCellValue() call (if at all). * TODO - perhaps a method like setCellTypeAndValue(int, Object) should be introduced to avoid this */ private boolean convertCellValueToBoolean() { switch (_cellType) { case BOOLEAN: return (( BoolErrRecord ) _record).getBooleanValue(); case STRING: int sstIndex = ((LabelSSTRecord)_record).getSSTIndex(); String text = _book.getWorkbook().getSSTString(sstIndex).getString(); return Boolean.valueOf(text).booleanValue(); case NUMERIC: return ((NumberRecord)_record).getValue() != 0; case FORMULA: // use cached formula result if it's the right type: FormulaRecord fr = ((FormulaRecordAggregate)_record).getFormulaRecord(); checkFormulaCachedValueType(CellType.BOOLEAN, fr); return fr.getCachedBooleanValue(); // Other cases convert to false // These choices are not well justified. case ERROR: case BLANK: return false; } throw new RuntimeException("Unexpected cell type (" + _cellType + ")"); }
Example #9
Source File: HSSFWorkbook.java From lams with GNU General Public License v2.0 | 5 votes |
/** * This is basically a kludge to deal with the now obsolete Label records. If * you have to read in a sheet that contains Label records, be aware that the rest * of the API doesn't deal with them, the low level structure only provides read-only * semi-immutable structures (the sets are there for interface conformance with NO * Implementation). In short, you need to call this function passing it a reference * to the Workbook object. All labels will be converted to LabelSST records and their * contained strings will be written to the Shared String table (SSTRecord) within * the Workbook. * * @param records a collection of sheet's records. * @param offset the offset to search at * @see org.apache.poi.hssf.record.LabelRecord * @see org.apache.poi.hssf.record.LabelSSTRecord * @see org.apache.poi.hssf.record.SSTRecord */ private void convertLabelRecords(List<Record> records, int offset) { if (log.check( POILogger.DEBUG )) { log.log(POILogger.DEBUG, "convertLabelRecords called"); } for (int k = offset; k < records.size(); k++) { Record rec = records.get(k); if (rec.getSid() == LabelRecord.sid) { LabelRecord oldrec = ( LabelRecord ) rec; records.remove(k); LabelSSTRecord newrec = new LabelSSTRecord(); int stringid = workbook.addSSTString(new UnicodeString(oldrec.getValue())); newrec.setRow(oldrec.getRow()); newrec.setColumn(oldrec.getColumn()); newrec.setXFIndex(oldrec.getXFIndex()); newrec.setSSTIndex(stringid); records.add(k, newrec); } } if (log.check( POILogger.DEBUG )) { log.log(POILogger.DEBUG, "convertLabelRecords exit"); } }
Example #10
Source File: UserModelEventListener.java From o2oa with GNU Affero General Public License v3.0 | 4 votes |
@Override public void processRecord( Record record ) { switch (record.getSid()) { case BOFRecord.sid: BOFRecord bof = (BOFRecord) record; //顺序进入新的Workbook if (bof.getType() == bof.TYPE_WORKBOOK) { logger.debug( debugger, ">>>>>>>>>>开始解析excel 文档....."); //顺序进入新的Worksheet,因为Event API不会把Excel文件里的所有数据结构都关联起来, //所以这儿一定要记录现在进入第几个sheet了。 } else if (bof.getType() == bof.TYPE_WORKSHEET) { //读取新的一个Sheet页 logger.debug( debugger, ">>>>>>>>>>开始解析sheet页面内容..."); sheetNo++; currentSheetDataMap=new ArrayList<Map<String,Object>>(); } break; //开始解析Sheet的信息,记录sheet,这儿会把所有的sheet都顺序打印出来,如果有多个sheet的话,可以顺序记入到一个List里 case BoundSheetRecord.sid: BoundSheetRecord bsr = (BoundSheetRecord) record; logger.debug( debugger, ">>>>>>>>>>New sheet named: " + bsr.getSheetname()); break; //执行行记录事件 case RowRecord.sid: RowRecord rowrec = (RowRecord) record; logger.debug( debugger, ">>>>>>>>>>记录开始, first column at " + rowrec.getFirstCol() + " last column at " + rowrec.getLastCol()); break; // SSTRecords store a array of unique strings used in Excel. case SSTRecord.sid: sstrec = (SSTRecord) record; for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) { logger.debug( debugger, ">>>>>>>>>>String table value " + k + " = " + sstrec.getString(k)); } break; //发现数字类型的cell,因为数字和日期都是用这个格式,所以下面一定要判断是不是日期格式,另外默认的数字也会被视为日期格式,所以如果是数字的话,一定要明确指定格式!!!!!!! case NumberRecord.sid: NumberRecord nr = (NumberRecord) record; //HSSFDateUtil.isInternalDateFormat(nr.getXFIndex()) 判断是否为时间列 int column=nr.getColumn(); if(column==5||column==6){ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),getTime(nr.getValue()), debugger); }else{ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),(int)nr.getValue(), debugger); } break; //发现字符串类型,这儿要取字符串的值的话,跟据其index去字符串表里读取 case LabelSSTRecord.sid: LabelSSTRecord lsr = (LabelSSTRecord)record; addDataAndrChangeRow(lsr.getRow(),lsr.getColumn(), sstrec.getString(lsr.getSSTIndex()), debugger); logger.debug( debugger, ">>>>>>>>>>文字列:"+sstrec.getString(lsr.getSSTIndex())+", 行:"+lsr.getRow()+", 列:"+lsr.getColumn()); break; case BoolErrRecord.sid: //解析boolean错误信息 BoolErrRecord ber = (BoolErrRecord)record; if(ber.isBoolean()){ addDataAndrChangeRow(ber.getRow(),ber.getColumn(), ber.getBooleanValue(), debugger); logger.debug( debugger, ">>>>>>>>>>Boolean:"+ber.getBooleanValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } if(ber.isError()){ logger.debug( debugger, ">>>>>>>>>>Error:"+ber.getErrorValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } break; //空白记录的信息 case BlankRecord.sid: BlankRecord br = (BlankRecord)record; addDataAndrChangeRow(br.getRow(),br.getColumn(), "", debugger); logger.debug( debugger, ">>>>>>>>>>空。 行:"+br.getRow()+", 列:"+br.getColumn()); break; case FormulaRecord.sid: //数式 FormulaRecord fr = (FormulaRecord)record; addDataAndrChangeRow(fr.getRow(),fr.getColumn(), fr.getValue(), debugger); logger.debug( debugger, ">>>>>>>>>>数字 。 行:"+fr.getRow()+", 列:"+fr.getColumn()); break; } }
Example #11
Source File: HSSFRichTextString.java From lams with GNU General Public License v2.0 | 4 votes |
HSSFRichTextString(InternalWorkbook book, LabelSSTRecord record) { setWorkbookReferences(book, record); _string = book.getSSTString(record.getSSTIndex()); }
Example #12
Source File: HSSFRichTextString.java From lams with GNU General Public License v2.0 | 4 votes |
/** This must be called to setup the internal work book references whenever * a RichTextString is added to a cell */ void setWorkbookReferences(InternalWorkbook book, LabelSSTRecord record) { _book = book; _record = record; }
Example #13
Source File: UserModelEventListener.java From o2oa with GNU Affero General Public License v3.0 | 4 votes |
@Override public void processRecord( Record record ) { switch (record.getSid()) { case BOFRecord.sid: BOFRecord bof = (BOFRecord) record; //顺序进入新的Workbook if (bof.getType() == bof.TYPE_WORKBOOK) { logger.debug( debugger, ">>>>>>>>>>开始解析excel 文档....."); //顺序进入新的Worksheet,因为Event API不会把Excel文件里的所有数据结构都关联起来, //所以这儿一定要记录现在进入第几个sheet了。 } else if (bof.getType() == bof.TYPE_WORKSHEET) { //读取新的一个Sheet页 logger.debug( debugger, ">>>>>>>>>>开始解析sheet页面内容..."); sheetNo++; currentSheetDataMap=new ArrayList<Map<String,Object>>(); } break; //开始解析Sheet的信息,记录sheet,这儿会把所有的sheet都顺序打印出来,如果有多个sheet的话,可以顺序记入到一个List里 case BoundSheetRecord.sid: BoundSheetRecord bsr = (BoundSheetRecord) record; logger.debug( debugger, ">>>>>>>>>>New sheet named: " + bsr.getSheetname()); break; //执行行记录事件 case RowRecord.sid: RowRecord rowrec = (RowRecord) record; logger.debug( debugger, ">>>>>>>>>>记录开始, first column at " + rowrec.getFirstCol() + " last column at " + rowrec.getLastCol()); break; // SSTRecords store a array of unique strings used in Excel. case SSTRecord.sid: sstrec = (SSTRecord) record; for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) { logger.debug( debugger, ">>>>>>>>>>String table value " + k + " = " + sstrec.getString(k)); } break; //发现数字类型的cell,因为数字和日期都是用这个格式,所以下面一定要判断是不是日期格式,另外默认的数字也会被视为日期格式,所以如果是数字的话,一定要明确指定格式!!!!!!! case NumberRecord.sid: NumberRecord nr = (NumberRecord) record; //HSSFDateUtil.isInternalDateFormat(nr.getXFIndex()) 判断是否为时间列 int column=nr.getColumn(); if(column==5||column==6){ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),getTime(nr.getValue()), debugger); }else{ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),(int)nr.getValue(), debugger); } break; //发现字符串类型,这儿要取字符串的值的话,跟据其index去字符串表里读取 case LabelSSTRecord.sid: LabelSSTRecord lsr = (LabelSSTRecord)record; addDataAndrChangeRow(lsr.getRow(),lsr.getColumn(), sstrec.getString(lsr.getSSTIndex()), debugger); logger.debug( debugger, ">>>>>>>>>>文字列:"+sstrec.getString(lsr.getSSTIndex())+", 行:"+lsr.getRow()+", 列:"+lsr.getColumn()); break; case BoolErrRecord.sid: //解析boolean错误信息 BoolErrRecord ber = (BoolErrRecord)record; if(ber.isBoolean()){ addDataAndrChangeRow(ber.getRow(),ber.getColumn(), ber.getBooleanValue(), debugger); logger.debug( debugger, ">>>>>>>>>>Boolean:"+ber.getBooleanValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } if(ber.isError()){ logger.debug( debugger, ">>>>>>>>>>Error:"+ber.getErrorValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } break; //空白记录的信息 case BlankRecord.sid: BlankRecord br = (BlankRecord)record; addDataAndrChangeRow(br.getRow(),br.getColumn(), "", debugger); logger.debug( debugger, ">>>>>>>>>>空。 行:"+br.getRow()+", 列:"+br.getColumn()); break; case FormulaRecord.sid: //数式 FormulaRecord fr = (FormulaRecord)record; addDataAndrChangeRow(fr.getRow(),fr.getColumn(), fr.getValue(), debugger); logger.debug( debugger, ">>>>>>>>>>数字 。 行:"+fr.getRow()+", 列:"+fr.getColumn()); break; } }
Example #14
Source File: UserModelEventListener.java From o2oa with GNU Affero General Public License v3.0 | 4 votes |
@SuppressWarnings({ "static-access", "unused" }) @Override public void processRecord(org.apache.poi.hssf.record.Record record) { switch (record.getSid()) { case BOFRecord.sid: BOFRecord bof = (BOFRecord) record; //顺序进入新的Workbook if (bof.getType() == bof.TYPE_WORKBOOK) { //logger.debug( "开始解析excel 文档....." ); //顺序进入新的Worksheet,因为Event API不会把Excel文件里的所有数据结构都关联起来, //所以这儿一定要记录现在进入第几个sheet了。 } else if (bof.getType() == bof.TYPE_WORKSHEET) { //读取新的一个Sheet页 //logger.debug( "开始解析sheet页面内容..." ); //System.out.println( "sheetNo="+sheetNo); sheetNo++; currentSheetDataMap=new ArrayList<Map<String,Object>>(); } break; //开始解析Sheet的信息,记录sheet,这儿会把所有的sheet都顺序打印出来,如果有多个sheet的话,可以顺序记入到一个List里 case BoundSheetRecord.sid: BoundSheetRecord bsr = (BoundSheetRecord) record; //System.out.println( "sheetName="+bsr.getSheetname()); //logger.debug( "New sheet named: " + bsr.getSheetname()); break; //执行行记录事件 case RowRecord.sid: RowRecord rowrec = (RowRecord) record; //logger.debug( "记录开始, first column at " // + rowrec.getFirstCol() + " last column at " // + rowrec.getLastCol()); break; // SSTRecords store a array of unique strings used in Excel. case SSTRecord.sid: sstrec = (SSTRecord) record; for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) { //logger.debug( "String table value " + k + " = " // + sstrec.getString(k)); } break; //发现数字类型的cell,因为数字和日期都是用这个格式,所以下面一定要判断是不是日期格式,另外默认的数字也会被视为日期格式,所以如果是数字的话,一定要明确指定格式!!!!!!! case NumberRecord.sid: NumberRecord nr = (NumberRecord) record; //HSSFDateUtil.isInternalDateFormat(nr.getXFIndex()) 判断是否为时间列 int column=nr.getColumn(); if(column==5||column==6){ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),getTime(nr.getValue())); }else{ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),(int)nr.getValue()); } break; //发现字符串类型,这儿要取字符串的值的话,跟据其index去字符串表里读取 case LabelSSTRecord.sid: LabelSSTRecord lsr = (LabelSSTRecord)record; addDataAndrChangeRow(lsr.getRow(),lsr.getColumn(), sstrec.getString(lsr.getSSTIndex())); //logger.debug( "文字列:"+sstrec.getString(lsr.getSSTIndex())+", 行:"+lsr.getRow()+", 列:"+lsr.getColumn()); break; case BoolErrRecord.sid: //解析boolean错误信息 BoolErrRecord ber = (BoolErrRecord)record; if(ber.isBoolean()){ addDataAndrChangeRow(ber.getRow(),ber.getColumn(), ber.getBooleanValue()); //logger.debug( "Boolean:"+ber.getBooleanValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } if(ber.isError()){ //logger.debug( "Error:"+ber.getErrorValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } break; //空白记录的信息 case BlankRecord.sid: BlankRecord br = (BlankRecord)record; addDataAndrChangeRow(br.getRow(),br.getColumn(), "" ); //logger.debug( "空。 行:"+br.getRow()+", 列:"+br.getColumn()); break; case FormulaRecord.sid: //数式 FormulaRecord fr = (FormulaRecord)record; addDataAndrChangeRow(fr.getRow(),fr.getColumn(), fr.getValue()); //logger.debug( "数字 。 行:"+fr.getRow()+", 列:"+fr.getColumn()); break; } }
Example #15
Source File: UserModelEventListener.java From o2oa with GNU Affero General Public License v3.0 | 4 votes |
@SuppressWarnings({ "static-access", "unused" }) @Override public void processRecord(org.apache.poi.hssf.record.Record record) { switch (record.getSid()) { case BOFRecord.sid: BOFRecord bof = (BOFRecord) record; //顺序进入新的Workbook if (bof.getType() == bof.TYPE_WORKBOOK) { //logger.debug( "开始解析excel 文档....." ); //顺序进入新的Worksheet,因为Event API不会把Excel文件里的所有数据结构都关联起来, //所以这儿一定要记录现在进入第几个sheet了。 } else if (bof.getType() == bof.TYPE_WORKSHEET) { //读取新的一个Sheet页 //logger.debug( "开始解析sheet页面内容..." ); //System.out.println( "sheetNo="+sheetNo); sheetNo++; currentSheetDataMap=new ArrayList<Map<String,Object>>(); } break; //开始解析Sheet的信息,记录sheet,这儿会把所有的sheet都顺序打印出来,如果有多个sheet的话,可以顺序记入到一个List里 case BoundSheetRecord.sid: BoundSheetRecord bsr = (BoundSheetRecord) record; //System.out.println( "sheetName="+bsr.getSheetname()); //logger.debug( "New sheet named: " + bsr.getSheetname()); break; //执行行记录事件 case RowRecord.sid: RowRecord rowrec = (RowRecord) record; //logger.debug( "记录开始, first column at " // + rowrec.getFirstCol() + " last column at " // + rowrec.getLastCol()); break; // SSTRecords store a array of unique strings used in Excel. case SSTRecord.sid: sstrec = (SSTRecord) record; for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) { //logger.debug( "String table value " + k + " = " // + sstrec.getString(k)); } break; //发现数字类型的cell,因为数字和日期都是用这个格式,所以下面一定要判断是不是日期格式,另外默认的数字也会被视为日期格式,所以如果是数字的话,一定要明确指定格式!!!!!!! case NumberRecord.sid: NumberRecord nr = (NumberRecord) record; //HSSFDateUtil.isInternalDateFormat(nr.getXFIndex()) 判断是否为时间列 int column=nr.getColumn(); if(column==5||column==6){ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),getTime(nr.getValue())); }else{ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),(int)nr.getValue()); } break; //发现字符串类型,这儿要取字符串的值的话,跟据其index去字符串表里读取 case LabelSSTRecord.sid: LabelSSTRecord lsr = (LabelSSTRecord)record; addDataAndrChangeRow(lsr.getRow(),lsr.getColumn(), sstrec.getString(lsr.getSSTIndex())); //logger.debug( "文字列:"+sstrec.getString(lsr.getSSTIndex())+", 行:"+lsr.getRow()+", 列:"+lsr.getColumn()); break; case BoolErrRecord.sid: //解析boolean错误信息 BoolErrRecord ber = (BoolErrRecord)record; if(ber.isBoolean()){ addDataAndrChangeRow(ber.getRow(),ber.getColumn(), ber.getBooleanValue()); //logger.debug( "Boolean:"+ber.getBooleanValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } if(ber.isError()){ //logger.debug( "Error:"+ber.getErrorValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } break; //空白记录的信息 case BlankRecord.sid: BlankRecord br = (BlankRecord)record; addDataAndrChangeRow(br.getRow(),br.getColumn(), "" ); //logger.debug( "空。 行:"+br.getRow()+", 列:"+br.getColumn()); break; case FormulaRecord.sid: //数式 FormulaRecord fr = (FormulaRecord)record; addDataAndrChangeRow(fr.getRow(),fr.getColumn(), fr.getValue()); //logger.debug( "数字 。 行:"+fr.getRow()+", 列:"+fr.getColumn()); break; } }
Example #16
Source File: HSSFCell.java From lams with GNU General Public License v2.0 | 4 votes |
/** * Set a string value for the cell. * * @param value value to set the cell to. For formulas we'll set the formula * string, for String cells we'll set its value. For other types we will * change the cell to a string cell and set its value. * If value is <code>null</code> then we will change the cell to a Blank cell. */ public void setCellValue(RichTextString value) { int row=_record.getRow(); short col=_record.getColumn(); short styleIndex=_record.getXFIndex(); if (value == null) { notifyFormulaChanging(); setCellType(CellType.BLANK, false, row, col, styleIndex); return; } if(value.length() > SpreadsheetVersion.EXCEL97.getMaxTextLength()){ throw new IllegalArgumentException("The maximum length of cell contents (text) is 32,767 characters"); } if (_cellType == CellType.FORMULA) { // Set the 'pre-evaluated result' for the formula // note - formulas do not preserve text formatting. FormulaRecordAggregate fr = (FormulaRecordAggregate) _record; fr.setCachedStringResult(value.getString()); // Update our local cache to the un-formatted version _stringValue = new HSSFRichTextString(value.getString()); // All done return; } // If we get here, we're not dealing with a formula, // so handle things as a normal rich text cell if (_cellType != CellType.STRING) { setCellType(CellType.STRING, false, row, col, styleIndex); } int index = 0; HSSFRichTextString hvalue = (HSSFRichTextString) value; UnicodeString str = hvalue.getUnicodeString(); index = _book.getWorkbook().addSSTString(str); (( LabelSSTRecord ) _record).setSSTIndex(index); _stringValue = hvalue; _stringValue.setWorkbookReferences(_book.getWorkbook(), (( LabelSSTRecord ) _record)); _stringValue.setUnicodeString(_book.getWorkbook().getSSTString(index)); }
Example #17
Source File: UserModelEventListener.java From o2oa with GNU Affero General Public License v3.0 | 4 votes |
@SuppressWarnings({ "static-access", "unused" }) @Override public void processRecord(org.apache.poi.hssf.record.Record record) { switch (record.getSid()) { case BOFRecord.sid: BOFRecord bof = (BOFRecord) record; //顺序进入新的Workbook if (bof.getType() == bof.TYPE_WORKBOOK) { //logger.debug( "开始解析excel 文档....." ); //顺序进入新的Worksheet,因为Event API不会把Excel文件里的所有数据结构都关联起来, //所以这儿一定要记录现在进入第几个sheet了。 } else if (bof.getType() == bof.TYPE_WORKSHEET) { //读取新的一个Sheet页 //logger.debug( "开始解析sheet页面内容..." ); //System.out.println( "sheetNo="+sheetNo); sheetNo++; currentSheetDataMap=new ArrayList<Map<String,Object>>(); } break; //开始解析Sheet的信息,记录sheet,这儿会把所有的sheet都顺序打印出来,如果有多个sheet的话,可以顺序记入到一个List里 case BoundSheetRecord.sid: BoundSheetRecord bsr = (BoundSheetRecord) record; //System.out.println( "sheetName="+bsr.getSheetname()); //logger.debug( "New sheet named: " + bsr.getSheetname()); break; //执行行记录事件 case RowRecord.sid: RowRecord rowrec = (RowRecord) record; //logger.debug( "记录开始, first column at " // + rowrec.getFirstCol() + " last column at " // + rowrec.getLastCol()); break; // SSTRecords store a array of unique strings used in Excel. case SSTRecord.sid: sstrec = (SSTRecord) record; for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) { //logger.debug( "String table value " + k + " = " // + sstrec.getString(k)); } break; //发现数字类型的cell,因为数字和日期都是用这个格式,所以下面一定要判断是不是日期格式,另外默认的数字也会被视为日期格式,所以如果是数字的话,一定要明确指定格式!!!!!!! case NumberRecord.sid: NumberRecord nr = (NumberRecord) record; //HSSFDateUtil.isInternalDateFormat(nr.getXFIndex()) 判断是否为时间列 int column=nr.getColumn(); if(column==5||column==6){ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),getTime(nr.getValue())); }else{ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),(int)nr.getValue()); } break; //发现字符串类型,这儿要取字符串的值的话,跟据其index去字符串表里读取 case LabelSSTRecord.sid: LabelSSTRecord lsr = (LabelSSTRecord)record; addDataAndrChangeRow(lsr.getRow(),lsr.getColumn(), sstrec.getString(lsr.getSSTIndex())); //logger.debug( "文字列:"+sstrec.getString(lsr.getSSTIndex())+", 行:"+lsr.getRow()+", 列:"+lsr.getColumn()); break; case BoolErrRecord.sid: //解析boolean错误信息 BoolErrRecord ber = (BoolErrRecord)record; if(ber.isBoolean()){ addDataAndrChangeRow(ber.getRow(),ber.getColumn(), ber.getBooleanValue()); //logger.debug( "Boolean:"+ber.getBooleanValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } if(ber.isError()){ //logger.debug( "Error:"+ber.getErrorValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } break; //空白记录的信息 case BlankRecord.sid: BlankRecord br = (BlankRecord)record; addDataAndrChangeRow(br.getRow(),br.getColumn(), "" ); //logger.debug( "空。 行:"+br.getRow()+", 列:"+br.getColumn()); break; case FormulaRecord.sid: //数式 FormulaRecord fr = (FormulaRecord)record; addDataAndrChangeRow(fr.getRow(),fr.getColumn(), fr.getValue()); //logger.debug( "数字 。 行:"+fr.getRow()+", 列:"+fr.getColumn()); break; } }
Example #18
Source File: UserModelEventListener.java From o2oa with GNU Affero General Public License v3.0 | 4 votes |
@SuppressWarnings({ "static-access", "unused" }) @Override public void processRecord(org.apache.poi.hssf.record.Record record) { switch (record.getSid()) { case BOFRecord.sid: BOFRecord bof = (BOFRecord) record; //顺序进入新的Workbook if (bof.getType() == bof.TYPE_WORKBOOK) { //logger.debug( "开始解析excel 文档....." ); //顺序进入新的Worksheet,因为Event API不会把Excel文件里的所有数据结构都关联起来, //所以这儿一定要记录现在进入第几个sheet了。 } else if (bof.getType() == bof.TYPE_WORKSHEET) { //读取新的一个Sheet页 //logger.debug( "开始解析sheet页面内容..." ); //System.out.println( "sheetNo="+sheetNo); sheetNo++; currentSheetDataMap=new ArrayList<Map<String,Object>>(); } break; //开始解析Sheet的信息,记录sheet,这儿会把所有的sheet都顺序打印出来,如果有多个sheet的话,可以顺序记入到一个List里 case BoundSheetRecord.sid: BoundSheetRecord bsr = (BoundSheetRecord) record; //System.out.println( "sheetName="+bsr.getSheetname()); //logger.debug( "New sheet named: " + bsr.getSheetname()); break; //执行行记录事件 case RowRecord.sid: RowRecord rowrec = (RowRecord) record; //logger.debug( "记录开始, first column at " // + rowrec.getFirstCol() + " last column at " // + rowrec.getLastCol()); break; // SSTRecords store a array of unique strings used in Excel. case SSTRecord.sid: sstrec = (SSTRecord) record; for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) { //logger.debug( "String table value " + k + " = " // + sstrec.getString(k)); } break; //发现数字类型的cell,因为数字和日期都是用这个格式,所以下面一定要判断是不是日期格式,另外默认的数字也会被视为日期格式,所以如果是数字的话,一定要明确指定格式!!!!!!! case NumberRecord.sid: NumberRecord nr = (NumberRecord) record; //HSSFDateUtil.isInternalDateFormat(nr.getXFIndex()) 判断是否为时间列 int column=nr.getColumn(); if(column==5||column==6){ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),getTime(nr.getValue())); }else{ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),(int)nr.getValue()); } break; //发现字符串类型,这儿要取字符串的值的话,跟据其index去字符串表里读取 case LabelSSTRecord.sid: LabelSSTRecord lsr = (LabelSSTRecord)record; addDataAndrChangeRow(lsr.getRow(),lsr.getColumn(), sstrec.getString(lsr.getSSTIndex())); //logger.debug( "文字列:"+sstrec.getString(lsr.getSSTIndex())+", 行:"+lsr.getRow()+", 列:"+lsr.getColumn()); break; case BoolErrRecord.sid: //解析boolean错误信息 BoolErrRecord ber = (BoolErrRecord)record; if(ber.isBoolean()){ addDataAndrChangeRow(ber.getRow(),ber.getColumn(), ber.getBooleanValue()); //logger.debug( "Boolean:"+ber.getBooleanValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } if(ber.isError()){ //logger.debug( "Error:"+ber.getErrorValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } break; //空白记录的信息 case BlankRecord.sid: BlankRecord br = (BlankRecord)record; addDataAndrChangeRow(br.getRow(),br.getColumn(), "" ); //logger.debug( "空。 行:"+br.getRow()+", 列:"+br.getColumn()); break; case FormulaRecord.sid: //数式 FormulaRecord fr = (FormulaRecord)record; addDataAndrChangeRow(fr.getRow(),fr.getColumn(), fr.getValue()); //logger.debug( "数字 。 行:"+fr.getRow()+", 列:"+fr.getColumn()); break; } }
Example #19
Source File: EventBasedExcelExtractor.java From lams with GNU General Public License v2.0 | 4 votes |
public void processRecord(Record record) { String thisText = null; int thisRow = -1; switch(record.getSid()) { case BoundSheetRecord.sid: BoundSheetRecord sr = (BoundSheetRecord)record; sheetNames.add(sr.getSheetname()); break; case BOFRecord.sid: BOFRecord bof = (BOFRecord)record; if(bof.getType() == BOFRecord.TYPE_WORKSHEET) { sheetNum++; rowNum = -1; if(_includeSheetNames) { if(_text.length() > 0) _text.append("\n"); _text.append(sheetNames.get(sheetNum)); } } break; case SSTRecord.sid: sstRecord = (SSTRecord)record; break; case FormulaRecord.sid: FormulaRecord frec = (FormulaRecord) record; thisRow = frec.getRow(); if(_formulasNotResults) { thisText = HSSFFormulaParser.toFormulaString((HSSFWorkbook)null, frec.getParsedExpression()); } else { if(frec.hasCachedResultString()) { // Formula result is a string // This is stored in the next record outputNextStringValue = true; nextRow = frec.getRow(); } else { thisText = _ft.formatNumberDateCell(frec); } } break; case StringRecord.sid: if(outputNextStringValue) { // String for formula StringRecord srec = (StringRecord)record; thisText = srec.getString(); thisRow = nextRow; outputNextStringValue = false; } break; case LabelRecord.sid: LabelRecord lrec = (LabelRecord) record; thisRow = lrec.getRow(); thisText = lrec.getValue(); break; case LabelSSTRecord.sid: LabelSSTRecord lsrec = (LabelSSTRecord) record; thisRow = lsrec.getRow(); if(sstRecord == null) { throw new IllegalStateException("No SST record found"); } thisText = sstRecord.getString(lsrec.getSSTIndex()).toString(); break; case NoteRecord.sid: NoteRecord nrec = (NoteRecord) record; thisRow = nrec.getRow(); // TODO: Find object to match nrec.getShapeId() break; case NumberRecord.sid: NumberRecord numrec = (NumberRecord) record; thisRow = numrec.getRow(); thisText = _ft.formatNumberDateCell(numrec); break; default: break; } if(thisText != null) { if(thisRow != rowNum) { rowNum = thisRow; if(_text.length() > 0) _text.append("\n"); } else { _text.append("\t"); } _text.append(thisText); } }
Example #20
Source File: UserModelEventListener.java From o2oa with GNU Affero General Public License v3.0 | 4 votes |
@SuppressWarnings({ "static-access", "unused" }) @Override public void processRecord(org.apache.poi.hssf.record.Record record) { switch (record.getSid()) { case BOFRecord.sid: BOFRecord bof = (BOFRecord) record; //顺序进入新的Workbook if (bof.getType() == bof.TYPE_WORKBOOK) { //logger.debug( "开始解析excel 文档....." ); //顺序进入新的Worksheet,因为Event API不会把Excel文件里的所有数据结构都关联起来, //所以这儿一定要记录现在进入第几个sheet了。 } else if (bof.getType() == bof.TYPE_WORKSHEET) { //读取新的一个Sheet页 //logger.debug( "开始解析sheet页面内容..." ); //System.out.println( "sheetNo="+sheetNo); sheetNo++; currentSheetDataMap=new ArrayList<Map<String,Object>>(); } break; //开始解析Sheet的信息,记录sheet,这儿会把所有的sheet都顺序打印出来,如果有多个sheet的话,可以顺序记入到一个List里 case BoundSheetRecord.sid: BoundSheetRecord bsr = (BoundSheetRecord) record; //System.out.println( "sheetName="+bsr.getSheetname()); //logger.debug( "New sheet named: " + bsr.getSheetname()); break; //执行行记录事件 case RowRecord.sid: RowRecord rowrec = (RowRecord) record; //logger.debug( "记录开始, first column at " // + rowrec.getFirstCol() + " last column at " // + rowrec.getLastCol()); break; // SSTRecords store a array of unique strings used in Excel. case SSTRecord.sid: sstrec = (SSTRecord) record; for (int k = 0; k < sstrec.getNumUniqueStrings(); k++) { //logger.debug( "String table value " + k + " = " // + sstrec.getString(k)); } break; //发现数字类型的cell,因为数字和日期都是用这个格式,所以下面一定要判断是不是日期格式,另外默认的数字也会被视为日期格式,所以如果是数字的话,一定要明确指定格式!!!!!!! case NumberRecord.sid: NumberRecord nr = (NumberRecord) record; //HSSFDateUtil.isInternalDateFormat(nr.getXFIndex()) 判断是否为时间列 int column=nr.getColumn(); if(column==5||column==6){ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),getTime(nr.getValue())); }else{ addDataAndrChangeRow(nr.getRow(),nr.getColumn(),(int)nr.getValue()); } break; //发现字符串类型,这儿要取字符串的值的话,跟据其index去字符串表里读取 case LabelSSTRecord.sid: LabelSSTRecord lsr = (LabelSSTRecord)record; addDataAndrChangeRow(lsr.getRow(),lsr.getColumn(), sstrec.getString(lsr.getSSTIndex())); //logger.debug( "文字列:"+sstrec.getString(lsr.getSSTIndex())+", 行:"+lsr.getRow()+", 列:"+lsr.getColumn()); break; case BoolErrRecord.sid: //解析boolean错误信息 BoolErrRecord ber = (BoolErrRecord)record; if(ber.isBoolean()){ addDataAndrChangeRow(ber.getRow(),ber.getColumn(), ber.getBooleanValue()); //logger.debug( "Boolean:"+ber.getBooleanValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } if(ber.isError()){ //logger.debug( "Error:"+ber.getErrorValue()+", 行:"+ber.getRow()+", 列:"+ber.getColumn()); } break; //空白记录的信息 case BlankRecord.sid: BlankRecord br = (BlankRecord)record; addDataAndrChangeRow(br.getRow(),br.getColumn(), "" ); //logger.debug( "空。 行:"+br.getRow()+", 列:"+br.getColumn()); break; case FormulaRecord.sid: //数式 FormulaRecord fr = (FormulaRecord)record; addDataAndrChangeRow(fr.getRow(),fr.getColumn(), fr.getValue()); //logger.debug( "数字 。 行:"+fr.getRow()+", 列:"+fr.getColumn()); break; } }
Example #21
Source File: StringRecordHandler.java From easyexcel with Apache License 2.0 | 4 votes |
@Override public boolean couldDecode(Record record) { return LabelSSTRecord.sid == record.getSid(); }