中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

上什么網(wǎng)站做會計教育成都網(wǎng)站seo公司

上什么網(wǎng)站做會計教育,成都網(wǎng)站seo公司,貴陽網(wǎng)站建設(shè)費用,外貿(mào)企業(yè)網(wǎng)站制作1.使用POI寫入 當(dāng)我們想在Excel文件中寫入100w條數(shù)據(jù)時,使用XSSFWorkbook進(jìn)行寫入時會發(fā)現(xiàn),只有將100w條數(shù)據(jù)全部加載到內(nèi)存后才會用write()方法統(tǒng)一寫入,效率很低,所以我們引入了SXXFWorkbook進(jìn)行超大Excel文件讀寫。 通過設(shè)置 …

1.使用POI寫入
當(dāng)我們想在Excel文件中寫入100w條數(shù)據(jù)時,使用XSSFWorkbook進(jìn)行寫入時會發(fā)現(xiàn),只有將100w條數(shù)據(jù)全部加載到內(nèi)存后才會用write()方法統(tǒng)一寫入,效率很低,所以我們引入了SXXFWorkbook進(jìn)行超大Excel文件讀寫。

通過設(shè)置 SXXFWorkbook 的構(gòu)造參數(shù),可以設(shè)置每次在內(nèi)存中保持的行數(shù),當(dāng)達(dá)到這個值的時候,那么會把這些數(shù)據(jù)flush 到磁盤上,這樣就不會出現(xiàn)內(nèi)存不夠的情況。

package com.ztt.Demo02;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.UUID;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;public class demo07 {public static void main(String[] args) {try (SXSSFWorkbook workbook = new SXSSFWorkbook(100);FileOutputStream fos = new FileOutputStream("D:\\test\\tt\\temp.xlsx")){Sheet sheet1 = workbook.createSheet();for (int i = 0; i <= 1000000; i++) {Row row = sheet1.createRow(i);Cell cell0 = row.createCell(0);cell0.setCellValue(UUID.randomUUID().toString());Cell cell1 = row.createCell(1);cell1.setCellValue( new Date());}workbook.write(fos );}catch (IOException e) {e.printStackTrace();}}
}

2.使用EasyExcel寫入

? ? ? ? 使用EasyExcel,我們首先要導(dǎo)入相關(guān)jar包

準(zhǔn)備一個普通的Order類:

public class Order {private String orderId;private Double payment;public Order() {this.orderId=LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+UUID.randomUUID().toString().substring(0,5);this.payment=Math.random()*1000;}public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public Double getPayment() {return payment;}public void setPayment(Double payment) {this.payment = payment;}@Overridepublic String toString() {return "Order [orderId=" + orderId + ", payment=" + payment + "]";}
}

??我們發(fā)現(xiàn),Order類中的成員變量名就是我們生成的Excel文件中的列頭。那么如果我們想自定義列頭時,我們可以用:@ExcelProperty("列頭名")?

然后我們來通過EasyExcel來將100w條數(shù)據(jù)寫入excel文件:

