1. 程式人生 > >poi匯入Excel,相容03/07版本

poi匯入Excel,相容03/07版本

由於系統需要提供給使用者匯入Excel檔案資料的功能,但Excel檔案有97-2003和2007+兩種格式,且要求給使用者有較大的靈活性。匯入Excel檔案的處理無非就是讀取Excel檔案的內容,然後根據一定的業務規則進行校驗,校驗正確後處理寫入系統。對Excel檔案的讀取可通過JXL或POI兩個Jar來完成,決定使用POI來開發,但POI對兩種格式的處理又有所不同,下面案例介紹:
pom.xml
<dependency>
		  <groupId>org.apache.poi</groupId>
		  <artifactId>poi-ooxml</artifactId>
		  <version>3.13</version>
		</dependency>
		<dependency>
		  <groupId>org.apache.poi</groupId>
		  <artifactId>poi-ooxml-schemas</artifactId>
		  <version>3.13</version>
		</dependency>
		<dependency>
		  <groupId>org.apache.xmlbeans</groupId>
		  <artifactId>xmlbeans</artifactId>
		  <version>2.6.0</version> 
		</dependency>
lib下需要的jar


1.匯入Excel,先獲取檔案的路徑,我這是使用的公司的外掛獲取的檔案路徑,在做的過程中可以直接使用Struts2的file 、fileFileName來獲取檔案路徑(案例也就這點區別)
public void uploadExcel()  {
		//附件
		String savePath ="";
		//檔案路徑獲取--使用的公司的檔案上傳外掛,先將檔案儲存資料庫,再從附件表中查詢出上傳的檔案獲取相應的路徑
		List<Attachment> attachmentsByAttachIds = AttachmentHelper.getAttachmentsByAttachIds(attachIds);
		for (int i = 0; i < attachmentsByAttachIds.size(); i++) {
			Attachment attachment = attachmentsByAttachIds.get(0);
			savePath = attachment.getSavePath();
		}
		analizeExcel(savePath);
		GboatAppContext.output(JsonResult.createSuccess("成功!"));
	}
