import java.io.BufferedInputStream; |
import java.io.File; |
import java.io.FileInputStream; |
import java.io.IOException; |
import java.text.SimpleDateFormat; |
import java.util.ArrayList; |
import java.util.Arrays; |
import java.util.Date; |
import java.util.List; |
import org.apache.poi.hssf.usermodel.HSSFCell; |
import org.apache.poi.hssf.usermodel.HSSFDateUtil; |
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; |
public class ExcelOpearate { |
/** |
* 读取Excel的内容,第一维数组储存的是一行中格列的值,二维数组中储存的是多少行 |
* |
* @param file |
* 读取数据源Excel |
* @param ignoreRows |
* 读取数据忽略的行数, |
* @return 读出的Excel中数据的内容 |
* @throws IOException |
*/ |
public static String[][] getData(File file, int ignoreRows) |
throws IOException { |
List<String[]> result = new ArrayList<String[]>(); |
int rowSize = 0 ; |
BufferedInputStream in = new BufferedInputStream( new FileInputStream( |
file)); |
// 打开HSSFWorkBook |
POIFSFileSystem fs = new POIFSFileSystem(in); |
HSSFWorkbook wb = new HSSFWorkbook(fs); |
HSSFCell cell = null ; |
for ( int sheetIndex = 0 ; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { |
HSSFSheet st = wb.getSheetAt(sheetIndex); |
// 第一行为标题不读取 |
for ( int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { |
HSSFRow row = st.getRow(rowIndex); |
if (row == null ) { |
continue ; |
} |
int tempRowSize = row.getLastCellNum() + 1 ; |
if (tempRowSize > rowSize) { |
rowSize = tempRowSize; |
} |
String[] values = new String[rowSize]; |
Arrays.fill(values, "" ); |
boolean hasValue = false ; |
for ( short columnIndex = 0 ; columnIndex <= row.getLastCellNum(); columnIndex++) { |
String value = "" ; |
cell = row.getCell(columnIndex); |
if (cell != null ) { |
// 注意:一定要設成這個。否則可能會出現亂碼 |
cell.setEncoding(HSSFCell.ENCODING_UTF_16); |
switch (cell.getCellType()) { |
case HSSFCell.CELL_TYPE_STRING: |
value = cell.getStringCellValue(); |
break ; |
case HSSFCell.CELL_TYPE_NUMERIC: |
if (HSSFDateUtil.isCellDateFormatted(cell)) { |
Date date = cell.getDateCellValue(); |
if (date != null ) { |
value = new SimpleDateFormat( "yyyy-MM-dd" ) |
.format(date); |
} else { |
value = "" ; |
} |
} else { |
// value = new DecimalFormat("0").format(cell |
// .getNumericCellValue()); |
DecimalFormat df = new DecimalFormat( "#" ); // 解决读取长数据为科学计数的问题 |
value = String.valueOf(df.format(cell |
.getNumericCellValue())); |
} |
break ; |
case HSSFCell.CELL_TYPE_FORMULA: |
// 导入时如果为公式生成的数据则无值 |
if (!cell.getStringCellValue().equals( "" )) { |
value = cell.getStringCellValue(); |
} else { |
value = cell.getNumericCellValue() + "" ; |
} |
break ; |
case HSSFCell.CELL_TYPE_BLANK: |
value = "" ; |
break ; |
case HSSFCell.CELL_TYPE_ERROR: |
value = "" ; |
break ; |
case HSSFCell.CELL_TYPE_BOOLEAN: |
value = (cell.getBooleanCellValue() == true ? "Y" |
: "N" ); |
break ; |
default : |
value = "" ; |
} |
} |
if (columnIndex == 0 && value.trim().equals( "" )) { |
break ; |
} |
values[columnIndex] = rightTrim(value); |
hasValue = true ; |
} |
if (hasValue) { |
result.add(values); |
} |
} |
} |
in.close(); |
String[][] returnArray = new String[result.size()][rowSize]; |
for ( int i = 0 ; i < returnArray.length; i++) { |
returnArray[i] = (String[]) result.get(i); |
} |
return returnArray; |
} |
/** |
* 去掉字符串右边的空格 |
* |
* @param str |
* 要处理的字符串 |
* @return 处理后的字符串 |
*/ |
public static String rightTrim(String str) { |
// TODO Auto-generated method stub |
if (str == "" ) { |
return "" ; |
} |
int length = str.length(); |
for ( int i = length - 1 ; i >= 0 ; i--) { |
if (str.charAt(i) != 0x20 ) { |
break ; |
} |
length--; |
} |
return str.substring( 0 , length); |
} |
} |