package com.ztt.demo01;import java.util.ArrayList;
import java.util.List;
import java.util.Map;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;public class Test1 {public static void main(String[] args) {//將100w條訂單數(shù)據(jù)寫入Excel文件
//		EasyExcel.write("D:\\test\\poi\\alibaba\\0421-a.xlsx",Order.class)
//		.sheet("訂單數(shù)據(jù)")
//		.doWrite(createOrderData());//讀取Excel文件中的數(shù)據(jù)//參數(shù)1:文件的的路徑//參數(shù)2:文件中每條數(shù)據(jù)對應(yīng)的Class類型//參數(shù)3:如何解析EasyExcel.read("D:\\test\\poi\\alibaba\\0421-a.xlsx",Order.class,new AnalysisEventListener<Order>() {//讀取列頭@Overridepublic void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {System.out.println("Excel文件的列頭:"+headMap);}//處理每行數(shù)據(jù)@Overridepublic void invoke(Order order, AnalysisContext arg1) {System.out.println("讀取到一條訂單數(shù)據(jù):"+order);}@Overridepublic void doAfterAllAnalysed(AnalysisContext arg0) {System.out.println("讀取完畢");}}).sheet().doRead();}//生成100w條訂單數(shù)據(jù)private static List<Order> createOrderData() {List<Order> orderList=new ArrayList<Order>();for(int i=0;i<1000;i++) {orderList.add(new Order());}return orderList;}
}

當(dāng)我們想加入一列日期數(shù)據(jù)時:

public class Order {@ExcelProperty("訂單編號")private String orderId;@ExcelProperty("支付金額")private Double payment;@ExcelProperty("創(chuàng)建時間")private LocalDateTime  creatTime;public Order() {this.orderId=LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))+UUID.randomUUID().toString().substring(0,5);this.payment=Math.random()*1000;this.creatTime=LocalDateTime.now();}public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public Double getPayment() {return payment;}public void setPayment(Double payment) {this.payment = payment;}public LocalDateTime getCreatTime() {return creatTime;}public void setCreatTime(LocalDateTime creatTime) {this.creatTime = creatTime;}@Overridepublic String toString() {return "Order [orderId=" + orderId + ", payment=" + payment+ ", creatTime=" + creatTime + "]";}
}

運行結(jié)果:?

通過閱讀報錯提示(Can not find 'Converter' support class LocalDateTime.)?,我們大概可以知道,是因為找不到一個支持LocalDateTime類的轉(zhuǎn)換器,所以為了解決這個問題,我們可以自己寫一個比較器類:

