Add README

This commit is contained in:
lannstark
2020-04-20 19:50:00 +09:00
parent c0b6c66912
commit 9573534169

205
README.md Normal file
View File

@@ -0,0 +1,205 @@
# Excel Module
General Excel Module to implement Excel Download simply and fast.
## Usage - Spring Boot with Rest API
Excel Module uses annotation and reflections to render excel file.
You need to use @ExcelColumn to Object to be rendered in excel file.
See below example.
### Jitpack
Here, only explain how to manage dependency with gradle.
See other build tool usage from [Jitpack Hompage](https://jitpack.io/)
```
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
// Use proper version
dependencies {
implementation('com.github.lannstark:excel-download:0.1.1')
}
```
### Server
```java
// In ExcelDeto
// Rendered Field Order is same as Dto field order
public class ExcelDto {
// Annotation Case 1. no headerStyle and contentsStyle
@ExcelColumn(headerName = "User Name")
private String name;
// Annotation Case 2. use not default style, but use defined style
@ExcelColumn(headerName = "User Age",
headerStyle = @ExcelColumnStyle(excelCellStyleClass = DefaultExcelCellStyle.class, enumName = "BLUE_HEADER")
)
private int age;
// Annotation Case 3. You can also configure contents style
@ExcelColumn(headerName = "Happy BirthDay",
contentsStyle = @ExcelColumnStyle(excelCellStyleClass = DefaultExcelCellStyle.class, enumName = "CONTENTS")
)
private LocalDate birthDay;
}
```
If you want to config default style in class, you should use @DefaultHeaderStyle or @DefaultContentsStyle.
This style will be applied to all fields having not field style in this class.
```java
@DefaultHeaderStyle(
style = @ExcelColumnStyle(excelCellStyleClass = DefaultExcelCellStyle.class, enumName = "BLUE_HEADER")
)
@DefaultContentsStyle(
style = @ExcelColumnStyle(excelCellStyleClass = DefaultExcelCellStyle.class, enumName = "CONTENTS")
)
public class ExcelDto {
private String name;
private int age;
private LocalDate birthDay;
}
```
Additionally, There is customizing use case, not pre-defined excel cell style in DefaultExcelCellStyle.
See Customizing section
```java
// In Controller
@RestController
public class Controller {
@GetMapping("/any-url")
public void methodName(RequestDto requestDto, HttpServletResponse response) throws IOException {
// If you specify response type when you use axios,
// you don't need to set HttpServletResponse contenttype. See #1 in Front with axios section
response.setContentType("application/vnd.ms-excel");
List<ExcelDto> excelDtos = someService.getRenderedData(requestDto);
ExcelFile excelFile = new OneSheetExcelFile<>(excelDtos, ExcelDto.class);
excelFile.write(response.getOutputStream());
}
}
```
### Front with axios
```js
axios({
method: 'GET',
url: 'server-url',
responseType: 'blob' // MUST NEED
})
.then(response => {
// #1 Here, I designate type with response header, however, you can specify 'application/vnd.ms-excel'
const url
= window.URL.createObjectURL(new Blobk([response.data], {type : response.headers['content-type']}));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'ExcelFile.xlsx');
document.body.appendChild(link);
link.click();
});
```
## Customizing
You can create custom ExcelCellStyle with Class or Enum
If you use Class, you don't need to designate enumName of @ExcelColumnStyle
```java
public class BlueHeaderStyle implements ExcelCellStyle {
@Override
public void apply(CellStyle cellStyle) {
// Do anything you want to change style
cellStyle.setBlaBla();
}
}
```
For convenient custom style class, we provide template style class, CustomExcelCellStyle
You can set
- cell color
- 4-side borders type
- cell contents align
Other features will be updated gradually.
```java
public class BlueHeaderStyle extends CustomExcelCellStyle {
@Override
public void configure(ExcelCellStyleConfigurer configurer) {
configurer.foregroundColor(223, 235, 246)
.excelBorders(DefaultExcelBorders.newInstance(ExcelBorderStyle.THIN))
.excelAlign(DefaultExcelAlign.CENTER_CENTER);
}
}
```
```java
@DefaultHeaderStyle(
style = @ExcelColumnStyle(excelCellStyleClass = BlueHeaderStyle.class)
)
public class ExcelDto {
private String field1;
}
```
If you use Enum, you have to specify enumName of @ExcelColumnStyle
```java
public enum CustomCellStyle implements ExcelCellStyle {
CUSTOM_HEADER(field1, field2);
// Whatever fields you need to configure cell style
private final String field1;
private final int field2;
@Override
public void apply(CellStyle cellStyle) {
// Do anything you want to change style with defined enum fields.
cellStyle.setBlaBla();
}
}
```
```java
public class ExcelDto {
@ExcelColumn(headerName = "Field Header Title",
contentsStyle = @ExcelColumnStyle(excelCellStyleClass = CustomCellStyle.class, enumName = "CUSTOM_HEADER")
)
private String field1;
}
```
## Kinds of Excel File
- OneSheetExcelFile
- MultiSheetExcelFile