一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java實現合并單元格的同時并導出excel示例

java實現合并單元格的同時并導出excel示例

2020-08-29 14:10chuquan.ou Java教程

這篇文章主要給大家介紹了關于java實現合并單元格的同時并導出excel的相關資料,文中先進行了簡單的介紹,之后給出了詳細的示例代碼,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。

介紹

POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。POI可以操作的文檔格式有excel,word,powerpoint等,POI進行跨行需要用到對象HSSFSheet對象,現在就當我們程序已經定義了一個HSSFSheet對象sheet。

跨第1行第1個到第2個單元格的操作為

java" id="highlighter_539954">
?
1
sheet.addMergedRegion(new Region(0,(short)0,0,(short)1));

跨第1行第1個到第2行第1個單元格的操作為

?
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.合并單元格的時候要合并的單單元格必須先創建,這樣方便后面再次獲取這個單元格來填充數據,主要就是因為合并時不能由后向前進行合并引起的。

示例代碼

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久热这里只有 精品 | 单身男女韩剧在线看 | 青青草国产免费久久久91 | 特黄级 | 香蕉国产人午夜视频在线 | 欧美丝袜videohd | 草莓视频丝瓜 | 日韩亚洲欧美一区二区三区 | 好硬好大好浪夹得好紧h | 欧美精品一区二区在线观看 | 久久久久激情免费观看 | 欧美一级片免费看 | 99re免费在线视频 | 美人老师沦为 | 色婷婷久久综合中文久久一本` | 蜜桃视频一区二区 | 91大神在线观看精品一区 | 欧美一级高清片 | 99任你躁精品视频 | 久久99re2在线视频精品 | 精品国产乱码久久久久久免费流畅 | 成人软件18免费 | 97国产精品久久碰碰牛牛 | 美女扒开屁股让男人进去 | 成人a级特黄毛片 | 免费视频精品一区二区三区 | 8x8x华人免费| 成人国产在线视频 | 3d美女触手怪爆羞羞漫画 | 国产91在线精品 | 免费欧美日韩 | 国产毛片在线观看 | 538亚洲欧美国产日韩在线精品 | 成人在线一区二区三区 | 特大黑人娇小亚洲女mp4 | 好涨好大我快受不了了视频网 | 国产精品怡红院永久免费 | 波多野结中文字幕在线69视频 | 国产欧美日韩成人 | 福利入口在线观看 | 亚洲天堂网站在线 |