package
cn.zifangsky.excel;
import
java.io.File;
import
java.io.FileOutputStream;
import
java.io.OutputStream;
import
java.util.List;
import
org.apache.commons.lang.StringUtils;
import
org.apache.poi.ss.usermodel.HorizontalAlignment;
import
org.apache.poi.ss.util.CellRangeAddress;
import
org.apache.poi.xssf.usermodel.XSSFCell;
import
org.apache.poi.xssf.usermodel.XSSFCellStyle;
import
org.apache.poi.xssf.usermodel.XSSFFont;
import
org.apache.poi.xssf.usermodel.XSSFRow;
import
org.apache.poi.xssf.usermodel.XSSFSheet;
import
org.apache.poi.xssf.usermodel.XSSFWorkbook;
import
org.dom4j.Attribute;
import
org.dom4j.Document;
import
org.dom4j.Element;
import
org.dom4j.io.SAXReader;
public
class
CreateTemplate {
public
static
void
main(String[] args) {
SAXReader reader =
new
SAXReader();
try
{
Document document = reader.read(
new
File(
"src/cn/zifangsky/excel/student.xml"
));
Element rootElement = document.getRootElement();
XSSFWorkbook workbook =
new
XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet(
"Sheet0"
);
String templateName = rootElement.attributeValue(
"name"
);
int
rowNum =
0
;
Element colGroup = rootElement.element(
"colgroup"
);
setColumnWidth(sheet, colGroup);
Element title = rootElement.element(
"title"
);
rowNum = setTitle(workbook, sheet, title, rowNum);
Element thead = rootElement.element(
"thead"
);
rowNum = setHead(workbook, sheet, thead, rowNum);
File POIExcelFile =
new
File(
"C:/Users/Administrator/Desktop/template.xlsx"
);
POIExcelFile.createNewFile();
OutputStream outputStream =
new
FileOutputStream(POIExcelFile);
workbook.write(outputStream);
outputStream.close();
workbook.close();
}
catch
(Exception e) {
e.printStackTrace();
}
}
/**
* 单位转换
*/
public
static
int
convert(String value) {
String unit = value.replaceAll(
"\\d"
,
""
);
String num = value.replaceAll(
"\\D"
,
""
);
int
v =
0
;
if
(StringUtils.isNotBlank(unit) && StringUtils.isNotBlank(num))
if
(unit.equals(
"em"
)) {
v = Math.round(Float.valueOf(num) *
267
.5F);
}
else
if
(unit.equals(
"px"
)) {
v = Math.round(Float.valueOf(num) * 20F);
}
return
v;
}
/**
* 设置列宽
*/
private
static
void
setColumnWidth(XSSFSheet sheet, Element colGroup) {
List<Element> cols = colGroup.elements();
for
(
int
i =
0
; i < cols.size(); i++) {
Element col = cols.get(i);
Attribute widthAttribute = col.attribute(
"width"
);
sheet.setColumnWidth(i, convert(widthAttribute.getValue()));
}
}
/**
* 设置标题相关内容
*/
private
static
int
setTitle(XSSFWorkbook workbook, XSSFSheet sheet, Element title,
int
rowNum) {
List<Element> trs = title.elements(
"tr"
);
int
rspan =
0
;
int
cspan =
0
;
for
(
int
i =
0
; i < trs.size(); i++, rowNum += rspan) {
Element tr = trs.get(i);
Attribute rowSpan = tr.attribute(
"rowspan"
);
Attribute height = tr.attribute(
"height"
);
rspan = Integer.valueOf(rowSpan.getValue());
List<Element> tds = tr.elements(
"td"
);
XSSFRow row = sheet.createRow(rowNum);
for
(
int
j =
0
, colNum =
0
; j < tds.size(); j++, colNum += cspan) {
XSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
Element td = tds.get(j);
XSSFCell cell = row.createCell(colNum);
Attribute colSpan = td.attribute(
"colspan"
);
Attribute value = td.attribute(
"value"
);
cspan = Integer.valueOf(colSpan.getValue());
if
(value !=
null
) {
cell.setCellValue(value.getValue());
XSSFFont font = workbook.createFont();
font.setFontName(
"宋体"
);
font.setBold(
true
);
font.setFontHeight((
short
) convert(height.getValue()));
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
sheet.addMergedRegion(
new
CellRangeAddress(rowNum, rowNum + rspan -
1
, colNum, colNum + cspan -
1
));
}
}
}
return
rowNum;
}
/**
* 设置表头相关内容
*/
private
static
int
setHead(XSSFWorkbook workbook, XSSFSheet sheet, Element thead,
int
rowNum) {
List<Element> trs = thead.elements(
"tr"
);
for
(
int
i =
0
; i < trs.size(); i++, rowNum++) {
Element tr = trs.get(i);
XSSFRow row = sheet.createRow(rowNum);
Attribute height = tr.attribute(
"height"
);
List<Element> ths = tr.elements(
"th"
);
for
(
int
j =
0
; j < ths.size(); j++) {
XSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);
Element th = ths.get(j);
Attribute value = th.attribute(
"value"
);
XSSFCell cell = row.createCell(j);
if
(value !=
null
) {
cell.setCellValue(value.getValue());
XSSFFont font = workbook.createFont();
font.setFontName(
"宋体"
);
font.setFontHeight((
short
) convert(height.getValue()));
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
}
}
}
return
rowNum;
}
}