Java 는 템 플 릿 에 따라 Excel 보고 서 를 내 보 내 고 템 플 릿 을 복사 하여 여러 개의 Sheet 페이지 를 생 성 합 니 다.
또한 제 공 된 템 플 릿 Sheet 페이지 에 따라 복사 하여 여러 Sheet 페이지 의 수 요 를 실현 할 수 있 습 니 다.
이 도구 클래스 를 사용 할 때 필요 한 것 이 모든 Sheet 페이지 의 데이터 가 일치 하지 않 지만 표 스타일 과 템 플 릿 이 같 습 니 다.
그러면 실제 상황 에서 sql 에 따라 추가 할 데이터 원본 을 조회 해 야 합 니 다(데이터 원본 만 변경 하면 됩 니 다)
사용 하 는 기술 은 POI 내 보 내기 입 니 다.클래스 때문에 현재 2003 버 전의 Excel 만 지원 합 니 다.
사용 하기 전에 해당 jar 가방 을 다운로드 하 세 요!
후기 에 시간 이 있 으 면 계속 보완 할 것 입 니 다.첫 번 째 도구 류 는 완선 되 지 않 은 부분 이 있 으 면 양해 해 주 십시오!
먼저 템 플 릿 스타일 과 실행 결 과 를 보고 코드 를 바로 올 립 니 다.
엑셀 템 플 릿 스타일 입 니 다.
내 보 내기 결과 입 니 다.
구체 적 실현 데모 보기
package com.sgcc.xyz.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import com.sgcc.uap.persistence.impl.HibernateDaoImpl;
/**
*
*
* @author JYLiu
@
POI Excel2003 Excel
* Sheet Sheet
* , Sheet ,
* sql ( )
*/
public class ExcelUtil {
/**
* , Sheet
*
* @param Excel
* @param ( )
* @param
* @param
* @param Sheet
* @param Map key (key value )
* @param ( )
*/
public static void ExcelByModel(String ExcelName, String ModelURl, List<Map<String, String>> dataSource,
HttpServletResponse response, String[] sheetNames, String[] keyNames, int rowNum) throws Exception {
// Excel
response.setContentType("application/vnd.ms-excel");
// Excel
String fileName = new String(ExcelName.getBytes("utf-8"), "ISO-8859-1");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
//
OutputStream fileOut = response.getOutputStream();
//
File file = new File(ModelURl);
FileInputStream fins = new FileInputStream(file);
POIFSFileSystem fs = new POIFSFileSystem(fins);
// Excel
HSSFWorkbook wb = new HSSFWorkbook(fs);
//
HSSFCellStyle style = wb.createCellStyle();
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//
style.setBottomBorderColor(HSSFColor.BLACK.index);
style.setLeftBorderColor(HSSFColor.BLACK.index);
style.setRightBorderColor(HSSFColor.BLACK.index);
style.setTopBorderColor(HSSFColor.BLACK.index);
//
HSSFSheet sheetModel = null;
// Sheet
HSSFSheet newSheet = null;
//
HSSFRow row = null;
//
HSSFCell cell = null;
// Sheet
for (int i = 0; i < sheetNames.length; i++) {
// Sheet
sheetModel = wb.getSheetAt(0);
// Sheet
newSheet = wb.createSheet(sheetNames[i]);
// Sheet
copySheet(wb, sheetModel, newSheet, sheetModel.getFirstRowNum(), sheetModel.getLastRowNum());
// Sheet
row=newSheet.getRow(0);
row.getCell(1).setCellValue(" ");
//
row.getCell(6).setCellValue(" ");
// ,
row=newSheet.getRow(1);
row.getCell(1).setCellValue(" ");
//
row.getCell(6).setCellValue(" ");
// ( Excel 0 , )
int num = rowNum - 1;
for (Map<String, String> item : dataSource) {
// ,
row = newSheet.createRow((short) num);
//
for (int j = 0; j < keyNames.length; j++) {
//
cell = row.createCell(j); cell.setCellStyle(style); cell.setCellValue(item.get(keyNames[j]));
}
num++;
}
// break break Sheet
}
//
wb.write(fileOut);
//
fileOut.close();
}
/**
*
* @param Excel
* @param Sheet
* @param Sheet
* @param
* @param
*/
private static void copySheet(HSSFWorkbook wb, HSSFSheet fromsheet, HSSFSheet newSheet, int firstrow, int lasttrow) {
//
if ((firstrow == -1) || (lasttrow == -1) || lasttrow < firstrow) {
return;
}
//
Region region = null;
for (int i = 0; i < fromsheet.getNumMergedRegions(); i++) {
region = fromsheet.getMergedRegionAt(i);
if ((region.getRowFrom() >= firstrow) && (region.getRowTo() <= lasttrow)) {
newSheet.addMergedRegion(region);
}
}
HSSFRow fromRow = null;
HSSFRow newRow = null;
HSSFCell newCell = null;
HSSFCell fromCell = null;
//
for (int i = firstrow; i < lasttrow; i++) {
fromRow = fromsheet.getRow(i);
if (fromRow != null) {
for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
int colnum = fromsheet.getColumnWidth((short) j);
if (colnum > 100) {
newSheet.setColumnWidth((short) j, (short) colnum);
}
if (colnum == 0) {
newSheet.setColumnHidden((short) j, true);
} else {
newSheet.setColumnHidden((short) j, false);
}
}
break;
}
}
//
for (int i = 0; i < lasttrow; i++) {
fromRow = fromsheet.getRow(i);
if (fromRow == null) {
continue;
}
newRow = newSheet.createRow(i - firstrow);
newRow.setHeight(fromRow.getHeight());
for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) {
fromCell = fromRow.getCell((short) j);
if (fromCell == null) {
continue;
}
newCell = newRow.createCell((short) j);
newCell.setCellStyle(fromCell.getCellStyle());
int cType = fromCell.getCellType();
newCell.setCellType(cType);
switch (cType) {
case HSSFCell.CELL_TYPE_STRING:
newCell.setCellValue(fromCell.getRichStringCellValue());
break;
case HSSFCell.CELL_TYPE_NUMERIC:
newCell.setCellValue(fromCell.getNumericCellValue());
break;
case HSSFCell.CELL_TYPE_FORMULA:
newCell.setCellValue(fromCell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
newCell.setCellValue(fromCell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR:
newCell.setCellValue(fromCell.getErrorCellValue());
break;
default:
newCell.setCellValue(fromCell.getRichStringCellValue());
break;
}
}
}
}
}
이상 은 전체 도구 류 의 핵심 코드 입 니 다.테스트 데 이 터 는 다음 과 같다.
/**
* Sheet
*/
public static void ExcelTest(HttpServletResponse response){
//
List<Map<String, String>> dataSourceList=new ArrayList<Map<String,String>>(){
{
add(new HashMap<String, String>(){{
put(" ", "1");
put(" ", "BUSINESS_ID");
put(" ", " id");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", " ");
put(" ", "");
}});
add(new HashMap<String, String>(){{
put(" ", "2");
put(" ", "PROC_INST_ID");
put(" ", " ");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", "");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "3");
put(" ", "PROC_STATE");
put(" ", " ");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", " ");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "4");
put(" ", "APPLICANT");
put(" ", " ");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", " ");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "5");
put(" ", "LEAVE_TYPE");
put(" ", " ");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", " ");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "6");
put(" ", "REASON");
put(" ", " ");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", " ");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "7");
put(" ", "BEGIN_TIME");
put(" ", " ");
put(" ", "TIMESTAMP");
put(" ", "");
put(" ", " ");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "8");
put(" ", "END_TIME");
put(" ", " ");
put(" ", "TIMESTAMP");
put(" ", "");
put(" ", " ");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "9");
put(" ", "INSERT_PERSON");
put(" ", " ");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", " ");
put(" ", " ");
}});
add(new HashMap<String, String>(){{
put(" ", "10");
put(" ", "APPROVEDBY");
put(" ", " ");
put(" ", "VARCHAR");
put(" ", "64");
put(" ", " ");
put(" ", " ");
}});
}
};
// key
String[] keysStrings={" "," "," "," "," "," "," "};
//
String [] sheetNameStrings={"Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6"};
String modelURLString="D:\\model\\model.xls";
try {
ExcelUtil.ExcelByModel(" ", modelURLString, dataSourceList, response, sheetNameStrings, keysStrings, 6);
} catch (Exception e) {
e.printStackTrace();
}
}
이상 은 Excel 보고서 가 템 플 릿 에 따라 여러 Sheet 을 내 보 내 고 생 성 하 는 작은 도구 입 니 다.필요 한 것 은 코드 를 참고 하여 실제 업무 수요 에 따라 코드 조정 을 할 수 있 습 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 우 리 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.