JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為尾碼的excel,個人認為已經是被淘汰的框架,而poi可以操作Excel 95及以後的版本,即可操作尾碼為 .xls 和 .xlsx兩種格式的excel。 P ...
JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為尾碼的excel,個人認為已經是被淘汰的框架,而poi可以操作Excel 95及以後的版本,即可操作尾碼為 .xls 和 .xlsx兩種格式的excel。
POI全稱 Poor Obfuscation Implementation,直譯為“可憐的模糊實現”,當然並不可憐而且很實用,利用POI介面可以通過JAVA操作Microsoft office 套件工具的讀寫功能。官網:http://poi.apache.org ,POI支持office的所有版本,並且在接下來的演示中需要從前端頁面導入用戶上傳的版本不確定的excel文件,所以選擇POI來講解。在官網,下載POI :對於只操作2003 及以前版本的excel,只需要 ,如果需要同時對2007及以後版本進行操作則需要複製
引入以下jar包:
poi-3.10.1-20140818.jar(若需求為03版本的,以下兩個jar包不需要引入)
poi-ooxml-3.10.1-20140818.jar,
poi-ooxml-schemas-3.10.1-20140818.jar,以及複製在ooxml-lib目錄下的xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。
在POI包中有如下幾個主要對象和excel的幾個對象對應:
HSSFWorkbook |
Excel 工作簿workbook |
HSSFSheet |
Excel 工作表 sheet |
HSSFRow |
Excel 行 |
HSSFCell |
Excel 單元格 |
(07以上版本與之不同是使用的XSSFWorkbook,XSSFSheet,XSSFRow,XSSFCell)
附代碼
1 package cn.test; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 6 import org.apache.poi.hssf.usermodel.HSSFCell; 7 import org.apache.poi.hssf.usermodel.HSSFCellStyle; 8 import org.apache.poi.hssf.usermodel.HSSFFont; 9 import org.apache.poi.hssf.usermodel.HSSFRow; 10 import org.apache.poi.hssf.usermodel.HSSFSheet; 11 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 12 import org.apache.poi.hssf.util.CellRangeAddress; 13 import org.apache.poi.hssf.util.HSSFColor; 14 import org.apache.poi.ss.usermodel.Cell; 15 import org.apache.poi.ss.usermodel.Row; 16 import org.apache.poi.ss.usermodel.Sheet; 17 import org.apache.poi.ss.usermodel.Workbook; 18 import org.apache.poi.xssf.usermodel.XSSFCell; 19 import org.apache.poi.xssf.usermodel.XSSFRow; 20 import org.apache.poi.xssf.usermodel.XSSFSheet; 21 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 22 import org.junit.Test; 23 24 public class TestPOI2Excel { 25 /** 26 * 寫入03版本excel 27 * @throws Exception 28 */ 29 @Test 30 public void testWrite03Excel() throws Exception { 31 /** 32 * 工作簿-工作表-行-單元格 33 * 34 */ 35 //工作簿 36 HSSFWorkbook workbook = new HSSFWorkbook(); 37 //工作表 38 HSSFSheet sheet = workbook.createSheet("hello world"); 39 //行--index從0開始 40 HSSFRow row = sheet.createRow(2); 41 //創建單元格--index從0開始 42 HSSFCell cell = row.createCell(2); 43 cell.setCellValue("hello world"); 44 //輸出到硬碟 45 FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\測試.xls"); 46 //吧excel輸入到具體的地址 47 workbook.write(fileOutputStream); 48 49 //關閉 50 workbook.close(); 51 fileOutputStream.close(); 52 53 } 54 55 /** 56 * 讀取03版本excel 57 * @throws Exception 58 */ 59 @Test 60 public void testRead03Excel() throws Exception { 61 /** 62 * 工作簿-工作表-行-單元格 63 * 64 */ 65 FileInputStream fileInputStream = new FileInputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\測試.xls"); 66 //讀取工作簿 67 HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream); 68 //讀取第一個工作表 69 HSSFSheet sheet = workbook.getSheetAt(0); 70 //讀取第三行--index從0開始 71 HSSFRow row = sheet.getRow(2); 72 //讀取單元格--index從0開始 73 HSSFCell cell = row.getCell(2); 74 System.out.println(cell.getStringCellValue()); 75 76 //關閉 77 workbook.close(); 78 fileInputStream.close(); 79 80 } 81 82 /** 83 * 寫入07版本excel 84 * @throws Exception 85 */ 86 @Test 87 public void testWrite07Excel() throws Exception { 88 /** 89 * 工作簿-工作表-行-單元格 90 * 91 */ 92 //工作簿 93 XSSFWorkbook workbook = new XSSFWorkbook(); 94 //工作表 95 XSSFSheet sheet = workbook.createSheet("hello world"); 96 //行--index從0開始 97 XSSFRow row = sheet.createRow(2); 98 //創建單元格--index從0開始 99 XSSFCell cell = row.createCell(2); 100 cell.setCellValue("hello world"); 101 //輸出到硬碟 102 FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xlsx"); 103 //吧excel輸入到具體的地址 104 workbook.write(fileOutputStream); 105 106 //關閉 107 workbook.close(); 108 fileOutputStream.close(); 109 110 } 111 112 /** 113 * 讀取07版本excel 114 * @throws Exception 115 */ 116 @Test 117 public void testRead07Excel() throws Exception { 118 /** 119 * 工作簿-工作表-行-單元格 120 * 121 */ 122 FileInputStream fileInputStream = new FileInputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xlsx"); 123 //讀取工作簿 124 XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream); 125 //讀取第一個工作表 126 XSSFSheet sheet = workbook.getSheetAt(0); 127 //讀取第三行--index從0開始 128 XSSFRow row = sheet.getRow(2); 129 //讀取單元格--index從0開始 130 XSSFCell cell = row.getCell(2); 131 System.out.println(cell.getStringCellValue()); 132 133 //關閉 134 workbook.close(); 135 fileInputStream.close(); 136 137 } 138 139 /** 140 * 讀取07版本excel 141 * @throws Exception 142 */ 143 @Test 144 public void testRead03And07Excel() throws Exception { 145 /** 146 * 工作簿-工作表-行-單元格 147 * 148 */ 149 String fileName = "D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xls"; 150 if(fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){//判斷是否是excel 151 boolean is03Excel = fileName.matches("^.+\\.(?i)(xls)$"); 152 FileInputStream fileInputStream = new FileInputStream(fileName); 153 154 //讀取工作簿 155 Workbook workbook = is03Excel?new HSSFWorkbook(fileInputStream):new XSSFWorkbook(fileInputStream); 156 //讀取第一個工作表 157 Sheet sheet = workbook.getSheetAt(0); 158 //讀取第三行--index從0開始 159 Row row = sheet.getRow(2); 160 //讀取單元格--index從0開始 161 Cell cell = row.getCell(2); 162 System.out.println(cell.getStringCellValue()); 163 164 //關閉 165 workbook.close(); 166 fileInputStream.close(); 167 } 168 } 169 170 /** 171 * 創建合併單元格 172 * @throws Exception 173 */ 174 @Test 175 public void testExcelStyle() throws Exception { 176 /** 177 * 工作簿-工作表-行-單元格 178 * 179 */ 180 //工作簿 181 HSSFWorkbook workbook = new HSSFWorkbook(); 182 183 //1.1創建合併單元格對象合併第三行第三列到第五列 184 CellRangeAddress cellRangeAddress = new CellRangeAddress(2,2,2,4);//firstRow, lastRow, firstCol, lastCol 185 //1.2創建單元格樣式 186 HSSFCellStyle style = workbook.createCellStyle(); 187 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 188 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 189 //1.3設置字體 190 HSSFFont font = workbook.createFont(); 191 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 192 font.setFontHeightInPoints((short)16); 193 //載入字體 194 style.setFont(font); 195 //單元格背景 196 //style.setFillPattern(HSSFCellStyle.DIAMONDS);//填充模式 197 //style.setFillBackgroundColor(HSSFColor.YELLOW.index);//背景色 198 199 //2、工作表 200 HSSFSheet sheet = workbook.createSheet("hello world"); 201 202 //2.1載入合併單單元格對象 203 sheet.addMergedRegion(cellRangeAddress); 204 205 206 //3.行--index從0開始 207 HSSFRow row = sheet.createRow(2); 208 //4.創建單元格--index從0開始 209 HSSFCell cell = row.createCell(2); 210 cell.setCellStyle(style); 211 cell.setCellValue("hello world"); 212 //輸出到硬碟 213 FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test2.xls"); 214 //吧excel輸入到具體的地址 215 workbook.write(fileOutputStream); 216 217 //關閉 218 workbook.close(); 219 fileOutputStream.close(); 220 221 } 222 }