java如何從excel中讀取、寫入資訊(POI)
阿新 • • 發佈:2021-02-18
注意事項:
從excel中讀取檔案的內容應該沒一行一列都有對應元素素,如下圖所示:
POI讀取excel程式碼:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf. util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel. XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.common.*;;
public class CreatAndReadExcel {
//測試主函式
// private static String excel2003Path = "C:\\Users\\lenovo\\Desktop\\專案\\cdw.xls";
// public static void main(String[] args) throws Exception {
//
//
List<List<Object>> excel2007List = readExcel(excel2007Path);// 讀取2007版Excel檔案
// List<List<Object>> excel2003List = readExcel(excel2003Path);// 讀取2003版Excel檔案
// System.out.println(excel2003List.toString());
// System.out.println(excel2003List.get(1).get(0));
//
// String str = "手打手打";
// if (str.equals(excel2003List.get(1).get(0).toString()) ) {
// System.out.println("true");
// }else {
// System.out.println("false");
// }
// }
/**
* 讀取excel
*
* @param fileName
* @return 行<列>
* @throws IOException
*/
public static List<List<Object>> readExcel(String fileName) throws IOException {
File file = new File(fileName);
Workbook wb = null;
if (fileName.endsWith(".xlsx")) {// 2007
wb = new XSSFWorkbook(new FileInputStream(file));// 建立 一個excel文件物件
} else if (fileName.endsWith(".xls")) {// 2003
wb = new HSSFWorkbook(new FileInputStream(file));// 建立 一個excel文件物件
}
Sheet sheet = wb.getSheetAt(0);// 讀取第一個sheet頁表格內容
Object value = null;
Row row = null;
Cell cell = null;
System.out.println("讀取office 2007 excel內容如下:");
// System.out.println(sheet.getPhysicalNumberOfRows());// 獲取的是物理行數,也就是不包括那些空行(隔行)的情況。
// System.out.println(sheet.getLastRowNum());// 獲取的是最後一行的編號(編號從0開始)
// 行
List<List<Object>> rowlist = new LinkedList<List<Object>>();
for (int i = sheet.getFirstRowNum(); i <= sheet.getLastRowNum(); i++) {
row = sheet.getRow(i);
if (row == null) {
continue;
}
// 列
List<Object> cellList = new LinkedList<Object>();
for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
cell = row.getCell(j);
if (cell == null) {
continue;
}
DecimalFormat df = new DecimalFormat("0");// 格式化 number String
DecimalFormat nf = new DecimalFormat("0");// 格式化數字
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化日期字串
switch (cell.getCellType()) {
case STRING:// 字串——String type
value = cell.getStringCellValue();
break;
case NUMERIC:// 數字——Number type
if ("@".equals(cell.getCellStyle().getDataFormatString())) {
value = df.format(cell.getNumericCellValue());
} else if ("General".equals(cell.getCellStyle().getDataFormatString())) {
value = nf.format(cell.getNumericCellValue());
} else {
value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
}
break;
case BOOLEAN:// boolean——Boolean type
value = cell.getBooleanCellValue();
break;
case BLANK:// 空白——Blank type
value = "";
break;
default:// default type
value = cell.toString();
}
if (value == null || "".equals(value)) {
continue;
}
cellList.add(value);
}
rowlist.add(cellList);
}
return rowlist;
}
}
POI向excel中寫入list型別:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.List;
public class WriteExcel {
private static final String EXCEL_XLS = "xls";
private static final String EXCEL_XLSX = "xlsx";
public static void main(String[] args) {
}
public static void writeExcel(List<String> dataList,String finalXlsxPath){
OutputStream out = null;
try {
// 獲取總列數
// 讀取Excel文件
File finalXlsxFile = new File(finalXlsxPath);
Workbook workBook = getWorkbok(finalXlsxFile);
// sheet 對應一個工作頁
Sheet sheet = workBook.getSheetAt(0);
/**
* 刪除原有資料,除了屬性列
*/
int rowNumber = sheet.getLastRowNum(); // 第一行從0開始算
System.out.println("原始資料總行數,除屬性列:" + rowNumber);
for (int i = 1; i <= rowNumber; i++) {
Row row = sheet.getRow(i);
}
// 建立檔案輸出流,輸出電子表格:這個必須有,否則你在sheet上做的任何操作都不會有效
out = new FileOutputStream(finalXlsxPath);
workBook.write(out);
out.close();
/**
* 往Excel中寫新資料
*/
// 建立一行:從第二行開始,跳過屬性列
Row row = sheet.createRow(rowNumber + 1);
// 得到要插入的每一條記錄
//Map dataMap = dataList.get(j);
int count = dataList.size();
for (int k = 0; k < count; k++) {
// 在一行內迴圈
Cell first = row.createCell(k);
first.setCellValue(dataList.get(k));
}
// 建立檔案輸出流,準備輸出電子表格:這個必須有,否則你在sheet上做的任何操作都不會有效
out = new FileOutputStream(finalXlsxPath);
workBook.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
if(out != null){
out.flush();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("資料匯出成功");
}
/**
* 判斷Excel的版本,獲取Workbook
* @return
* @throws IOException
*/
public static Workbook getWorkbok(File file) throws IOException{
Workbook wb = null;
FileInputStream in = new FileInputStream(file);
if(file.getName().endsWith(EXCEL_XLS)){ //Excel 2003
wb = new HSSFWorkbook(in);
}else if(file.getName().endsWith(EXCEL_XLSX)){ // Excel 2007/2010
wb = new XSSFWorkbook(in);
}
return wb;
}
}
POI包下載地址:
連結:https://pan.baidu.com/s/1GPKL6P7pDQbn9NQqKWYPMg
提取碼:bjyl
複製這段內容後開啟百度網盤手機App,操作更方便哦–來自百度網盤超級會員V5的分享