249 lines
6.3 KiB
Java
249 lines
6.3 KiB
Java
package com.ljh.excel.parser;
|
|
|
|
import com.ljh.excel.annotation.ColumnAnnotation;
|
|
import com.ljh.excel.bean.BaseBean;
|
|
import com.ljh.excel.bean.factory.ExcelFactory;
|
|
import org.apache.poi.xssf.streaming.SXSSFRow;
|
|
import org.apache.poi.xssf.streaming.SXSSFSheet;
|
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
|
import org.apache.poi.xssf.usermodel.XSSFRow;
|
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Method;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
//
|
|
public class BeanOperation {
|
|
public void saveAll(List<? extends BaseBean> data) throws Exception {
|
|
saveAll(data, data.get(0).getClass().getSimpleName());
|
|
}
|
|
|
|
public void saveAll(List<? extends BaseBean> data, String filename) throws Exception {
|
|
// if (data.size() > 10000) {
|
|
// boolean tag = true;
|
|
// List data1 = new LinkedList<>();
|
|
//
|
|
// while (tag) {
|
|
// int i = 0;
|
|
// boolean tag2 = true;
|
|
// while (tag2) {
|
|
// if (data.size()>0) {
|
|
// i++;
|
|
// data1.add(data.get(0));
|
|
// data.remove(0);
|
|
// } else {
|
|
// tag = false;
|
|
// break;
|
|
// }
|
|
// if (i >= 5000) {
|
|
// break;
|
|
// }
|
|
// }
|
|
// addAll(data1, filename);
|
|
// data1.clear();
|
|
// }
|
|
// data.clear();
|
|
// } else {
|
|
// saveData(data,filename);
|
|
// }
|
|
|
|
saveData(data, filename);
|
|
|
|
}
|
|
|
|
public void saveData(List data, String filename) throws Exception {
|
|
System.out.println("saveAll:" + filename + " data:" + data.size());
|
|
SXSSFWorkbook wb = new SXSSFWorkbook(10000);
|
|
SXSSFSheet sheet = wb.createSheet("sheet1");
|
|
createCell(data, sheet, 0);
|
|
new File(new File(filename).getParent()).mkdirs();
|
|
FileOutputStream fout = new FileOutputStream(filename);
|
|
wb.write(fout);
|
|
fout.close();
|
|
wb.dispose();
|
|
System.out.println("saveData-end" );
|
|
}
|
|
|
|
public void addAll(List<? extends BaseBean> data) throws Exception {
|
|
addAll(data, data.get(0).getClass().getSimpleName());
|
|
}
|
|
|
|
public void addAll(List<? extends BaseBean> data, String filename) throws Exception {
|
|
if (new File(ExcelFactory.PACTORYPATH + "/" + filename + ".xlsx").exists()
|
|
&& new File(ExcelFactory.PACTORYPATH + "/" + filename + ".xlsx").isFile()) {
|
|
System.out.println("addAll---");
|
|
} else {
|
|
saveData(new ArrayList<>(), filename);
|
|
}
|
|
FileInputStream fs = new FileInputStream(ExcelFactory.PACTORYPATH +
|
|
"/" + filename + ".xlsx");
|
|
XSSFWorkbook wb = new XSSFWorkbook(fs);
|
|
// SXSSFWorkbook wb = new SXSSFWorkbook(wb1);
|
|
|
|
XSSFSheet sheet = wb.getSheetAt(0);
|
|
XSSFRow row = sheet.getRow(0); //
|
|
|
|
FileOutputStream out = new FileOutputStream(
|
|
ExcelFactory.PACTORYPATH + "/" + filename + ".xlsx"); //
|
|
createCell(data, sheet, sheet.getLastRowNum() + 1);
|
|
out.flush();
|
|
wb.write(out);
|
|
out.close();
|
|
|
|
|
|
}
|
|
|
|
private void createCell(List<? extends BaseBean> data, SXSSFSheet sheet, int first) {
|
|
SXSSFRow row;
|
|
int i = first;
|
|
String fname;
|
|
String s1;
|
|
ColumnAnnotation canno;
|
|
String s2;
|
|
Method m;
|
|
boolean tag = false;
|
|
if (data != null && data.size() > 0) {
|
|
tag = true;
|
|
}
|
|
while (tag) {
|
|
BaseBean bean = data.get(0);
|
|
//System.out.println("createCell" + i);
|
|
Class c = bean.getClass();
|
|
Field[] filds = c.getDeclaredFields();
|
|
row = sheet.createRow(i);
|
|
i++;
|
|
|
|
for (Field f : filds) {
|
|
f.setAccessible(true);
|
|
canno = f.getAnnotation(ColumnAnnotation.class);
|
|
if (canno != null) {
|
|
fname = "get" + f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1);
|
|
s1 = canno.value();
|
|
try {
|
|
m = c.getDeclaredMethod(fname, new Class[] {});
|
|
m.setAccessible(true);
|
|
s2 = (String) m.invoke(bean);
|
|
|
|
char[] c1 = s1.toCharArray();
|
|
int index = (int) c1[0] - 65;
|
|
try {
|
|
int index2= (int) c1[1] - 65;
|
|
index=26+index2;
|
|
} catch (Exception e) {
|
|
// TODO: handle exception
|
|
}
|
|
//System.out.println("canno:"+s1+" index:"+index);
|
|
row.createCell((short) index).setCellValue(s2);
|
|
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
data.remove(0);
|
|
if (data.size() > 0) {
|
|
tag = true;
|
|
} else {
|
|
tag = false;
|
|
}
|
|
}
|
|
}
|
|
private void createCell(List<? extends BaseBean> data, XSSFSheet sheet, int first) {
|
|
XSSFRow row;
|
|
int i = first;
|
|
String fname;
|
|
String s1;
|
|
ColumnAnnotation canno;
|
|
String s2;
|
|
Method m;
|
|
boolean tag = false;
|
|
if (data != null && data.size() > 0) {
|
|
tag = true;
|
|
}
|
|
while (tag) {
|
|
BaseBean bean = data.get(0);
|
|
System.out.println("createCell" + i);
|
|
Class c = bean.getClass();
|
|
Field[] filds = c.getDeclaredFields();
|
|
row = sheet.createRow(i);
|
|
i++;
|
|
|
|
for (Field f : filds) {
|
|
f.setAccessible(true);
|
|
canno = f.getAnnotation(ColumnAnnotation.class);
|
|
if (canno != null) {
|
|
fname = "get" + f.getName().substring(0, 1).toUpperCase() + f.getName().substring(1);
|
|
s1 = canno.value();
|
|
try {
|
|
m = c.getDeclaredMethod(fname, new Class[] {});
|
|
m.setAccessible(true);
|
|
s2 = (String) m.invoke(bean);
|
|
|
|
char[] c1 = s1.toCharArray();
|
|
int index = (int) c1[0] - 65;
|
|
try {
|
|
int index2= (int) c1[1] - 65;
|
|
index=26+index2;
|
|
} catch (Exception e) {
|
|
// TODO: handle exception
|
|
}
|
|
System.out.println("canno:"+s1+" index:"+index);
|
|
row.createCell((short) index).setCellValue(s2);
|
|
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
}
|
|
data.remove(0);
|
|
if (data.size() > 0) {
|
|
tag = true;
|
|
} else {
|
|
tag = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void deleteByIndex(int index, Class cls) {
|
|
try {
|
|
|
|
FileInputStream is = new FileInputStream(ExcelFactory.PACTORYPATH + "/" + cls.getSimpleName() + ".xlsx");
|
|
|
|
XSSFWorkbook workbook = new XSSFWorkbook(is);
|
|
|
|
XSSFSheet sheet = workbook.getSheetAt(0);
|
|
|
|
removeRow(sheet, index);
|
|
FileOutputStream os = new FileOutputStream(ExcelFactory.PACTORYPATH + "/" + cls.getSimpleName() + ".xlsx");
|
|
|
|
workbook.write(os);
|
|
|
|
is.close();
|
|
|
|
os.close();
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void removeRow(XSSFSheet sheet, int rowIndex) {
|
|
int lastRowNum = sheet.getLastRowNum();
|
|
if (rowIndex >= 0 && rowIndex < lastRowNum)
|
|
sheet.shiftRows(rowIndex + 1, lastRowNum, -1);
|
|
if (rowIndex == lastRowNum) {
|
|
XSSFRow removingRow = sheet.getRow(rowIndex);
|
|
if (removingRow != null)
|
|
sheet.removeRow(removingRow);
|
|
}
|
|
}
|
|
}
|