POI 操作EXCEL(一)解析EXCEL 自動識別xls和xlsx
這裡引用的jar包,一些jar是內部引用文科,有個是業務需求加入的的,引入的時候你們可以選擇性引入jar,在此不做剔除,我會在程式碼中附上引用。 對於大資料量的話excel來進行上傳操作視乎不如cvs效率高 初步測試excel八列簡單資料,在虛擬機器1.5G記憶體分配的情況下可以達到六萬條資料,再大的記憶體分配沒有嘗試 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.POIXMLDocument; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class Excel { public static void main(String[] args) throws IOException { log("開始時間:" + new SimpleDateFormat("HH:mm:ss:SSS").format(new Date())); String filePath = "C:\\Users\\Administrator\\Desktop\\IBC\\貨幣流.xlsx"; //驗證 boolean boo = validateExcel(filePath); if (boo) { List<Map> list = readExcel2007(filePath); }else { List<Map> list = readExcelXls(filePath); } log("結束時間:" + new SimpleDateFormat("HH:mm:ss:SSS").format(new Date())); } * 驗證EXCEL檔案是否合法 */ public static boolean validateExcel(String filePath) { /** 判斷檔名是否為空或者檔案是否存在 */ if (!fileExist(filePath)) { err("檔案不存在"); return false; } /** 檢查檔案是否是Excel格式的檔案 */ if (!isExcel(filePath)) { err("檔名不是excel格式"); return false; } return isExcel2007(filePath); } /** * 檢查檔案是否存在 */ public static boolean fileExist(String filePath){ if(filePath == null || filePath.trim().equals("")) return false; File file = new File(filePath); if (file == null || !file.exists()){ return false; } return true; } /** * 依據字尾名判斷讀取的是否為Excel檔案 * * @param filePath * @return */ public static boolean isExcel(String filePath) { if (filePath.matches("^.+\\.(?i)(xls)$") || filePath.matches("^.+\\.(?i)(xlsx)$")) { return true; } return false; } /*** * 讀取2007-2013格式 * @param filePath 檔案路徑 * @return * @throws IOException * @DataTime 2016年10月13日18:01:02 */ @SuppressWarnings("rawtypes") public static List<Map> readExcel2007(String filePath) throws IOException{ List<Map> valueList=new ArrayList<Map>(); FileInputStream fis =null; try { fis =new FileInputStream(filePath); XSSFWorkbook xwb = new XSSFWorkbook(fis); // 構造 XSSFWorkbook 物件,strPath 傳入檔案路徑 XSSFSheet sheet = xwb.getSheetAt(0); // 讀取第一章表格內容 // 定義 row、cell XSSFRow row; // 迴圈輸出表格中的第一行內容 表頭 Map<Integer, String> keys=new HashMap<Integer, String>(); row = sheet.getRow(0); if(row !=null){ //System.out.println("j = row.getFirstCellNum()::"+row.getFirstCellNum()); //System.out.println("row.getPhysicalNumberOfCells()::"+row.getPhysicalNumberOfCells()); for (int j = row.getFirstCellNum(); j <=row.getPhysicalNumberOfCells(); j++) { // 通過 row.getCell(j).toString() 獲取單元格內容, if(row.getCell(j)!=null){ if(!row.getCell(j).toString().isEmpty()){ keys.put(j, row.getCell(j).toString()); } }else{ keys.put(j, "K-R1C"+j+"E"); } } } // 迴圈輸出表格中的從第二行開始內容 for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); if (row != null) { boolean isValidRow = false; Map<String, Object> val = new HashMap<String, Object>(); for (int j = row.getFirstCellNum(); j <= row.getPhysicalNumberOfCells(); j++) { XSSFCell cell = row.getCell(j); if (cell != null) { String cellValue = null; if(cell.getCellType()==XSSFCell.CELL_TYPE_NUMERIC){ if(DateUtil.isCellDateFormatted(cell)){ cellValue = new DataFormatter().formatRawCellContents(cell.getNumericCellValue(), 0, "yyyy-MM-dd HH:mm:ss"); } else{ cellValue = String.valueOf(cell.getNumericCellValue()); } } else{ cellValue = cell.toString(); } if(cellValue!=null&&cellValue.trim().length()<=0){ cellValue=null; } val.put(keys.get(j), cellValue); if(!isValidRow && cellValue!= null && cellValue.trim().length()>0){ isValidRow = true; } } } // 第I行所有的列資料讀取完畢,放入valuelist if (isValidRow) { valueList.add(val); } } } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally { fis.close(); } return valueList; } /**讀取老版本格式*/ public static List<Map> readExcelXls(String filePath){ return null; }; /** * 依據內容判斷是否為excel2007及以上 */ public static boolean isExcel2007(String filePath) { try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream(filePath)); if (POIXMLDocument.hasOOXMLHeader(bis)) { System.out.println("Excel版本為excel2007及以上"); return true; } } catch (IOException e) { e.printStackTrace(); return false; } return false; } private static void log(String value){ System.out.println(value); } private static void err(String value){ System.err.println(value); } }
相關推薦
POI 操作EXCEL(一)解析EXCEL 自動識別xls和xlsx
這裡引用的jar包,一些jar是內部引用文科,有個是業務需求加入的的,引入的時候你們可以選擇性引入jar,在此不做剔除,我會在程式碼中附上引用。 對於大資料量的話excel來進行上傳操作視乎不如cvs效率高 初步測試excel八列簡單資料,在虛擬機器1.5G記憶體分配的情況
Python利用openpyxl來操作Excel(一)
最近一直在做專案裡的自動化的工作,為了是從繁瑣重複的勞動中掙脫出來,把精力用在資料分析上。自動化方面python是在好不過了,不過既然要提交報表, 就不免要美觀什麼的。pandas雖然很強大,但是無法對Excel完全操作,現學vba有點來不及。於是就找到這個openpyxl包,用python
Java POI 匯出Excel(一)
序言上篇序言已經說明了我為什麼要寫這個教程了,如果想知道請戳這個連結:序言。那麼廢話就不多說開始吧。POI Maven 依賴 <dependencies> <dependency> <groupId>org.apache.poi&
POI匯出Excel(一)
匯出樣式如下: ======================================================================================== 工具類: package com.util; import java.io
JAVA POI 應用系列(1)--生成Excel
需要 void system 版本 stream 邊框 模式 格式 字體 POI簡介(官網:http://poi.apache.org/) Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office
C#導入導出Excel(一)
bject gpo tel collect lean type close 表格 excel導入 C#操作Excel導入導出方法一,根據項目要求,對Excel操作有多重方法,有的是類庫自己編程設計格式,有的是JS根據表格的格式樣式直接導出。 現在介紹的是直接下載型: 根據
一步一步地教你實現OLE讀取EXCEL(一)
#include "stdafx.h" #include "CExcelFileRead.h" COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERRO
用Python讀取Word文件並寫入Excel(一)
工作中經常要處理大量的word文件,大部分內容都很簡單,比如說做一個彙總表,從發來的word文件裡提取名字、聯絡方式、地址等資訊,提取完之後還需要用Excel做彙總,對於十幾份的文件尚好,但對於成百份,
C# 讀寫文字檔案並匯入Excel(一)
一、本程式的主要思想 利用ReadAllText和WriteAllText方法讀寫文字檔案,並且把他們以逗號分隔,形成能被Excel直接匯入並且分列的資料。 二、程式的執行結果 執行前,必須在相應目錄建立文字檔案,方便程式的讀寫。程式執行前的資料如圖: 程
C#中操作Excel(4)—— 向Excel中插入兩種圖表以及設定圖表格式
一、引言 本文主要討論下向Excel中插入圖表的兩種方式。在Excel中圖表是有兩種級別的,一種是和sheet同級別的圖表,也就是說整個excel的標籤頁就是一個圖表;還有一種就是我們最常使用的在一個sheet中插入的圖表,我們姑且叫它sheet子圖表。這
30天自制操作系統(一)從計算機結構到匯編程序入門
ios 是什麽 program 信號 解釋 根目錄 自己 保存 音樂 學習這本書不代表我要親自動手把這本書中的代碼敲一遍哦,只是借機來學習一下操作系統。之前有段時間也在看操作系統的知識,怎麽說呢之前的看的書都是偏講理論多一些,對於我這個非科班出身的來說,由於之前的計算機知識
python記錄—入門到實踐—字符串操作篇(一)
span java、 浮點 大寫 數位 tab cnblogs 保留小數 字符串操作 我就跟著書學,總結執行要記錄的,不要覺得簡單就不去試一試,敲一敲代碼。執行力是成為好的程序員的寶劍。如果你是新手在掌握其他的語言情況下比如java、c或者php等等任意一種基本語法,程序都
Android系統啟動流程(一)解析init進程啟動過程
option 寫入 android change failed miss 通知 target sna 前言 作為“Android框架層”這個大系列中的第一個系列,我們首先要了解的是Android系統啟動流程,在這個流程中會涉及到很多重要的知識點,這個系列我們就來一一講解它們
原子操作類(一)原子操作類詳細介紹
expected 文章 span del 也有 pair 上一個 ride 操作類 引言 ??Java從JDK1.5開始提供了java.util.concurrent.atomic包,方便程序員在多線程環境下,無鎖的進行原子操作。原子變量的底層使用了處理器提供的原子指令,但
Python操作MySQL(一) PyMysql篇
pymysql mysqldb python mysql pymsql是Python中操作MySQL的模塊,其使用方法和MySQLdb幾乎相同,但是mysqldb不支持Python3 下載安裝 pip3 install pymysql 使用操作 1. 執行sql #!/usr/bin/env p
python之操作mysql(一)
mod 它的 utf8 連接數 mode char PE class 是個 使用python操作mysql的思路: 1. 連接數據庫:ip,端口號,密碼,賬號,數據庫 2. 建立遊標 3.執行sql語句 4.獲取執行結果 5.關閉遊標,關閉連接 conn = pymysql
python操作json(一)
數字 其他 是不是 print employee ict 語法規則 浮點 3.0 Python 操作jsonJson語法規則:數據在名稱/值對中數據由逗號分隔花括號保存對象方括號保存數組Json字符串本質上是一個字符串,用單引號表示 Json數據的書寫格式名稱--值對,包括
DOM操作總結(一)
UNC 標簽 頁面加載 當前 urn 對象 自己的 var ole (一)innerText 凡是成對的標簽,中間的文本內容,設置的時候,都是用innerText這個屬性方法 (二)在某個元素的事件中,自己的事件中的this就是當前的這個元素對象 var btn=ducou
Python 二級模擬操作題(一)
中國 正方 range 進制數 存儲 字符 light 包含 pri 1.計算下列式子,結果保留小數點後保留3位 代碼: >>> x = pow((3**4 + 5*(6**7))/8, 0.5) >>> print("%.
node總結之檔案操作系列(一)
Node.js 提供一組類似 UNIX(POSIX)標準的檔案操作API,我們來看下Node 匯入檔案系統模組(fs)語法,如下: var fs = require("fs") Node.js 檔案系統(fs 模組)模組中的方法均有非同步和同步版本,例如讀取檔案內容的函式有非同步的 fs