java poi excel關於資料碰撞和excel資料追加
阿新 • • 發佈:2018-11-26
package excel; import jxl.Cell; import jxl.CellType; import jxl.Sheet; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableWorkbook; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import java.io.File; import java.io.FileInputStream; importjava.io.FileOutputStream; import java.io.InputStream; import java.util.*; import static java.lang.System.in; /** * excel 資料碰撞 並追加所需要的資料 * Created by zhanghb on 2017/7/7. */ public class ExcelTest { public static void main(String[] args) throws Exception { List<String> dongcai = test1(); Map<String, String> chm = test2(); //Excel進行資料追加 //FileInputStream fs = new FileInputStream("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(證券類).xls"); //獲取 FileInputStream fs = new FileInputStream("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(保險類).xls"); //獲取d://test.xls //FileInputStream fs = new FileInputStream("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(通用類).xls"); //獲取d://test.xls//FileInputStream fs = new FileInputStream("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(銀行類).xls"); //獲取d://test.xls POIFSFileSystem ps = new POIFSFileSystem(fs); //使用POI提供的方法得到excel的資訊 HSSFWorkbook wb = new HSSFWorkbook(ps); HSSFSheet sheet = wb.getSheetAt(0); //獲取到工作表,因為一個excel可能有多個工作表 for (int i = 0; i < dongcai.size(); i++) { String key=dongcai.get(i).trim(); String englishName=chm.get(key).trim(); if(englishName!=null){ System.out.print(dongcai.get(i) + "/" + chm.get(key) + "/" + key + " "); //獲取第一行(excel中的行預設從0開始,所以這就是為什麼,一個excel必須有欄位列頭),即,欄位列頭,便於賦值 HSSFRow row = sheet.getRow(i); row.createCell(1).setCellValue(englishName); //設定第一個(從0開始)單元格的資料 } } FileOutputStream out = new FileOutputStream("F:/專案例項/excel資料碰撞例項/指標/excel/最新/最新的資料(東財保險).xls"); wb.write(out); out.close(); } /** * 讀取東財資料模組 */ public static List<String> test1() { Workbook readwb = null; Cell cell = null; //建立返回物件,把每行中的值作為一個數組,所有行作為一個集合返回 List<String> list = new ArrayList<String>(); try { //構建Workbook物件, 只讀Workbook物件 //直接從本地檔案建立Workbook //File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(證券類).xls"); File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(保險類).xls"); //File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(證券類).xls"); //File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/東財證券(證券類).xls"); InputStream instream = new FileInputStream(file); readwb = Workbook.getWorkbook(instream); //Sheet的下標是從0開始 //獲取第一張Sheet表 Sheet readsheet = readwb.getSheet(0); //獲取Sheet表中所包含的總列數 // int rsColumns = readsheet.getColumns(); //獲取Sheet表中所包含的總行數 int rsRows = readsheet.getRows(); //獲取指定單元格的物件引用 for (int i = 0; i < rsRows; i++) { cell = readsheet.getCell(0, i);//取得第i行,第一列值 //判斷是否存在(單季度.),如果存在則去掉(單季度.)存入list中 if (cell.getContents().trim().contains("單季度.")) { String[] val = cell.getContents().trim().split("單季度."); list.add(val[1].trim()); }else{ list.add(cell.getContents().trim()); } } } catch (Exception e) { e.printStackTrace(); } finally { readwb.close(); } return list; } /** * 讀取CHM資料模組 */ public static Map<String, String> test2() { Workbook readwb = null; Cell key = null; Cell value = null; //建立返回物件,把每行中的值作為一個數組,所有行作為一個集合返回 Map<String, String> map = new HashMap<String, String>(); try { //構建Workbook物件, 只讀Workbook物件 //直接從本地檔案建立Workbook //File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/證券類chm.xls"); File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/保險類chm.xls"); //File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/證券類chm.xls"); //File file = new File("F:/專案例項/excel資料碰撞例項/指標/excel/證券類chm.xls"); InputStream instream = new FileInputStream(file); readwb = Workbook.getWorkbook(instream); //Sheet的下標是從0開始 //獲取第一張Sheet表 Sheet readsheet = readwb.getSheet(0); //獲取Sheet表中所包含的總列數 // int rsColumns = readsheet.getColumns(); //獲取Sheet表中所包含的總行數 int rsRows = readsheet.getRows(); //獲取指定單元格的物件引用 for (int i = 0; i < rsRows; i++) { key = readsheet.getCell(0, i);//取得第i行,第一列值 value = readsheet.getCell(1, i);//取得第i行,第一列值 map.put(value.getContents().trim(), key.getContents().trim()); } } catch (Exception e) { e.printStackTrace(); } finally { readwb.close(); } return map; } }