poi读取excel中上下标操作

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Workbook;
import org.junit.Test;

import com.cdjdgm.dip.excelimp.core.RowData;
public String superOrSubScript2003(Cell cell, Workbook book) {
		HSSFWorkbook workbook = null;
		HSSFFont font = null;
		HSSFRichTextString rts = null;
		HSSFCellStyle style = null;
		int fromIndex = 0;
		int toIndex = 0;
		String value = "";
		// 处理上下标
		workbook = (HSSFWorkbook) book;
		// 判断当前单元格的内容是否为数字类型,如果是转换成字符串型
		if (cell != null && cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
			cell.setCellValue(getStringCellValue(cell));
		}
		// 获取单元格中的数据
		if (cell != null) {
			rts = (HSSFRichTextString) cell.getRichStringCellValue();
			// 获取每个单元格数据的style属性
			style = (HSSFCellStyle) cell.getCellStyle();
			font = style.getFont(workbook);
		}
		if (rts != null && rts.numFormattingRuns() > 0) {
			for (int k = 0; k < rts.numFormattingRuns(); k++) {
				toIndex = rts.getIndexOfFormattingRun(k);
				String temp = rts.toString().substring(fromIndex, toIndex);
				System.out.println("\tSubstring [" + temp + "]");
				// 判断上标
				if (font.getTypeOffset() == HSSFFont.SS_SUPER) {
					temp = "<sup>" + temp + "</sup>";
					System.out.println("\t______________发现上标");
				}
				// 判断下标
				if (font.getTypeOffset() == HSSFFont.SS_SUB) {
					temp = "<sub>" + temp + "</sub>";
					System.out.println("\t______________发现下标");
				}
				value += temp;
				if (!value.equals("")) {
					font = workbook.getFontAt(rts.getFontOfFormattingRun(k));
				}
				fromIndex = toIndex;
			}
			toIndex = rts.length();
			String temp1 = rts.toString().substring(fromIndex, toIndex);
			System.out.println("\tSubstring [" + temp1 + "]");
			if (font.getTypeOffset() == HSSFFont.SS_SUPER) {
				temp1 = "<sup>" + temp1 + "</sup>";
				System.out.println("\t______________发现上标");
			}
			if (font.getTypeOffset() == HSSFFont.SS_SUB) {
				temp1 = "<sub>" + temp1 + "</sub>";
				System.out.println("\t______________发现下标");
			}
			value += temp1;
			return value;

		}
		if (cell != null) {
			return cell.toString();
		} else {
			return "";
		}
	}
	
	/**
	 * 获取Cell的内容
	 * 
	 * @param cell
	 * @return
	 */
	public String getStringCellValue(Cell cell) {
		String cellvalue = "";
		if (cell == null) {
			return "";
		}
		switch (cell.getCellType()) {
		case Cell.CELL_TYPE_STRING:
			cellvalue = cell.getStringCellValue();
			break;
		case Cell.CELL_TYPE_NUMERIC:
			if (DateUtil.isCellDateFormatted(cell)) {
				// 处理日期格式 没有测试
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				Date date = cell.getDateCellValue();
				cellvalue = sdf.format(date);
			} else {
				cellvalue = String.valueOf(cell.getNumericCellValue());
			}
			break;
		case Cell.CELL_TYPE_BOOLEAN:
			cellvalue = String.valueOf(cell.getBooleanCellValue());
			break;
		case Cell.CELL_TYPE_BLANK:
			cellvalue = "";
			break;
		default:
			cellvalue = "";
			break;
		}
		if (cellvalue == "") {
			return "";
		}
		return cellvalue;
	}
public String superOrSubScript2007(Cell cell, Workbook book) {
		XSSFWorkbook workbook = null;
		XSSFFont font = null;
		XSSFRichTextString rts = null;
		XSSFCellStyle style = null;
		int runIndex = 0;
		int runLength = 0;
		String value = "";
		// 处理上下标
		workbook = (XSSFWorkbook) book;
		// 判断当前单元格的内容是否为数字类型,如果是转换成字符串型
		if (cell != null && cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
			String stringCellValue = eu.getStringCellValue(cell);
			cell.setCellValue(stringCellValue);
		}
		// 获取单元格中的数据
		if (cell != null) {
			rts = (XSSFRichTextString) cell.getRichStringCellValue();
			style = (XSSFCellStyle) cell.getCellStyle();
			font = style.getFont();
		}
		if (rts.numFormattingRuns() > 1) {
			for (int k = 0; k < rts.numFormattingRuns(); k++) {
				runLength = rts.getLengthOfFormattingRun(k);
				runIndex = rts.getIndexOfFormattingRun(k);
				String temp = rts.toString().substring(runIndex, (runIndex + runLength));
				System.out.println("\tSubstring [" + temp + "]");
				try {
					font = rts.getFontOfFormattingRun(k);
					font.getTypeOffset();
				} catch (NullPointerException npe) {
					font = workbook.getFontAt(XSSFFont.DEFAULT_CHARSET);
					font.setTypeOffset(XSSFFont.SS_NONE);
				}
				if (font.getTypeOffset() == XSSFFont.SS_SUPER) {
					temp = "<sup>" + temp + "</sup>";
					System.out.println("\t______________发现上标");
				}
				if (font.getTypeOffset() == XSSFFont.SS_SUB) {
					temp = "<sub>" + temp + "</sub>";
					System.out.println("\t______________发现下标");
				}
				value += temp;
			}
			return value;
		}
		return cell.toString();
	}



猜你喜欢

转载自blog.csdn.net/qq_23490959/article/details/80134546