2.根據獲取的檔案路徑,判斷檔案是.xls還是.xlsx結尾的檔案
public void analizeExcel(String savePath) {
		InputStream is = null;
		List<ItemSort> itemSortList = null;
		try {

			version = (savePath.endsWith(".xls") ? version2003 : version2007);
			String savepathRoot = ConfigUtil.getSavepathRoot();
			String webRoot = savepathRoot + savePath;
			is = new FileInputStream(webRoot);
			if (version == 2003) {// 2003
				POIFSFileSystem fs = new POIFSFileSystem(is);
				HSSFWorkbook wb = new HSSFWorkbook(fs);
				HSSFSheet sheet = wb.getSheetAt(0);
				itemSortList = read2003(sheet);
			} else if (version == 2007) {// 2007
				XSSFWorkbook xwb = new XSSFWorkbook(is);
				XSSFSheet sheet = xwb.getSheetAt(0);
				itemSortList = read2007(sheet);
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	} 
3.匯入03
/**
	 * 匯入03版
	 * TODO
	 * @param sheet
	 * @return
	 */
	 public List<ItemSort> read2003(HSSFSheet sheet) {  
	        List<ItemSort> userList = new ArrayList<ItemSort>();  
	        int rowNum = sheet.getPhysicalNumberOfRows();  
	        ItemSort ui = null;  
	        for (int i = 1; i < rowNum; i++) { 
	        	HSSFRow row = sheet.getRow(i);  
	        	HSSFCell c = row.getCell(0);
	            ui = new ItemSort(); 
	            if (c != null) { 
	            	//迴圈獲取的excel表格,下面是根據自己的需求業務操作
	                c = row.getCell(0);  
	                if (c != null) {
	                	String itemCode=row.getCell(0).getStringCellValue();
	                    ui.setItemCode(itemCode);
	                    if(StringUtils.isNotBlank(itemCode)) {
	                    	if(itemCode.length()<3) {
	                    		ui.setItemFcode("");
	                    	}else {
	                    		String itemFCode = itemCode.substring(0,itemCode.length()- 2);
	                    		ui.setItemFcode(itemFCode);
	                    	}
	                    }else {
	                    	ui.setItemFcode("");
	                    }
	                } else {  
	                    ui.setItemCode("");  
	                }
	                
	                c = row.getCell(1);  
	                if (c != null) {  
	                    ui.setItemName(row.getCell(1).getStringCellValue());
	                } else {  
	                    ui.setItemName("");  
	                }  
	                
	                c = row.getCell(2);  
	                if (c != null) {  
	                    ui.setItemExplain(row.getCell(2).getStringCellValue());
	                } else {  
	                    ui.setItemExplain("");  
	                }
	                ui.setCatalogueManageId(catalogueId);
	                ui.setCreateDate(new Date());
	                itemSortBusiness.save(ui);
	                userList.add(ui);  
	            }  
	  
	        }  
	        return userList;  
	    }


4.匯入07
	 /**
		 * 匯入07版
		 * TODO
		 * @param sheet
		 * @return
		 */
	 public List<ItemSort> read2007(XSSFSheet  sheet) {  
	        List<ItemSort> userList = new ArrayList<ItemSort>();  
	  
	        int rowNum = sheet.getPhysicalNumberOfRows();  
	        ItemSort ui = null;  
	        for (int i = 1; i < rowNum; i++) { 
	        	XSSFRow row = sheet.getRow(i);  
	        	XSSFCell c = row.getCell(0);
	            ui = new ItemSort();  
	            if (c != null) {  
	                c = row.getCell(0);  
	                if (c != null) {
	                	String itemCode=row.getCell(0).getStringCellValue();
	                    ui.setItemCode(itemCode);
	                    if(StringUtils.isNotBlank(itemCode)) {
	                    	if(itemCode.length()<3) {
	                    		ui.setItemFcode("");
	                    	}else {
	                    		String itemFCode = itemCode.substring(0,itemCode.length()- 2);
	                    		ui.setItemFcode(itemFCode);
	                    	}
	                    }else {
	                    	ui.setItemFcode("");
	                    }
	                } else {  
	                    ui.setItemCode("");  
	                }
	                
	                c = row.getCell(1);  
	                if (c != null) {  
	                    ui.setItemName(row.getCell(1).getStringCellValue());
	                } else {  
	                    ui.setItemName("");  
	                }  
//	  
//	  
	                c = row.getCell(2);  
	                if (c != null) {  
	                    ui.setItemExplain(row.getCell(2).getStringCellValue());
	                } else {  
	                    ui.setItemExplain("");  
	                }
	                ui.setCatalogueManageId(catalogueId);
	                itemSortBusiness.save(ui);
	                userList.add(ui);  
	            }  
	  
	        }  
	        return userList;  
	    }

總結:03與07使用的jar不一樣,在操作的過程中呼叫相應的jar包的資料
03版使用的是:
HSSFWorkbook、HSSFSheet、HSSFRow、HSSFCell
07版本使用的是:
XSSFWorkbook、XSSFSheet、XSSFRow、XSSFCell


相關推薦

poi匯入Excel相容03/07版本

由於系統需要提供給使用者匯入Excel檔案資料的功能,但Excel檔案有97-2003和2007+兩種格式,且要求給使用者有較大的靈活性。匯入Excel檔案的處理無非就是讀取Excel檔案的內容,然後根據一定的業務規則進行校驗,校驗正確後處理寫入系統。對Excel檔案的讀取可通過JXL或POI兩個Jar來完

poi匯入excel 根據檔名區分07(.xlsx)和03 (.xls)兩種情況進行解析

@RequestMapping(value = "/importMapping", method = RequestMethod.POST) @ResponseBody public void importPos( @RequestParam(value =

poi匯入excel支援xls和xlsx格式

public static void checkFile(MultipartFile file) throws IOException{ //判斷檔案是否存在 if(null == file){ throw new AudaqueException("檔案不存在!");

java使用POI匯入Excel並判斷合併單元格處停止迴圈

public class ExcelCell { public static boolean isMergedRegion(HSSFSheet sheet,int row ,int colu

java poi 匯入excel時 讀取單元格內容的方法 其中包含excel中有函式的讀法

public static String getExcelCellValue(Cell cell) { String ret = ""; try { if (cell == null) { ret = ""; } else if (cell.get

POI匯入Excel檔案(包含.xsl和.xslx檔案相容問題)

匯入檔案這裡,分為了幾個部分:        第一步是讀取檔案,若未讀取到檔案,直接返回讀取失敗資訊;        第二步是讀取到檔案後,進行校驗,若不是excel檔案,返回檔案格式錯誤,讀取失敗資訊;        第三步是讀取sheet中資訊並檢驗,若有錯誤資訊則儲存

用Java POI操作Excel讀取資料匯入DB2資料庫

Java操作Excel現在基本有兩種方法,就是使用JXL或POI,這兩者各有利弊,互有長短。下載地址:POI  http://jakarta.apache.org/poi/index.html                    JXL  http://www.andykh

解決POI匯入Excel數字精確到小數後一位的問題

今天在做匯入Excel的功能,遇到一個操蛋的問題,那就是如果excel某列為數字,例如123, POI 讀取會變成 123.0  如果遇到一些數字密碼或者手機號之類的需求,那可怎麼辦? 網上搜了一些辦法,使用後還是或多或少有點問題,於是想了一個不是方法的方法,如下程式碼片

java匯入與匯出excel相容excel2003以及excel2007

java解析Excel(相容2003及2007):解析2003及以下使用HSSFWorkbook類,解析2007及以上使用XSSFWorkbook,如果解析類與excel版本不對應,丟擲相應的異常,例如HSSFWorkbook解析2007:org.apache.poi.po

解決POI匯入EXCEL相容問題

    公司專案中需要用到excel匯入,在權衡使用jxl還是POI後,決定使用版本相容性更好的POI。下面介紹一下使用poi遇到的問題:    一開始寫了一個工具類關鍵程式碼如下:        HSSFWorkbook workbook = new HSSFWorkboo

Java-poi匯入excel合併單元格

要匯入的excel示例 一、Action @Action("/import-excel") public void toimport() { String root = ServletActionContext.getSer

java實現簡單的poi匯入excel

示例程式碼 public void poiTest(){ File file = new File("xxx\\test.xlsx") ; InputStream input = new FileInputStream(file) ; String fileName =

關於POI匯入Excel表時報:java.lang.IllegalStateException: Cannot get a text value from a numeric cell

1. 問題描述:    POI技術來實現Excel表格資料匯入到系統中的時候 ,單元格中的資料型別不是String型別的時候,執行row.getCell(0).getStringCellValue()然後再進行實體屬性的set方法時,會報:Cannot get a text

JS匯出Excel相容IE且保留樣式

var tableHtml='<html><head><meta charset="UTF-8"></head><body>'; tableHtml += lHtml; tableHtml += '

友好解決POI匯入Excel檔案行是不是為空

   繼 解決POI讀取Excel如何判斷行是不是為空 後發現了一個問題。這個是一個銀行的需求,有20萬個客戶的資料要匯入系統,但有的資料是有問題的(不能正常匯入),但也有能正常匯入的。現在的問題是怎麼知道那些資料匯入了,那些沒有匯入呢?    全部能正常匯入: 全部失敗: 下面來看一下

java poi匯入Excel通用工具類

問題引入和分析 提示:如果不想看羅嗦的文章,可以直接到最後點選原始碼下載執行即可 最近在做一個匯入Excel的功能,在做之前在百度上面查詢“java通用匯入Excel工具類”,沒有查到,大多數都是java通用匯出Excel。後來仔細想想,匯出可

POI匯入Excel含.xls和.xlsx

之前用的jxl,但是遇到07版以上的.xlsx字尾的檔案,目前jxl我無法解決. 就用POI做了個簡單的匯入Excel表,含.xls和.xlsx字尾的匯入. POI中這兩種字尾的檔案,是使用2個物件來操作的. 先寫思路,後附上程式碼. POI跟JXL有所不一樣. POI

POI操作EXCEL追加或覆蓋資料輸入輸出流注意事項jar包的選擇

首先有兩種資料格式,如果只是為用表格,那麼用xls格式就夠用了。但如果你還用得到XML的東西,那麼需要用xlsx這個格式。 實現程式碼很簡單。 2017.9.22補充: 1.一定要在XSSFWorkbook用輸入流當成建構函式引數建立新物件後,再使用輸入流。如果直接先把輸入

java運用poi匯入excel並存入資料庫(內含自己用的選擇路徑方法)

/*  * To change this license header, choose License Headers in Project Properties.  * To change this template file, choose Tools | Templa

【C#MVC】使用ajaxFileUpload匯入Excel並顯示在Grid中

學習瞭如何使用ajaxFileUpload(無重新整理上傳)匯入Excel檔案,並在頁面中顯示出來。C#,asp和MVC操作形似,這裡重點說MVC,asp只貼出來程式碼。 準備:在頁面引入js檔案。 Step1:(ajaxFileUpload是一個開