文章出處

POI進行跨行需要用到對象HSSFSheet對象,現在就當我們程序已經定義了一個HSSFSheet對象sheet。 

跨第1行第1個到第2個單元格的操作為 
sheet.addMergedRegion(new Region(0,(short)0,0,(short)1)); 

跨第1行第1個到第2行第1個單元格的操作為 
sheet.addMergedRegion(new Region(0,(short)0,1,(short)0)); 


重點注意事項: 
1.單元格CELL和ROW對象下標都是從0開始的。 
2.單元格合并時Region(1,2,3,4)第1個值的行號必須要比3位置的行號小,如果大于3就不能正常合并單元格 
3.合并單元格的時候要合并的單單元格必須先創建,這樣方便后面再次獲取這個單元格來填充數據,主要就是因為合并時不能由后向前進行合并引起的。 

Java代碼  收藏代碼
    1. import java.io.IOException;  
    2.   
    3. import org.apache.poi.hssf.usermodel.HSSFCell;  
    4. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
    5. import org.apache.poi.hssf.usermodel.HSSFRow;  
    6. import org.apache.poi.hssf.usermodel.HSSFSheet;  
    7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
    8. import org.apache.poi.hssf.util.Region;  
    9.   
    10.   
    11. public class ExcelTest {      
    12.      
    13.     /**    
    14.      * @param args    
    15.      */     
    16.     public static void main(String[] args) throws IOException {      
    17.      
    18.         try {      
    19.             HSSFWorkbook wb = new HSSFWorkbook();      
    20.             HSSFSheet sheet = wb.createSheet("new   sheet");      
    21.             HSSFCellStyle style = wb.createCellStyle(); // 樣式對象      
    22.      
    23.             style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直      
    24.             style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平      
    25.             HSSFRow row = sheet.createRow((short) 0);      
    26.             HSSFRow row2 = sheet.createRow((short) 1);      
    27.      
    28.             sheet.addMergedRegion(new Region(0, (short) 0, 1, (short) 0));      
    29.             HSSFCell ce = row.createCell((short) 0);      
    30.             ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文處理      
    31.             ce.setCellValue("項目\\日期"); // 表格的第一行第一列顯示的數據      
    32.             ce.setCellStyle(style); // 樣式,居中      
    33.             int num = 0;      
    34.             for (int i = 0; i < 9; i++) { // 循環9次,每一次都要跨單元格顯示      
    35.                 // 計算從那個單元格跨到那一格      
    36.                 int celln = 0;      
    37.                 int celle = 0;      
    38.                 if (i == 0) {      
    39.                     celln = 0;      
    40.                     celle = 1;      
    41.                 } else {      
    42.                     celln = (i * 2);      
    43.                     celle = (i * 2 + 1);      
    44.                 }      
    45.                 // 單元格合并      
    46.                 // 四個參數分別是:起始行,起始列,結束行,結束列      
    47.                 sheet.addMergedRegion(new Region(0, (short) (celln + 1), 0,      
    48.                         (short) (celle + 1)));      
    49.                 HSSFCell cell = row.createCell((short) (celln + 1));      
    50.                 cell.setCellValue("merging" + i); // 跨單元格顯示的數據      
    51.                 cell.setCellStyle(style); // 樣式      
    52.                 // 不跨單元格顯示的數據,如:分兩行,上一行分別兩格為一格,下一行就為兩格,“數量”,“金額”      
    53.                 HSSFCell cell1 = row2.createCell((short) celle);      
    54.                 HSSFCell cell2 = row2.createCell((short) (celle + 1));      
    55.                 cell1.setEncoding(HSSFCell.ENCODING_UTF_16);      
    56.                 cell1.setCellValue("數量");      
    57.                 cell1.setCellStyle(style);      
    58.                 cell2.setEncoding(HSSFCell.ENCODING_UTF_16);      
    59.                 cell2.setCellValue("金額");      
    60.                 cell2.setCellStyle(style);      
    61.                 num++;      
    62.             }      
    63.      
    64.             // 在后面加上合計百分比      
    65.      
    66.             // 合計 在最后加上,還要跨一個單元格      
    67.             sheet.addMergedRegion(new Region(0, (short) (2 * num + 1), 0,      
    68.                     (short) (2 * num + 2)));      
    69.             HSSFCell cell = row.createCell((short) (2 * num + 1));      
    70.             cell.setEncoding(HSSFCell.ENCODING_UTF_16);      
    71.             cell.setCellValue("合計");      
    72.             cell.setCellStyle(style);      
    73.             HSSFCell cell1 = row2.createCell((short) (2 * num + 1));      
    74.             HSSFCell cell2 = row2.createCell((short) (2 * num + 2));      
    75.             cell1.setEncoding(HSSFCell.ENCODING_UTF_16);      
    76.             cell1.setCellValue("數量");      
    77.             cell1.setCellStyle(style);      
    78.             cell2.setEncoding(HSSFCell.ENCODING_UTF_16);      
    79.             cell2.setCellValue("金額");      
    80.             cell2.setCellStyle(style);      
    81.      
    82.             // 百分比 同上      
    83.             sheet.addMergedRegion(new Region(0, (short) (2 * num + 3), 0,      
    84.                     (short) (2 * num + 4)));      
    85.             HSSFCell cellb = row.createCell((short) (2 * num + 3));      
    86.             cellb.setEncoding(HSSFCell.ENCODING_UTF_16);      
    87.              
    88.             cellb.setCellValue("百分比");      
    89.             cellb.setCellStyle(style);      
    90.               
    91.             HSSFCell cellb1 = row2.createCell((short) (2 * num + 3));      
    92.             HSSFCell cellb2 = row2.createCell((short) (2 * num + 4));      
    93.             cellb1.setEncoding(HSSFCell.ENCODING_UTF_16);      
    94.             cellb1.setCellValue("數量");      
    95.             cellb1.setCellStyle(style);      
    96.             cellb2.setEncoding(HSSFCell.ENCODING_UTF_16);      
    97.             cellb2.setCellValue("金額");      
    98.             cellb2.setCellStyle(style);      
    99.      
    100.             /***這里是問題的關鍵,將這個工作簿寫入到一個流中就可以輸出相應的名字,這里需要寫路徑就ok了。 
    101.             FileOutputStream fileOut = new FileOutputStream("workbook.xls");     
    102.             wb.write(fileOut);     
    103.             fileOut.close(); 
    104.              **/  
    105.               
    106.               
    107.             /**第二種是輸出到也面中的excel名稱 
    108.              * pName="欄目統計表";    
    109.     response.reset();    
    110.     response.setContentType("application/x-msdownload");    
    111.     response.setHeader("Content-Disposition","attachment; filename="+new String(pName.getBytes("gb2312"),"ISO-8859-1")+".xls");    
    112.     ServletOutputStream outStream=null;    
    113.    
    114.     try{    
    115.         outStream = response.getOutputStream();    
    116.         wb.write(outStream);    
    117.     }catch(Exception e)    
    118.     {    
    119.      e.printStackTrace();    
    120.     }finally{    
    121.         outStream.close();    
    122.     }    
    123.              * */  
    124.             System.out.print("OK");      
    125.         } catch (Exception ex) {      
    126.             ex.printStackTrace();      
    127.         }      
    128.      
    129.     }      
    130.      
    131. }    

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()