package utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.*;
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;
/**
* office 工具类,操作文档、表格等
*/
public class OfficeUtils {
public static void main(String[] args) {
File file = new File("temp" + File.separator + "office" + File.separator + "maidian.xlsx");
XSSFWorkbook xssfWorkbook = openXlsx(file);
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);
int totalRows = xssfSheet.getPhysicalNumberOfRows();
for (int rowNum = 2; rowNum < totalRows; rowNum++) {
XSSFRow row = xssfSheet.getRow(rowNum);
int cellNum = row.getLastCellNum();
if(cellNum == 6) {
String name = getCellString(row.getCell(4));
String eventid = getCellString(row.getCell(5));
// /**
// * aa
// */
// public static final String a = "a";
System.out.println("/**");
System.out.println(" * " + name);
System.out.println(" */");
System.out.println("public static final String " + eventid.toUpperCase() + " = \"" + eventid + "\"");
System.out.println();
}
}
}
private static String getCellString(XSSFCell cell) {
if(cell == null) {
return "";
}
return cell.getStringCellValue();
}
public static XSSFWorkbook openXlsx(File file) {
InputStream stream;
try {
stream = new FileInputStream(file);
@SuppressWarnings("resource")
XSSFWorkbook xwb = new XSSFWorkbook(stream);
return xwb;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void saveCVS(List<?> datas, File file) {
if (datas == null || datas.size() <= 0) {
return;
}
try {
StringBuilder sbHeader = new StringBuilder();
StringBuilder sbContent = new StringBuilder();
for (int i = 0; i < datas.size(); i++) {
Object data = datas.get(i);
Class<?> clazz = data.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
// header
if (i == 0) {
String name = field.getName();
if (sbHeader.indexOf(name) == -1) {
sbHeader.append(name.replace(",", ",") + ",");
}
}
// content
Object value = field.get(data);
// 替换英文逗号成中文逗号,防止csv解析时影响
String valueStr = value == null ? "" : value.toString()
.replace(",", ",");
sbContent.append(valueStr + ",");
}
sbContent = sbContent.replace(sbContent.length() - 1,
sbContent.length(), "\n");
}
String cvsStr = sbHeader.substring(0, sbHeader.length() - 1) + "\n"
+ sbContent.toString();
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
if (!file.exists()) {
file.createNewFile();
}
FileUtils.writeString2File(cvsStr.trim(), file, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
}
public static <T> List<T> readDatasFromCSV(File file, Class<T> clazz)
throws Exception {
List<T> datas = new ArrayList<T>();
FileReader fr;
fr = new FileReader(file);
BufferedReader bufr = new BufferedReader(fr);
// header
String header;
String[] fieldNames = null;
if ((header = bufr.readLine()) != null) {
fieldNames = header.split(",");
}
if (fieldNames == null || fieldNames.length == 0) {
bufr.close();
fr.close();
return datas;
}
// content
String line;
while ((line = bufr.readLine()) != null) {
// 防止末尾,无法split的处理
Object[] fieldValues = line.split(",");
if (fieldValues.length != fieldNames.length) {
System.out.println(line + " 的value和header " + header + " 不一致");
continue;
}
T data = clazz.newInstance();
for (int i = 0; i < fieldNames.length; i++) {
try {
Field field = clazz.getDeclaredField(fieldNames[i]);
field.setAccessible(true);
if (field != null) {
field.set(data, fieldValues[i]);
}
} catch (Exception e) {
System.out.println(line + " 中无变量 " + fieldNames[i]);
}
}
datas.add(data);
}
bufr.close();
fr.close();
return datas;
}
}