package com.ztt.demo01;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;public class LocalDateTimeConverter implements Converter<LocalDateTime>{//Excel文件中的類型@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}//程序中的類型@Overridepublic Class supportJavaTypeKey() {return LocalDateTime.class;}//將LocalDateTime類型的數(shù)據(jù)轉(zhuǎn)換成String類型的數(shù)據(jù)//并封裝至一個Excel文件中的ellData@Overridepublic CellData convertToExcelData(LocalDateTime value, ExcelContentProperty arg1, GlobalConfiguration arg2)throws Exception {return new CellData<>(value.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss")));}//從ce1lData中獲取一個String類型的致?lián)?/并轉(zhuǎn)換成LocalDateTime類型@Overridepublic LocalDateTime convertToJavaData(CellData cellData ,ExcelContentProperty arg1, GlobalConfiguration arg2)throws Exception {return LocalDateTime.parse(cellData.getStringValue(),DateTimeFormatter.ofPattern( "yyyy年MM月dd日 HH:mm:ss"));}}

當(dāng)我們寫好這個比較器后,就需要給成員變量creatTime顯示的設(shè)置好比較器:

package com.ztt.demo01;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.NumberFormat;public class Order {@ExcelProperty("訂單編號")private String orderId;//訂單編號@ExcelProperty("支付金額")@NumberFormat("¥#,###")private Double payment;//支付金額//設(shè)置LocalDateTime對應(yīng)轉(zhuǎn)換器@ExcelProperty(value="創(chuàng)建時間",converter=LocalDateTimeConverter.class)private LocalDateTime createionTime;//創(chuàng)建日期public Order() {this.orderId=LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHss"))+UUID.randomUUID().toString().substring(0,5);this.payment=Math.random()*10000;this.createionTime=LocalDateTime.now();}public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}public Double getPayment() {return payment;}public void setPayment(Double payment) {this.payment = payment;}public LocalDateTime getCreateionTime() {return createionTime;}public void setCreateionTime(LocalDateTime createionTime) {this.createionTime = createionTime;}@Overridepublic String toString() {return "Order [orderId=" + orderId + ", payment=" + payment + ", createionTime=" + createionTime + "]";}}

運行結(jié)果:

練習(xí):檢查Excel文件?

1.序號是否連續(xù)

2.檢查性別是否為男或女

3.身份證號

????????3.1 身份證號碼格式(必須為18位)

????????3.2 身份證號碼不能重復(fù)

????????3.3 身份證號碼開頭兩位是否與籍貫符合

????????????????北京 11 天津12 河北 13 山西14 內(nèi)蒙古 15

????????????????陜西61 甘肅62 青海 63

4.學(xué)歷只能填寫:大專、本科、碩士、其它

5.體重在40-120之間

package com.ztt.Demo02;import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class demo05 {public static void main(String[] args) {List<String> errorMsgList = validateDataExcel("D:\\test\\tt\\demo-data.xlsx");if (errorMsgList.size() == 0) {System.out.println("文件檢查無誤!");} else {// 顯示所有錯誤信息for (String err : errorMsgList) {System.out.println(err);}}}public static List<String> validateDataExcel(String excelDataFilePath) {// 1.序號是否連續(xù)// 2.檢查性別是否為男或女// 3.身份證號// 3.1 身份證號碼格式(必須為18位)// 3.2 身份證號碼不能重復(fù)// 3.3 身份證號碼開頭兩位是否與籍貫符合// 北京 11 天津12 河北 13 山西14 內(nèi)蒙古 15// 陜西61 甘肅62 青海 63// 4.學(xué)歷只能填寫:大專、本科、碩士、其它// 5.體重在40-120之間//創(chuàng)建用于保存錯誤提示信息的集合ArrayList<String> errorList=new ArrayList<String>();//創(chuàng)建用于檢查身份證號碼是否重復(fù)的set集合HashSet<String> idCardNoSet = new HashSet<String>();//創(chuàng)建用于檢查身份證號碼前2位與籍貫省份之間的映射關(guān)系的Map集合//北京11天津12河北13山西14內(nèi)蒙古15//陜西61甘肅62青海63HashMap<String,String> provinceMap = new HashMap<String,String>() {//構(gòu)造代碼塊{put("11","北京");put("12","天津");put( "13","河北");put("14","山西");put("15","內(nèi)蒙古");put("61","陜西");put("62","甘肅");put("63","青海");}};//創(chuàng)建一個用于檢查學(xué)歷的List集合List<String> eduList = Arrays.asList("大專", "本科" , "碩士","其它");try(Workbook workbook=new XSSFWorkbook(excelDataFilePath)){Sheet sheet=workbook.getSheetAt(0);for(int i=1;i<sheet.getLastRowNum();i++) {Row row =sheet.getRow(i);//1.序號是否連續(xù)Cell cellId=row.getCell(0);int rowNum=row.getRowNum();int id=(int)cellId.getNumericCellValue();if(rowNum!=id) {errorList.add(String.format("%d行的編號不連續(xù)!", rowNum));}//2.檢查性別是否為男或女String gender=row.getCell(2).getStringCellValue();if(!gender.equals("男") && !gender.equals("女")) {errorList.add(String.format("%d行的性別有誤!", rowNum));}//3.身份證號String idCardNo = row.getCell(3).getStringCellValue();//3.1身份證號碼格式(必須為18位)if(idCardNo.length() != 18) {errorList.add(String.format("%d行的身份證號碼長度有誤! ",rowNum));}//3.2身份證號碼不能重復(fù)if(!idCardNoSet.add(idCardNo)) {errorList.add(String.format("%d行的身份證號碼重復(fù)存在! ",rowNum));}//3.3身份證號碼開頭兩位是否與籍貫符合//北京11天津12河北13山西14內(nèi)蒙古15//陜西61甘肅62青海63String idCardNoHomeCode = idCardNo.substring(0,2);String homeValue = provinceMap.get(idCardNoHomeCode); //根據(jù)身份證號碼前兩位獲取正確的籍貫省份名稱String home = row.getCell(6).getStringCellValue();//獲取表格中當(dāng)前行的籍貫信息if(!homeValue.equals( home)) { errorList.add(String.format("%d行的身份證籍貫信息不一致! ",rowNum));}//4.學(xué)歷只能填寫:大專、本科、碩士、其它String eduValue=row.getCell(7).getStringCellValue();if(!eduList.contains(eduValue)) {errorList.add(String.format("%d行的學(xué)歷信息不符合規(guī)范! ",rowNum));}}} catch (IOException e) {e.printStackTrace();}return errorList;}}

運行結(jié)果:

1行的學(xué)歷信息不符合規(guī)范! 
3行的身份證籍貫信息不一致! 
4行的編號不連續(xù)!
5行的學(xué)歷信息不符合規(guī)范! 
7行的身份證號碼長度有誤! 
9行的身份證號碼長度有誤! 
9行的學(xué)歷信息不符合規(guī)范! 
10行的身份證籍貫信息不一致! 
11行的身份證號碼長度有誤! 
12行的編號不連續(xù)!
13行的身份證號碼長度有誤! 
14行的學(xué)歷信息不符合規(guī)范! 
15行的學(xué)歷信息不符合規(guī)范! 
16行的性別有誤!
18行的編號不連續(xù)!
22行的身份證籍貫信息不一致! 
24行的身份證號碼重復(fù)存在! 
25行的性別有誤!
33行的身份證號碼重復(fù)存在! 
36行的身份證號碼長度有誤! 
39行的身份證籍貫信息不一致! 
41行的身份證籍貫信息不一致! 
43行的身份證籍貫信息不一致! 
44行的身份證籍貫信息不一致! 
46行的身份證籍貫信息不一致! 


?

http://www.risenshineclean.com/news/11730.html

相關(guān)文章:

  • 新疆建設(shè)云網(wǎng)站投訴電話網(wǎng)絡(luò)營銷推廣軟件
  • 鄭州網(wǎng)站建設(shè)推銷鏈接制作軟件
  • 哪個網(wǎng)站做螺絲生意好為什么不建議去外包公司上班
  • 一起做業(yè)英語網(wǎng)站站長統(tǒng)計app軟件
  • 裝修網(wǎng)站建設(shè)策劃方案怎么做好推廣和營銷
  • 企業(yè)網(wǎng)站推廣效果從哪些方面進(jìn)行分析網(wǎng)絡(luò)鏈接推廣
  • 鄭州做網(wǎng)站網(wǎng)站建設(shè)費用企業(yè)營銷型網(wǎng)站建設(shè)
  • 網(wǎng)站開發(fā)能用react嗎恩施seo整站優(yōu)化哪家好
  • 張家界網(wǎng)站建設(shè)公司手游推廣個人合作平臺
  • 網(wǎng)站制作超鏈接怎么做淘寶代運營靠譜嗎
  • 做外國購物網(wǎng)站需要交稅嗎百度首頁登錄入口
  • wordpress制作表單福州seo推廣外包
  • 學(xué)校網(wǎng)站建設(shè)申請網(wǎng)絡(luò)企業(yè)推廣
  • 酒仙網(wǎng)的網(wǎng)站推廣方式交換友情鏈接的平臺有哪些
  • 網(wǎng)站建設(shè)能用手機制作嗎網(wǎng)站鏈接分析工具
  • 網(wǎng)站域名空間怎么弄啊谷歌網(wǎng)頁版入口在線
  • 作網(wǎng)站網(wǎng)絡(luò)廣告推廣服務(wù)
  • 網(wǎng)站建設(shè)seo優(yōu)化推廣銷售網(wǎng)絡(luò)平臺推廣
  • 個人新聞類網(wǎng)站模板營銷策略包括哪些內(nèi)容
  • 有人看免費的視頻嗎寧波網(wǎng)站seo診斷工具
  • 打開一張圖片后點擊跳轉(zhuǎn)到網(wǎng)站怎么做seo軟件視頻教程
  • asp.netc 動態(tài)網(wǎng)站開發(fā)網(wǎng)推項目
  • 廣州網(wǎng)絡(luò)推廣定制搜索引擎優(yōu)化seo公司
  • 燈飾網(wǎng)站開發(fā)seo哪個軟件好
  • 北京高端網(wǎng)站建設(shè)有限公司太原網(wǎng)站制作優(yōu)化seo
  • 做哪個網(wǎng)站賣一手房比較好培訓(xùn)課程安排
  • 用什么軟件做樓盤微網(wǎng)站廣州新塘網(wǎng)站seo優(yōu)化
  • 網(wǎng)站建設(shè)流程圖滿十八歲可以申請abc認(rèn)證嗎
  • 上市公司網(wǎng)站建設(shè)報價seo排名優(yōu)化
  • 網(wǎng)站建設(shè)圖片競價