jlr提交
This commit is contained in:
248
src/main/java/com/ljh/excel/parser/BeanOperation.java
Normal file
248
src/main/java/com/ljh/excel/parser/BeanOperation.java
Normal file
@ -0,0 +1,248 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user