반응형
POI 자동 필터
Apache POI를 사용하여 Excel 2007 문서에서 자동 필터 영역을 미리 정의하는 방법은 무엇입니까?
작은 코드 예제나 링크가 좋을 것 같습니다.
필터 영역에서 첫 번째 셀과 마지막 셀을 저장하고 다음을 실행합니다.
sheet.setAutoFilter(new CellRangeAddress(firstCell.getRow(), lastCell.getRow(), firstCell.getCol(), lastCell.getCol()));
예를 들어, 아래 시트에서.
>x (x, y)
0123456
0|--hhh--| h = header
1|--+++--| + = values
2|--+++--| - = empty fields
3|--+++--|
4|-------|
첫 번째 셀은 첫 번째 셀 위의 헤더가 됩니다.+
(2,1) 셀.마지막이 마지막이 될 것입니다.+
셀(5,3)
열과 행 값이 모두 가변적이었기 때문에 CellRange를 얻기가 어려웠습니다.그래서 저는 이 속임수를 썼습니다.
마지막 CellReference 변수를 A1(행 1, 열 1)로 초기화합니다.
String lastCellReference = "A1";
셀을 생성할 때마다 최신 값을 유지하기 위해 마지막 셀 참조를 업데이트합니다.
cell = row.createCell((short) columnCount);
cell.setCellValue(rs.getInt(i));
lastCellReference=cell.getReference();
A1은 항상 첫 번째 셀이 되고 마지막 셀 참조가 됩니다.
sheet1.setAutoFilter(CellRangeAddress.valueOf("A1:"+ lastCellReference));
//include poi-3.7.jar,ojdbc.jar in classpath
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;
public class ExcelCreator{
public static void createExcel(String anySql,OutputStream out) throws Exception{
Connection conn=getOracleConnection();
String userSql1="select * from tab";
String userSql2="select * from tab";
String[] sqls={userSql1,userSql2,anySql};
String[] workSheetNames={"User","Manager","Any"};
HSSFWorkbook wb = new HSSFWorkbook();
CellStyle style1 = wb.createCellStyle();
CellStyle style2 = wb.createCellStyle();
for(int i=0;i<lt;sqls.length;i++){
if(sqls[i]==null||sqls[i].length()==0){
continue;
}
HSSFSheet sheet = wb.createSheet(workSheetNames[i]);
Statement st = conn.createStatement();
System.out.println("--------------------------");
System.out.println(sqls[i]);
ResultSet rs = st.executeQuery(sqls[i]);
ResultSetMetaData rsMetaData = rs.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();
int rowCounter=0;
HSSFRow rowHeader = sheet.createRow(rowCounter);
for(int columnCounter=0; columnCounter<lt;numberOfColumns;columnCounter++){
rowHeader.createCell(columnCounter).setCellValue(rsMetaData.getColumnName(columnCounter+1));
setFilledColorStyle(rowHeader.getCell(columnCounter),style2);
}
sheet.setAutoFilter(org.apache.poi.ss.util.CellRangeAddress.valueOf("A1:"+ (Character.toString((char)( 65+numberOfColumns-1)))+"1"));
rowCounter++;
while(rs.next()) {
// Create a row and put some cells in it. Rows are 0 based.
HSSFRow row = sheet.createRow(rowCounter);
for(int columnCounter=0; columnCounter<lt;numberOfColumns;columnCounter++){
row.createCell(columnCounter).setCellValue(rs.getString(columnCounter+1));
setThinBorderStyle(row.getCell(columnCounter),style1);
}
rowCounter++;
}
rs.close();
st.close();
}
// Write the output
wb.write(out);
out.close();
conn.close();
System.out.println("Created Successfully");
}
public static void main(String[] args) throws Exception{
OutputStream out = new FileOutputStream("c:/admin.xls");
createExcel(" select * from tab", out);
}
public static Connection getOracleConnection() throws Exception {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:XE";
String username = "system";
String password = "password";
Class.forName(driver); // load Oracle driver
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
//This method set the thin border style
private static void setThinBorderStyle(Cell cell, CellStyle style) {
style.setBorderBottom(CellStyle.BORDER_THIN);
style.setBottomBorderColor(IndexedColors.RED.getIndex());
style.setBorderLeft(CellStyle.BORDER_THIN);
style.setLeftBorderColor(IndexedColors.RED.getIndex());
style.setBorderRight(CellStyle.BORDER_THIN);
style.setRightBorderColor(IndexedColors.RED.getIndex());
style.setBorderTop(CellStyle.BORDER_THIN);
style.setTopBorderColor(IndexedColors.RED.getIndex());
cell.setCellStyle(style);
}
//This method set the dashed border style
private static void setDashedBorderStyle(Cell cell, CellStyle style) {
style.setBorderBottom(CellStyle.BORDER_DASHED);
style.setBottomBorderColor(IndexedColors.GREEN.getIndex());
style.setBorderLeft(CellStyle.BORDER_DASHED);
style.setLeftBorderColor(IndexedColors.GREEN.getIndex());
style.setBorderRight(CellStyle.BORDER_DASHED);
style.setRightBorderColor(IndexedColors.GREEN.getIndex());
style.setBorderTop(CellStyle.BORDER_DASHED);
style.setTopBorderColor(IndexedColors.GREEN.getIndex());
cell.setCellStyle(style);
} // This method set the dotted border style
private static void setFilledColorStyle(Cell cell, CellStyle style) {
// style.setFillBackgroundColor(new HSSFColor.YELLOW().getIndex());
style.setFillForegroundColor(IndexedColors.ORANGE.getIndex());
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND );
// style.setBorderLeft(CellStyle.BORDER_DOTTED);
// style.setLeftBorderColor(IndexedColors.BLUE.getIndex());
// style.setBorderRight(CellStyle.BORDER_DOTTED);
// style.setRightBorderColor(IndexedColors.BLUE.getIndex());
// style.setBorderTop(CellStyle.BORDER_DOTTED);
// style.setTopBorderColor(IndexedColors.BLUE.getIndex());
cell.setCellStyle(style);
}
}
sets Auto filter
sheet.setAutoFilter(CellRangeAddress.valueOf("A1:N1"));
3.7-beta3-20100811 버전의 Apache POI 이후 이 기능을 사용할 수 있게 되었습니다.
답변: (아직) 불가능합니다.
https://issues.apache.org/bugzilla/show_bug.cgi?id=35125
행이 존재하고 채워지면 첫 번째 행부터 마지막 열까지 autoFilters 설정
final XSSFRow firstRow = sheet.getRow(0);
final short lastCellNum = firstRow.getLastCellNum();
final XSSFCell lastCell = firstRow.getCell(lastCellNum - 1);
final String lastCellReference = lastCell.getReference();
sheet.setAutoFilter(CellRangeAddress.valueOf("A1:" + lastCellReference));
언급URL : https://stackoverflow.com/questions/3114220/poi-auto-filter
반응형
'programing' 카테고리의 다른 글
전체 어레이를 덤프하는 중: console.log 및 console.dir 출력 "...더 많은 항목 수]" (0) | 2023.08.16 |
---|---|
봄에 모델앤뷰 대 모델을 언제 사용해야 합니까? (0) | 2023.08.16 |
yoman full stack generator social oauth 이슈 (0) | 2023.08.16 |
iPhone - 로컬 파일 URL의 NSData (0) | 2023.08.16 |
파이썬에서 무작위 문자열을 생성하는 방법은 무엇입니까? (0) | 2023.08.16 |