遍历某个文件夹下所有的excel夺取sheet标签页面的名称
业务场景:
比如说电脑是由很多个小的系统组成,这里的系统指的不是操作系统,是BOM结构。原先一个系统一个Excel,Excel中的标签页是一个零件,页签内的内容是零件属性。如果现在将BOM结构维护进系统,如果手痛添加会非常的费事。
代码如下:
import java.io.File;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* 读取文件夹下所有Excel获取sheet页名称
* @author Tepu
*
*/
public class ExcelMore {
public static void main(String[] args) {
JSONObject tree = new JSONObject();
// 要读取的文件目录
String filesPath = "";
File file = new File(filesPath);
if(!file.isDirectory()) {
return;
}
// 读取目录下的文件列表
File[] fileArr = file.listFiles();
for(int i=0; i<fileArr.length; i++) {
if(isExcel(fileArr[i].getName())) {
// 只读取Excel文件
String systemName = getSystemName(fileArr[i].getName());
tree.put(systemName, toImport(fileArr[i]));
}
}
System.out.println(JSONObject.toJSONString(tree));
}
/**
* 读取excel内容
* @param file
* @return
*/
public static JSONArray toImport(File file) {
JSONArray array = new JSONArray();
JSONObject obj;
try {
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet;
for(int i=0; i<workbook.getNumberOfSheets(); i++) {
sheet = workbook.getSheetAt(i);
obj = new JSONObject();
obj.put("componentsName", sheet.getSheetName());
array.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(array.size());
return array;
}
/**
* 文件名称如:XXXXX-XXXX系统.xlsx
* 根据文件名获取系统名称
* @param fileName
* @return
*/
public static String getSystemName(String fileName) {
if(fileName != null && !fileName.equals("")) {
return fileName.substring(fileName.indexOf("-") + 1, fileName.lastIndexOf("."));
}
return "";
}
/**
* 判断文件是不是excel
* @param fileName
* @return
*/
public static boolean isExcel(String fileName) {
if(fileName != null && (fileName.endsWith(".xls") || fileName.endsWith(".xlsx"))) {
return true;
}
return false;
}
}