js 貨幣格式化的方法
阿新 • • 發佈:2020-12-11
技術標籤:excel
匯入maven依賴
地址:https://mvnrepository.com/artifact/com.xuxueli/xxl-excel/1.1.1
<!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-excel -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-excel</artifactId>
<version>1.1.1</version>
</dependency>
接下來看看,表格的結構
先貼上,工具類
import com.xuxueli.poi.excel.annotation.ExcelSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
@Component
public class MyExcelUtil {
/**
* 匯出Excel檔案到磁碟
*/
public static void exportToFile(Class clazz, List<?> dataList, HttpServletResponse response){
// workbook
XSSFWorkbook workbook = MyExcelExportUtil.exportWorkbook(dataList);
OutputStream out = null;
try {
response.setContentType("APPLICATION/OCTET-STREAM");
// set headers for the response
String headerKey = "Content-Disposition";
ExcelSheet excelSheet = (ExcelSheet)clazz.getAnnotation(ExcelSheet.class);
String filename = excelSheet.name();
String fileNameWithExt = filename + ".xlsx";
String headerValue = null;
headerValue = String.format("attachment; filename=\"%s\"", URLEncoder.encode(fileNameWithExt, "utf-8"));
response.setHeader(headerKey, headerValue);
out = response.getOutputStream();
// workbook 2 FileOutputStream
workbook.write(out);
// flush
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
try {
if (out!=null) {
out.close();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
/**
* 匯入
*/
public static List importFromFile(Class clazz, MultipartFile file){
InputStream inputStream =null;
try{
inputStream = file.getInputStream();
List objects = MyExcelImportUtil.importExcel(clazz, inputStream);
return objects;
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally {
try {
if (inputStream!=null) {
inputStream.close();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
import com.xuxueli.poi.excel.ExcelExportUtil;
import com.xuxueli.poi.excel.annotation.ExcelField;
import com.xuxueli.poi.excel.annotation.ExcelSheet;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MyExcelExportUtil extends ExcelExportUtil {
public static XSSFWorkbook exportWorkbook(List<?> dataList) {
if (dataList != null && dataList.size() != 0) {
Class sheetClass = dataList.get(0).getClass();
ExcelSheet excelSheet = (ExcelSheet) sheetClass.getAnnotation(ExcelSheet.class);
String sheetName = dataList.get(0).getClass().getSimpleName();
HSSFColor.HSSFColorPredefined headColor = null;
if (excelSheet != null) {
if (excelSheet.name() != null && excelSheet.name().trim().length() > 0) {
sheetName = excelSheet.name().trim();
}
headColor = excelSheet.headColor();
}
ArrayList fields = new ArrayList();
if (sheetClass.getDeclaredFields() != null && sheetClass.getDeclaredFields().length > 0) {
Field[] workbook = sheetClass.getDeclaredFields();
int sheet = workbook.length;
for (int headStyle = 0; headStyle < sheet; ++headStyle) {
Field headRow = workbook[headStyle];
ExcelField rowData = (ExcelField) headRow.getAnnotation(ExcelField.class);
if (rowData == null) {
continue;
}
String name = rowData.name().trim();
if (StringUtils.isEmpty(name)) {
continue;
}
if (!Modifier.isStatic(headRow.getModifiers())) {
fields.add(headRow);
}
}
}
if (fields != null && fields.size() != 0) {
XSSFWorkbook var19 = new XSSFWorkbook();
Sheet var20 = var19.createSheet(sheetName);
CellStyle var21 = null;
if (headColor != null) {
var21 = var19.createCellStyle();
var21.setFillForegroundColor(headColor.getIndex());
var21.setFillPattern(FillPatternType.SOLID_FOREGROUND);
var21.setFillBackgroundColor(headColor.getIndex());
}
Row var22 = var20.createRow(0);
int dataIndex;
for (dataIndex = 0; dataIndex < fields.size(); ++dataIndex) {
Field rowIndex = (Field) fields.get(dataIndex);
ExcelField rowData = (ExcelField) rowIndex.getAnnotation(ExcelField.class);
if (rowData == null) {
continue;
}
String name = rowData.name().trim();
if (StringUtils.isEmpty(name)) {
continue;
}
String rowX = rowData != null && rowData.name() != null && rowData.name().trim().length() > 0 ? rowData.name() : rowIndex.getName();
Cell i = var22.createCell(dataIndex, 1);
if (var21 != null) {
i.setCellStyle(var21);
}
i.setCellValue(String.valueOf(rowX));
}
for (dataIndex = 0; dataIndex < dataList.size(); ++dataIndex) {
int var23 = dataIndex + 1;
Object var24 = dataList.get(dataIndex);
Row var25 = var20.createRow(var23);
for (int var26 = 0; var26 < fields.size(); ++var26) {
Field field = (Field) fields.get(var26);
ExcelField rowData = (ExcelField) field.getAnnotation(ExcelField.class);
if (rowData == null) {
continue;
}
String name = rowData.name().trim();
if (StringUtils.isEmpty(name)) {
continue;
}
try {
field.setAccessible(true);
Object e = field.get(var24);
Cell cellX = var25.createCell(var26, 1);
if (e == null) {
cellX.setCellValue("");
} else {
Class<?> aClass = e.getClass();
Date date = new Date();
if (aClass == date.getClass()) {
cellX.setCellValue(DateUtil.formatTimestamp((Date) e));
} else if(aClass.isEnum()){
try {
Method getDesc = aClass.getMethod("getDesc");
Object invoke = getDesc.invoke(e);
cellX.setCellValue(String.valueOf(invoke));
} catch (Exception e1) {
cellX.setCellValue("");
}
} else {
cellX.setCellValue(String.valueOf(e));
}
}
} catch (IllegalAccessException var18) {
throw new RuntimeException(var18);
}
}
}
return var19;
} else {
throw new RuntimeException(">>>>>>>>>>> xxl-excel error, data field can not be empty.");
}
} else {
throw new RuntimeException(">>>>>>>>>>> xxl-excel error, data can not be empty.");
}
}
}
import com.xuxueli.poi.excel.ExcelImportUtil;
import com.xuxueli.poi.excel.annotation.ExcelField;
import com.xuxueli.poi.excel.annotation.ExcelSheet;
import com.xuxueli.poi.excel.util.FieldReflectionUtil;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class MyExcelImportUtil extends ExcelImportUtil {
public static List<Object> importExcel(Class<?> sheetClass, Workbook workbook) {
try {
ExcelSheet excelSheet = (ExcelSheet) sheetClass.getAnnotation(ExcelSheet.class);
String sheetName = excelSheet != null && excelSheet.name() != null && excelSheet.name().trim().length() > 0 ? excelSheet.name().trim() : sheetClass.getSimpleName();
List<Field> fields = new ArrayList();
int rowIndex;
if (sheetClass.getDeclaredFields() != null && sheetClass.getDeclaredFields().length > 0) {
Field[] var5 = sheetClass.getDeclaredFields();
int var6 = var5.length;
for (rowIndex = 0; rowIndex < var6; ++rowIndex) {
Field field = var5[rowIndex];
if (!Modifier.isStatic(field.getModifiers())) {
fields.add(field);
}
}
}
if (fields != null && fields.size() != 0) {
Sheet sheet = workbook.getSheet(sheetName);
Iterator<Row> sheetIterator = sheet.rowIterator();
rowIndex = 0;
ArrayList dataList;
ArrayList headList = new ArrayList();
for1:
for (dataList = new ArrayList(); sheetIterator.hasNext(); ++rowIndex) {
Row rowX = (Row) sheetIterator.next();
if (rowIndex == 0) {
Iterator<Cell> cellIterator = rowX.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
//cell.setCellType(CellType.STRING);
String stringCellValue = cell.getStringCellValue();
if (!StringUtils.isEmpty(stringCellValue)) {
headList.add(stringCellValue);
}
}
}
if (rowIndex > 0) {
Object rowObj = sheetClass.newInstance();
for2:
for (int i = 0; i < fields.size(); ++i) {
Field field = (Field) fields.get(i);
ExcelField excelField = field.getAnnotation(ExcelField.class);
if (excelField == null) {
continue;
}
String name = excelField.name().trim();
if (StringUtils.isEmpty(name)) {
continue;
}
int index = headList.indexOf(name);
if (index < 0) {
continue;
}
Cell cell = rowX.getCell(index);
if (cell != null) {
try {
cell.setCellType(CellType.STRING);
String fieldValueStr = cell.getStringCellValue();
if (i == 0 && StringUtils.isEmpty(fieldValueStr)) {
break for1;
}//當前行第一列為空跳出迴圈for1
Object fieldValue = FieldReflectionUtil.parseValue(field, fieldValueStr);
field.setAccessible(true);
field.set(rowObj, fieldValue);
} catch (Exception ex) {
field.setAccessible(true);
field.set(rowObj, null);
}
} else {
if (i == 0) {
break for1;
}//當前行第一列為空跳出迴圈for1
}
}
dataList.add(rowObj);
}
}
return dataList;
} else {
throw new RuntimeException(">>>>>>>>>>> xxl-excel error, data field can not be empty.");
}
} catch (Exception var15) {
throw new RuntimeException(var15);
}
}
public static List<Object> importExcel(Class<?> sheetClass, InputStream inputStream) {
try {
Workbook workbook = WorkbookFactory.create(inputStream);
List<Object> dataList = importExcel(sheetClass, workbook);
return dataList;
} catch (IOException var4) {
throw new RuntimeException(var4);
} catch (InvalidFormatException var5) {
throw new RuntimeException(var5);
}
}
}
定義實體類接收表格資料,注意列名要對應
@Data
@ExcelSheet(name = "Sheet1")
public class CompetitionUserEntity implements Serializable {
@ExcelField(name = "電話")
private String loginId;
@ExcelField(name = "姓名")
private String academicName;
@ExcelField(name = "年級")
private String grade;
@ExcelField(name = "學校")
private String school;
@ExcelField(name = "省份")
private String belongProvince;
@ExcelField(name = "城市")
private String belongCity;
@ExcelField(name = "區縣")
private String district;
}
呼叫:
Postman 呼叫:
service程式碼:
返回的list 自己斷點看看資料,就知道是否成功
public Result importData(MultipartFile file) {
List<CompetitionUserEntity> list = MyExcelUtil.importFromFile(CompetitionUserEntity.class, file);return null;
}