1. 程式人生 > >java excel匯出 通用

java excel匯出 通用

jar包 poi-3.9

後臺程式碼:

 
  1. package lcy._41_50;

  2.  
  3. import java.io.FileOutputStream;

  4. import java.io.OutputStream;

  5. import java.net.URLEncoder;

  6.  
  7. import javax.servlet.http.HttpServletResponse;

  8.  
  9. import org.apache.poi.hssf.usermodel.HSSFCell;

  10. import org.apache.poi.hssf.usermodel.HSSFCellStyle;

  11. import org.apache.poi.hssf.usermodel.HSSFFont;

  12. import org.apache.poi.hssf.usermodel.HSSFRow;

  13. import org.apache.poi.hssf.usermodel.HSSFSheet;

  14. import org.apache.poi.hssf.usermodel.HSSFWorkbook;

  15. import org.apache.poi.hssf.util.CellRangeAddress;

  16. import org.apache.poi.hssf.util.HSSFColor;

  17.  
  18. @SuppressWarnings( { "deprecation" })

  19. public class Test46 {

  20.  
  21. public static void main(String[] args) throws Exception {

  22.  
  23. String sheetName = "採購統計單";

  24. String titleName = "採購統計單";

  25. String fileName = "採購統計單";

  26. int columnNumber = 3;

  27. int[] columnWidth = { 33, 22, 44 };

  28. String[][] dataList = { { "1", "2018-01-01", "列印紙" },

  29. { "2", "2017-09-02", "碳素筆" }, { "3", "2017-12-03", "文件盒" } };

  30. String[] columnName = { "序號", "採購時間", "物品名稱" };

  31. new Test46().ExportNoResponse(sheetName, titleName, fileName,

  32. columnNumber, columnWidth, columnName, dataList);

  33. }

  34.  
  35. public void ExportWithResponse(String sheetName, String titleName,

  36. String fileName, int columnNumber, int[] columnWidth,

  37. String[] columnName, String[][] dataList,

  38. HttpServletResponse response) throws Exception {

  39. if (columnNumber == columnWidth.length&& columnWidth.length == columnName.length) {

  40. // 第一步,建立一個webbook,對應一個Excel檔案

  41. HSSFWorkbook wb = new HSSFWorkbook();

  42. // 第二步,在webbook中新增一個sheet,對應Excel檔案中的sheet

  43. HSSFSheet sheet = wb.createSheet(sheetName);

  44. // sheet.setDefaultColumnWidth(15); //統一設定列寬

  45. for (int i = 0; i < columnNumber; i++)

  46. {

  47. for (int j = 0; j <= i; j++)

  48. {

  49. if (i == j)

  50. {

  51. sheet.setColumnWidth(i, columnWidth[j] * 256); // 單獨設定每列的寬

  52. }

  53. }

  54. }

  55. // 建立第0行 也就是標題

  56. HSSFRow row1 = sheet.createRow((int) 0);

  57. row1.setHeightInPoints(50);// 裝置標題的高度

  58. // 第三步建立標題的單元格樣式style2以及字型樣式headerFont1

  59. HSSFCellStyle style2 = wb.createCellStyle();

  60. style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  61. style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

  62. style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);

  63. style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

  64. HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 建立字型樣式

  65. headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字型加粗

  66. headerFont1.setFontName("黑體"); // 設定字型型別

  67. headerFont1.setFontHeightInPoints((short) 15); // 設定字型大小

  68. style2.setFont(headerFont1); // 為標題樣式設定字型樣式

  69.  
  70. HSSFCell cell1 = row1.createCell(0);// 建立標題第一列

  71. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,

  72. columnNumber - 1)); // 合併列標題

  73. cell1.setCellValue(titleName); // 設定值標題

  74. cell1.setCellStyle(style2); // 設定標題樣式

  75.  
  76. // 建立第1行 也就是表頭

  77. HSSFRow row = sheet.createRow((int) 1);

  78. row.setHeightInPoints(37);// 設定表頭高度

  79.  
  80. // 第四步,建立表頭單元格樣式 以及表頭的字型樣式

  81. HSSFCellStyle style = wb.createCellStyle();

  82. style.setWrapText(true);// 設定自動換行

  83. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  84. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 建立一個居中格式

  85.  
  86. style.setBottomBorderColor(HSSFColor.BLACK.index);

  87. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  88. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  89. style.setBorderRight(HSSFCellStyle.BORDER_THIN);

  90. style.setBorderTop(HSSFCellStyle.BORDER_THIN);

  91.  
  92. HSSFFont headerFont = (HSSFFont) wb.createFont(); // 建立字型樣式

  93. headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字型加粗

  94. headerFont.setFontName("黑體"); // 設定字型型別

  95. headerFont.setFontHeightInPoints((short) 10); // 設定字型大小

  96. style.setFont(headerFont); // 為標題樣式設定字型樣式

  97.  
  98. // 第四.一步,建立表頭的列

  99. for (int i = 0; i < columnNumber; i++)

  100. {

  101. HSSFCell cell = row.createCell(i);

  102. cell.setCellValue(columnName[i]);

  103. cell.setCellStyle(style);

  104. }

  105.  
  106. // 第五步,建立單元格,並設定值

  107. for (int i = 0; i < dataList.length; i++)

  108. {

  109. row = sheet.createRow((int) i + 2);

  110. // 為資料內容設定特點新單元格樣式1 自動換行 上下居中

  111. HSSFCellStyle zidonghuanhang = wb.createCellStyle();

  112. zidonghuanhang.setWrapText(true);// 設定自動換行

  113. zidonghuanhang.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 建立一個居中格式

  114.  
  115. // 設定邊框

  116. zidonghuanhang.setBottomBorderColor(HSSFColor.BLACK.index);

  117. zidonghuanhang.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  118. zidonghuanhang.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  119. zidonghuanhang.setBorderRight(HSSFCellStyle.BORDER_THIN);

  120. zidonghuanhang.setBorderTop(HSSFCellStyle.BORDER_THIN);

  121.  
  122. // 為資料內容設定特點新單元格樣式2 自動換行 上下居中左右也居中

  123. HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();

  124. zidonghuanhang2.setWrapText(true);// 設定自動換行

  125. zidonghuanhang2

  126. .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 建立一個上下居中格式

  127. zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中

  128.  
  129. // 設定邊框

  130. zidonghuanhang2.setBottomBorderColor(HSSFColor.BLACK.index);

  131. zidonghuanhang2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  132. zidonghuanhang2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  133. zidonghuanhang2.setBorderRight(HSSFCellStyle.BORDER_THIN);

  134. zidonghuanhang2.setBorderTop(HSSFCellStyle.BORDER_THIN);

  135. HSSFCell datacell = null;

  136. for (int j = 0; j < columnNumber; j++)

  137. {

  138. datacell = row.createCell(j);

  139. datacell.setCellValue(dataList[i][j]);

  140. datacell.setCellStyle(zidonghuanhang2);

  141. }

  142. }

  143.  
  144. // 第六步,將檔案存到瀏覽器設定的下載位置

  145. String filename = fileName + ".xls";

  146. response.setContentType("application/ms-excel;charset=UTF-8");

  147. response.setHeader("Content-Disposition", "attachment;filename="

  148. .concat(String.valueOf(URLEncoder.encode(filename, "UTF-8"))));

  149. OutputStream out = response.getOutputStream();

  150. try {

  151. wb.write(out);// 將資料寫出去

  152. String str = "匯出" + fileName + "成功!";

  153. System.out.println(str);

  154. } catch (Exception e) {

  155. e.printStackTrace();

  156. String str1 = "匯出" + fileName + "失敗!";

  157. System.out.println(str1);

  158. } finally {

  159. out.close();

  160. }

  161.  
  162. } else {

  163. System.out.println("列數目長度名稱三個陣列長度要一致");

  164. }

  165.  
  166. }

  167.  
  168. public void ExportNoResponse(String sheetName, String titleName,

  169. String fileName, int columnNumber, int[] columnWidth,

  170. String[] columnName, String[][] dataList) throws Exception {

  171. if (columnNumber == columnWidth.length&& columnWidth.length == columnName.length) {

  172. // 第一步,建立一個webbook,對應一個Excel檔案

  173. HSSFWorkbook wb = new HSSFWorkbook();

  174. // 第二步,在webbook中新增一個sheet,對應Excel檔案中的sheet

  175. HSSFSheet sheet = wb.createSheet(sheetName);

  176. // sheet.setDefaultColumnWidth(15); //統一設定列寬

  177. for (int i = 0; i < columnNumber; i++)

  178. {

  179. for (int j = 0; j <= i; j++)

  180. {

  181. if (i == j)

  182. {

  183. sheet.setColumnWidth(i, columnWidth[j] * 256); // 單獨設定每列的寬

  184. }

  185. }

  186. }

  187. // 建立第0行 也就是標題

  188. HSSFRow row1 = sheet.createRow((int) 0);

  189. row1.setHeightInPoints(50);// 裝置標題的高度

  190. // 第三步建立標題的單元格樣式style2以及字型樣式headerFont1

  191. HSSFCellStyle style2 = wb.createCellStyle();

  192. style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  193. style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

  194. style2.setFillForegroundColor(HSSFColor.LIGHT_TURQUOISE.index);

  195. style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

  196. HSSFFont headerFont1 = (HSSFFont) wb.createFont(); // 建立字型樣式

  197. headerFont1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字型加粗

  198. headerFont1.setFontName("黑體"); // 設定字型型別

  199. headerFont1.setFontHeightInPoints((short) 15); // 設定字型大小

  200. style2.setFont(headerFont1); // 為標題樣式設定字型樣式

  201.  
  202. HSSFCell cell1 = row1.createCell(0);// 建立標題第一列

  203. sheet.addMergedRegion(new CellRangeAddress(0, 0, 0,

  204. columnNumber - 1)); // 合併第0到第17列

  205. cell1.setCellValue(titleName); // 設定值標題

  206. cell1.setCellStyle(style2); // 設定標題樣式

  207.  
  208. // 建立第1行 也就是表頭

  209. HSSFRow row = sheet.createRow((int) 1);

  210. row.setHeightInPoints(37);// 設定表頭高度

  211.  
  212. // 第四步,建立表頭單元格樣式 以及表頭的字型樣式

  213. HSSFCellStyle style = wb.createCellStyle();

  214. style.setWrapText(true);// 設定自動換行

  215. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

  216. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 建立一個居中格式

  217.  
  218. style.setBottomBorderColor(HSSFColor.BLACK.index);

  219. style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  220. style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  221. style.setBorderRight(HSSFCellStyle.BORDER_THIN);

  222. style.setBorderTop(HSSFCellStyle.BORDER_THIN);

  223.  
  224. HSSFFont headerFont = (HSSFFont) wb.createFont(); // 建立字型樣式

  225. headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 字型加粗

  226. headerFont.setFontName("黑體"); // 設定字型型別

  227. headerFont.setFontHeightInPoints((short) 10); // 設定字型大小

  228. style.setFont(headerFont); // 為標題樣式設定字型樣式

  229.  
  230. // 第四.一步,建立表頭的列

  231. for (int i = 0; i < columnNumber; i++)

  232. {

  233. HSSFCell cell = row.createCell(i);

  234. cell.setCellValue(columnName[i]);

  235. cell.setCellStyle(style);

  236. }

  237.  
  238. // 第五步,建立單元格,並設定值

  239. for (int i = 0; i < dataList.length; i++)

  240. {

  241. row = sheet.createRow((int) i + 2);

  242. // 為資料內容設定特點新單元格樣式1 自動換行 上下居中

  243. HSSFCellStyle zidonghuanhang = wb.createCellStyle();

  244. zidonghuanhang.setWrapText(true);// 設定自動換行

  245. zidonghuanhang

  246. .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 建立一個居中格式

  247.  
  248. // 設定邊框

  249. zidonghuanhang.setBottomBorderColor(HSSFColor.BLACK.index);

  250. zidonghuanhang.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  251. zidonghuanhang.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  252. zidonghuanhang.setBorderRight(HSSFCellStyle.BORDER_THIN);

  253. zidonghuanhang.setBorderTop(HSSFCellStyle.BORDER_THIN);

  254.  
  255. // 為資料內容設定特點新單元格樣式2 自動換行 上下居中左右也居中

  256. HSSFCellStyle zidonghuanhang2 = wb.createCellStyle();

  257. zidonghuanhang2.setWrapText(true);// 設定自動換行

  258. zidonghuanhang2

  259. .setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 建立一個上下居中格式

  260. zidonghuanhang2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中

  261.  
  262. // 設定邊框

  263. zidonghuanhang2.setBottomBorderColor(HSSFColor.BLACK.index);

  264. zidonghuanhang2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

  265. zidonghuanhang2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

  266. zidonghuanhang2.setBorderRight(HSSFCellStyle.BORDER_THIN);

  267. zidonghuanhang2.setBorderTop(HSSFCellStyle.BORDER_THIN);

  268. HSSFCell datacell = null;

  269. for (int j = 0; j < columnNumber; j++)

  270. {

  271. datacell = row.createCell(j);

  272. datacell.setCellValue(dataList[i][j]);

  273. datacell.setCellStyle(zidonghuanhang2);

  274. }

  275. }

  276.  
  277. // 第六步,將檔案存到指定位置

  278. try {

  279. FileOutputStream fout = new FileOutputStream("D:students.xls");

  280. wb.write(fout);

  281. String str = "匯出" + fileName + "成功!";

  282. System.out.println(str);

  283. fout.close();

  284. } catch (Exception e) {

  285. e.printStackTrace();

  286. String str1 = "匯出" + fileName + "失敗!";

  287. System.out.println(str1);

  288. }

  289. } else {

  290. System.out.println("列數目長度名稱三個陣列長度要一致");

  291. }

  292.  
  293. }

  294.  
  295. }