POI读入excel文件到Java中
生活随笔
收集整理的這篇文章主要介紹了
POI读入excel文件到Java中
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package Poi_Test;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
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 ExcelOperate {
?
? ? /**
? ? ?* 讀取Excel的內容,第一維數組存儲的是一行中格列的值,二維數組存儲的是多少個行
? ? ?* @param file 讀取數據的源Excel
? ? ?* @param ignoreRows 讀取數據忽略的行數,比喻行頭不須要讀入 忽略的行數為1
? ? ?* @return 讀出的Excel中數據的內容
? ? ?* @throws FileNotFoundException
? ? ?* @throws IOException
? ? ?*/
? ? public static String[][] getData(File file, int ignoreRows)throws FileNotFoundException, 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());
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ?case HSSFCell.CELL_TYPE_FORMULA:
? ? ? ? ? ? ? ? ? ? ? ? ?// 導入時假設為公式生成的數據則無值
? ? ? ? ? ? ? ? ? ? ? ? ?if (!cell.getStringCellValue().equals("")) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? value = cell.getStringCellValue();
? ? ? ? ? ? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? value = cell.getNumericCellValue() + "";
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ?case HSSFCell.CELL_TYPE_BLANK:
? ? ? ? ? ? ? ? ? ? ? ? ?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) {
? ? ? ?if (str == null) {
? ? ? ? ? ?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);
? ? }
? ? ?
? ? ?
? ? ?public static void main(String[] args) throws Exception
? ? {
? ? String[] s2 =s[i];
? ? for(int j=0;j<s2.length;j++)
? ? {
? ? System.out.print(s[i][j]+"\t");;
? ? } ?
? ? System.out.println();
? ? }
? ?
? ? ?}
}
//導入java自帶的包
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
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 ExcelOperate {
?
? ? /**
? ? ?* 讀取Excel的內容,第一維數組存儲的是一行中格列的值,二維數組存儲的是多少個行
? ? ?* @param file 讀取數據的源Excel
? ? ?* @param ignoreRows 讀取數據忽略的行數,比喻行頭不須要讀入 忽略的行數為1
? ? ?* @return 讀出的Excel中數據的內容
? ? ?* @throws FileNotFoundException
? ? ?* @throws IOException
? ? ?*/
? ? public static String[][] getData(File file, int ignoreRows)throws FileNotFoundException, 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());
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ?case HSSFCell.CELL_TYPE_FORMULA:
? ? ? ? ? ? ? ? ? ? ? ? ?// 導入時假設為公式生成的數據則無值
? ? ? ? ? ? ? ? ? ? ? ? ?if (!cell.getStringCellValue().equals("")) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? value = cell.getStringCellValue();
? ? ? ? ? ? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? value = cell.getNumericCellValue() + "";
? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ?break;
? ? ? ? ? ? ? ? ? ? ?case HSSFCell.CELL_TYPE_BLANK:
? ? ? ? ? ? ? ? ? ? ? ? ?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) {
? ? ? ?if (str == null) {
? ? ? ? ? ?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);
? ? }
? ? ?
? ? ?
? ? ?public static void main(String[] args) throws Exception
? ? ?{
//C盤下存入一個a.xls文件
? ? File file = new File("c:\\a.xls");? ? String[][] s = ExcelOperate.getData(file,0);//由上述程序,得出返回值是一個二維數組(excel表中的二維數組數據)
//遍歷二維數組
? ? for(int i=0;i<s.length;i++)? ? {
? ? String[] s2 =s[i];
? ? for(int j=0;j<s2.length;j++)
? ? {
? ? System.out.print(s[i][j]+"\t");;
? ? } ?
? ? System.out.println();
? ? }
? ?
? ? ?}
}
轉載于:https://www.cnblogs.com/mfrbuaa/p/3898014.html
總結
以上是生活随笔為你收集整理的POI读入excel文件到Java中的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过TCP/IP连接Mysql数据库
- 下一篇: c#一些特殊语法