1. 程式人生 > >web專案實現Excel資料匯入匯出

web專案實現Excel資料匯入匯出

        由於專案要求,需要實現一個數據庫資訊匯出為Excel檔案,並能將Excel檔案中的資訊匯入資料庫的功能,網上找了一下資料,發現大都只涉及到Excel檔案的簡單操作,所以特地在此分享了自己寫的兩個簡單的Web端Excel檔案匯入匯出的例子。

        涉及到的工具類主要有jxl.jar,commons-fileupload-1.2.1.jar,commons-io-1.4.jar,網上有很多這些工具的學習資料,具體可以自己百度,此處不再詳細闡述。

1、Excel檔案的匯出

        首先是Excel檔案的匯入,這點比較簡單,主要是一些響應頭的設定,程式碼如下

public class ExportExcelUtil
{
	public static void exportExcel( HttpServletResponse response) 
	{
        try 
        {
	        OutputStream os = response.getOutputStream();// 取得輸出流  
	        response.reset();// 清空輸出流  
	
	        response.setHeader("Content-disposition", "attachment; filename="+new String("詞性資料".getBytes("GB2312"),"8859_1")+".xls");// 設定輸出檔案頭  
	        response.setContentType("application/msexcel");// 定義輸出型別
	           
	        WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel檔案  
	       
	        WritableSheet ws = wwb.createSheet("Sheet1", 10);        // 建立一個工作表
	
	        //    設定單元格的文字格式
	        WritableFont wf = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLUE);
	        WritableCellFormat wcf = new WritableCellFormat(wf);
	        wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
	        wcf.setAlignment(Alignment.CENTRE);
	        ws.setRowView(0, 500);
	
	        //    填充資料的內容
	        //    填充表頭
	        Label name = new Label(0,0,"姓名");
	        Label sex = new Label(1,0,"性別");
	        //填充資料
	        Label nameValue = new Label(0,1,"tom");
	        Label sexValue = new Label(1,1,"man");
	        ws.addCell(name);
	        ws.addCell(sex);
	        ws.addCell(nameValue);
	        ws.addCell(sexValue);
	        wwb.write();
	        wwb.close();

        } catch (IOException e){
        } catch (RowsExceededException e){
        } catch (WriteException e){}
    }
}

2、Excel檔案的資料匯入

        關於Excel的資料匯入,需要先將Excel檔案上傳到伺服器中,待資料讀取完成後再將Excel檔案刪掉,這裡順帶貼出Servlet層程式碼供大家參考

public class Demo1 extends HttpServlet
{
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
	{
		File file = null;
		response.setContentType("text/html;charset=UTF-8");
		try
		{
			FileItemFactory factory = new DiskFileItemFactory();
			// 檔案上傳核心工具類
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setFileSizeMax(10*1024*1024);	// 單個檔案大小限制
			upload.setSizeMax(50*1024*1024);		// 總檔案大小限制
			upload.setHeaderEncoding("UTF-8");		// 對中文檔案編碼處理
			
			if (ServletFileUpload.isMultipartContent(request)) 
			{
				// 3. 把請求資料轉換為list集合
				List<FileItem> list = upload.parseRequest(request);
				// 遍歷
				for (FileItem item : list)
				{
					// 判斷:普通文字資料
					if (item.isFormField())
					{
						//普通表單項操作
					} 
					// 檔案表單項
					else 
					{
						// a. 獲取檔名稱
						String name = item.getName();
						// b. 得到上傳目錄
						String basePath = getServletContext().getRealPath("/upload");
						// c. 建立要上傳的檔案物件
						file = new File(basePath,name);
						// d. 上傳
						item.write(file);
						item.delete();  // 刪除元件執行時產生的臨時檔案
				}
			}
		}
		List<String> list = ImportExcelUtil.importExcel(file);
		for(String s:list)
		{
			System.out.println(s);
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	}
	

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException
	{
		doGet(request,response);
	}
}
        讀取Excel檔案的工具類
public class ImportExcelUtil
{
	private static List<String> list = new LinkedList<String>();
	public static List<String> importExcel(File file)
	{
		try
		{
			list.clear();
			FileInputStream fs = new FileInputStream(file);
			Workbook wb = Workbook.getWorkbook(fs);
			Sheet sheet = wb.getSheet(0);
			//獲取表的行數
			int row = sheet.getRows();
			//迴圈獲取值
			for(int i = 0;i<row;i++)
			{
				String s = sheet.getCell(0,i).getContents();
				list.add(s);
			}
			//關閉流,否則後面檔案刪除會失敗
			fs.close();
			file.delete();
		} catch (BiffException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}
}

        以上程式碼可供參考,寫得非常簡單,大家可以根據需求進行更改,如有錯誤,歡迎大家批評指正,謝謝。