public class Hello { public static void main ( String [ ] args) { String targetPath = rs. getSession ( ) . getServletContext ( ) . getRealPath ( "/excelModel/" + fileName + ".xlsx" ) ; File fi = new File ( targetPath) ; FileInputStream is = new FileInputStream ( fi) ; XSSFWorkbook wb = new XSSFWorkbook ( is) ; int lastRowNum = wb. getSheetAt ( 0 ) . getLastRowNum ( ) ; if ( fileName. contains ( "横向明细" ) ) { wb. getSheetAt ( 0 ) . getRow ( 3 ) . getCell ( 0 ) . setCellValue ( "分配期号:" + hxmxFpqh) ; } SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook ( wb, 1000 ) ; Sheet sheet = sxssfWorkbook. getSheetAt ( 0 ) ; writeExcel ( list, sheet, lastRowNum) ; tkDownload2 ( sheetName, sxssfWorkbook, res) ; } public static void writeExcel ( List < ? > list, Sheet sheet, int lastRowNum) throws IOException , IllegalArgumentException , IllegalAccessException { Row row; for ( int i = 0 ; i < list. size ( ) ; i++ ) { row = sheet. createRow ( ( int ) i + lastRowNum + 1 ) ; row. createCell ( 0 ) . setCellValue ( i + 1 ) ; Object tjb = list. get ( i) ; Class class1 = ( Class ) tjb. getClass ( ) ; Field [ ] fs = class1. getDeclaredFields ( ) ; for ( int j = 1 ; j < fs. length; j++ ) { Field f = fs[ j] ; f. setAccessible ( true ) ; Object v = f. get ( tjb) ; String type = f. getType ( ) . toString ( ) ; if ( v == null || v. toString ( ) == "" ) { row. createCell ( j) . setCellValue ( "" ) ; } else { if ( type. endsWith ( "Double" ) || type. endsWith ( "double" ) ) { row. createCell ( j) . setCellValue ( Double . parseDouble ( v. toString ( ) ) ) ; } else if ( type. endsWith ( "Integer" ) || type. endsWith ( "int" ) ) { row. createCell ( j) . setCellValue ( Double . parseDouble ( v. toString ( ) ) ) ; } else if ( type. endsWith ( "String" ) ) { row. createCell ( j) . setCellValue ( v. toString ( ) ) ; } } } } } public static void tkDownload2 ( String sheetName, SXSSFWorkbook wb, HttpServletResponse res) throws IOException { String fileName = sheetName; ByteArrayOutputStream os = new ByteArrayOutputStream ( ) ; wb. write ( os) ; byte [ ] content = os. toByteArray ( ) ; InputStream is = new ByteArrayInputStream ( content) ; res. reset ( ) ; res. setContentType ( "application/vnd.ms-excel;charset=utf-8" ) ; res. addHeader ( "Content-Disposition" , "attachment;filename=" + URLEncoder . encode ( fileName + ".xlsx" , "UTF-8" ) ) ; try ( ServletOutputStream out = res. getOutputStream ( ) ; BufferedInputStream bis = new BufferedInputStream ( is) ; BufferedOutputStream bos = new BufferedOutputStream ( out) ) { byte [ ] buff = new byte [ 2048 ] ; int bytesRead; while ( - 1 != ( bytesRead = bis. read ( buff, 0 , buff. length) ) ) { bos. write ( buff, 0 , bytesRead) ; } } catch ( Exception e) { logger. error ( "tkDownload failed |{}" , ( ) -> e. toString ( ) ) ; logger. debug ( "failed {}" , e) ; } } }