使用java写一个ExcelUtils,使用poi实现excel处理的通用类
时间: 2024-02-01 09:14:52 浏览: 146
好的,以下是一个使用POI实现的Java Excel处理工具类ExcelUtils。
```java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
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.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelUtils {
/**
* 读取Excel文件
* @param filePath 文件路径
* @return 返回List<List<String>>类型的数据
*/
public static List<List<String>> readExcel(String filePath) {
List<List<String>> result = new ArrayList<List<String>>();
try {
FileInputStream fis = new FileInputStream(filePath);
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.rowIterator();
while (rowIterator.hasNext()) {
XSSFRow row = (XSSFRow) rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
List<String> rowData = new ArrayList<String>();
while (cellIterator.hasNext()) {
XSSFCell cell = (XSSFCell) cellIterator.next();
String value = "";
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_NUMERIC:
value = cell.getRawValue();
break;
case XSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
}
rowData.add(value);
}
result.add(rowData);
}
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* 写入Excel文件
* @param filePath 文件路径
* @param data 要写入的数据
*/
public static void writeExcel(String filePath, List<List<String>> data) {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
for (int i = 0; i < data.size(); i++) {
XSSFRow row = sheet.createRow(i);
List<String> rowData = data.get(i);
for (int j = 0; j < rowData.size(); j++) {
XSSFCell cell = row.createCell(j);
cell.setCellValue(rowData.get(j));
}
}
try {
FileOutputStream fos = new FileOutputStream(filePath);
workbook.write(fos);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这个 ExcelUtils 类可以读取和写入 Excel 文件,读取 Excel 文件时返回一个 List<List<String>> 类型的数据,每一行数据用 List<String> 来表示,每一个单元格的数据用 String 类型来表示。写入 Excel 文件时传入一个 List<List<String>> 类型的数据,Excel 的每一行用 List<String> 来表示,每一个单元格的数据用 String 类型来表示。
下面是一个使用 ExcelUtils 类读取和写入 Excel 文件的例子:
```java
public class ExcelTest {
public static void main(String[] args) {
// 读取 Excel 文件
List<List<String>> data = ExcelUtils.readExcel("test.xlsx");
for (List<String> rowData : data) {
for (String value : rowData) {
System.out.print(value + "\t");
}
System.out.println();
}
// 写入 Excel 文件
List<List<String>> newData = new ArrayList<List<String>>();
List<String> newRowData = new ArrayList<String>();
newRowData.add("1");
newRowData.add("2");
newRowData.add("3");
newData.add(newRowData);
ExcelUtils.writeExcel("newTest.xlsx", newData);
}
}
```
这个例子读取了 test.xlsx 文件,并将其打印出来,然后将一行数据写入到 newTest.xlsx 文件中。
阅读全文