999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Excel數據匹配研究

2019-09-10 07:22:44李博
現代信息科技 2019年1期

李博

摘? 要:Excel在日常辦公中占據著極其重要的地位,微軟也在不斷的增加新功能,使它的能力越來越強,眾多集成的函數方法讓使用者能輕松操作某個電子表格。如用戶寫一個VLOOKUP公式就能簡單的根據ID精確匹配出相關內容,但這種匹配準則相對簡單[1],本文基于Excel表的匹配問題,提出利用Java編程完成復雜條件匹配,和另一種借助MySQL數據庫查詢的匹配方案,比較兩者之間的執行情況,加以分析,得出借助MySQL數據庫查詢匹配方案優于前者。

關鍵詞:Excel;Java;MySQL;數據匹配

中圖分類號:TP39;TP31 文獻標識碼:A 文章編號:2096-4706(2019)01-0013-03

Excel Data Matching Research

LI Bo

(Southwest Minzu University,Chengdu? 610041,China)

Abstract:Excel occupies an important position in daily office,Microsoft is constantly adding new features,making it more and more powerful,and many integrated function methods make it easy for users to operate a spreadsheet. For example,if the user writes a VLOOKUP formula,the relevant content can be accurately matched according to the ID,but the matching criterion is relatively simple[1]. Based on the matching problem of Excel tables,this paper puts forward a matching scheme using Java programming to complete complex condition matching and another matching scheme using MySQL database query,compares the implementation of the two schemes,and analyses them. It is concluded that the matching scheme using MySQL database query is better than the former.

Keywords:Excel;Java;MySQL;data matching

1? Java解析Excel表

Java解析Excel表常用的框架有兩個,一種是借助日本開源的jxl.jar,一種是借助Apache POI.jar也是開源的,兩者的差距不大。由于JXL現已停更,本文使用Apache POI 3.17版本解析Excel表。針對Excel有兩個版本,可使用HSSFWorkbook讀取2003版本的Excel表,XSSFWorkbook讀取2007版本及以上的Excel表[2]。POI插件是Jakarta公司提供的一個完全用Java語言實現的免費插件,該插件可以把Excel表格指定Sheet表的指定行和列的Cell格的內容讀出,而且可以把數據按照用戶指定的格式寫入到Excel文檔[3]。

部分代碼如下:

public class Main {

public static Statement statement=null;

public static void main(String[] args) throws Exception{

statement = getConnectwithMysql.mainconn (“database”);

//準備匹配文檔TEST.XLSX

File file = new File(“J:\\TEST.XLSX”);

Workbook wb = null;

try {

//讀取file到緩存區,獲取工作簿

wb = new XSSFWorkbook(new FileInput Stream(file));

} catch (IOException e) {

e.printStackTrace();

}

//得到序號為0的工作表

Sheet sheet = wb.getSheetAt(0);

//獲取工作表數據行總行數

int n=sheet.getLastRowNum();

for (int i=1;i<=n;i++) {

//打印提示信息,開始匹配EXCEL表的第i+1行數據

System.out.println(“start to scan “+(i+1)+” row”);

Row row = sheet.getRow(i);

//獲取單行數據匹配關鍵信息

String hetongcode=

getCellContent(row.getCell(1));

….....

//在數據庫中匹配,匹配結果返回在結果集rs中

ResultSet rs = select (daytime,name,money);

//記錄匹配信息

while(rs.next()) {

hetongcode=hetongcode+”-(“+rs.getString (“@序號”)+”)”;

}

row.getCell(1).setCellValue(hetongcode);

}

//跟新工作薄,保存匹配信息

try (FileOutputStream fileOut = new FileOutput Stream(file)) {

wb.write(fileOut);

fileOut.close();

}

//封裝類select

public static ResultSet select(String daytime, String name, String money) throws SQLException {

//封裝查詢語句SQL

String SQL=”select from WHERE (`日期`-“+daytime+”)>=0 AND (`日期`-“+daytime+”) <=5 AND ((`支出`-“+money+”)=0 or (`支出`-“+ money+”)>1500) AND `戶名` LIKE \””+name +”\””;

//執行查詢,返回查詢結果集rs

ResultSetrs=

statement.executeQuery(SQL);

return rs;

}

//封裝類getCellContent讀取cell內容,返回String方便統一處理

public static String getCellContent(Cell cell){

String content=null;

CellType type = cell.getCellTypeEnum();

If(type.equals(CellType.NUMERIC)){

Content=cell.getNumericCellValue()+””;

}

….....

Return content;

}

}

2? 兩種方案思路

準備好兩個Excel表,分別為TEST.xlsx和MATCH.xlsx.目的是將TEST中的數據內容讀出與MATCH中的數據按條件匹配,將匹配結果寫入TEST中記錄下來。

方案一:用Java解析兩張表,逐行提取TEST中的一條數據與MATCH逐行匹配,匹配記錄寫入TEST中,需匹配數據大小為t,匹配次數為m*t,t為TEST的數據行數,m為MATCH的數據行數。

方案二:使用Navicat將MATCH的內容導入數據庫中,POI解析TEST表,逐行提取TEST某一條數據,根據匹配條件編寫SQL語句,將查詢結果解析后寫入TEST表中做匹配記錄。需匹配數據大小為t,匹配次數和查詢數據庫次數一致,也為t。

3? 比較執行情況

兩種方案分別在下列3種實驗條件下執行比較,3種實驗下的MATCH的數據量一致,均為7000行數據量大小。首先控制匹配條件為2,測試方案一與方案二在TEST大小為1000和9000不同的執行情況。然后控制TEST大小為1000,考慮條件復雜度在2和3的兩種條件下,方案一與方案二的執行情況。詳細比較執行情況如表1,以下數據均為測試多次后采用的平均值記錄。

4? 結果分析

橫向比較方案一在3種實驗下的執行情況可以看出,平均匹配一次的時間基本不變,花費時間都小于1ms。單改變TEST數據量為原來的9倍,平均匹配一條的時間增大1.3倍,總時間增大10倍有余。單改變匹配條件復雜度增加1,平均匹配一條的時間增加52%,總時間增加45%。方案二在執行上增加了連接數據庫的時間,3種實驗連接數據庫時間差距不大,均低于500ms。匹配一條數據平均花費不受TEST數據量大小的影響,并且總花費時間不到原來的8倍。單控制條件復雜度增加1,平均匹配一條的時間增加10%,總時間增加不到9%。

縱向比較方案一與方案二在3種實驗下的執行情況可以得出,方案二無論是在平均匹配一條數據時間花費,還是總的時間花費,均比方案一少的多。

可見方案二要優于方案一。

5? 方案二的進一步優化

方案二的總時間花費基本有兩部分組成,一部分是前期的連接數據庫,二是數據匹配時間。因此,考慮優化連接數據庫的方法,有利于減少匹配時間,但對整體實驗的優化效果不明顯;考慮優化數據匹配,而數據匹配時間約等于在數據庫查詢的時間,若是優化數據庫查詢,將大幅提升整體的執行情況。根據數據庫數據存儲的特殊結構,在查詢SQL涉及到的字段上建立索引,可以提高查詢響應效率;在未建立索引的情況下查詢,數據庫將遍歷表中所有信息,將所有信息與TEST表上的信息比較匹配,掃描未涉及的信息顯然浪費了查詢時間。在數據庫上對查詢所涉及到的字段建立索引,數據庫根據查詢語句SQL中的條件1快速定位到與條件1相關的字段1,返回滿足條件1的數據行號;根據條件2,在之前操作的基礎上直接定位到與之相關的字段2,此時返回的數據行既滿足條件1,又滿足條件2;最后將滿足查詢條件的結果返回rs。使用索引,找到了匹配的數據行在哪兒終止,并能夠忽略其它的數據行,快速的定位到匹配的值,節約了大量的搜索時間,也就減少了匹配時間[4]。建立索引前后實驗對比數據如表2所示。

結果顯示,建立索引與未建立索引相比,建立索引將少量增加連接數據庫的時間。未建立索引數據庫查詢一次平均花費大約在10ms一條,而建立索引后,數據庫查詢一次平均花費不到1ms,匹配一條平均花費的時間約為1ms,建立索引花費的總時間只占未建立索引的26%,匹配優化效果顯著。

6? 結? 論

本文就Excel兩表匹配問題,提出了方案一與方案二,通過實驗測試數據,得出:方案二無論是在增加TEST數據量方面,還是增加條件復雜度方面,所花的時間均比方案一少,若是匹配條件沒有涉及MATCH包含的所有信息,根據匹配要求,在數據庫中對涉及到的字段建立索引,可以大大降低匹配時間,十分高效的得到匹配結果。

參考文獻:

[1] 李國雁.EXCEL中數據的自動匹配 [J].軟件工程師,2013(12):21-22.

[2] 佘向飛,于萍.基于Java反射機制與POI自動導出excel的實現 [J].數字技術與應用,2014(9):94.

[3] 陶袁,張志軍.XML文檔在采集和處理Excel文檔中的應用 [J].白城師范學院學報,2005(3):32-34.

[4] 殷麗,徐海華,吳海濤.MySQL查詢優化技術——索引 [A].第八屆工業儀表與自動化學術會議論文集 [C].北京:中國儀器儀表學會,2007:490-491.

主站蜘蛛池模板: 尤物午夜福利视频| 色成人亚洲| 国产精品成人免费视频99| 国产高潮流白浆视频| 国产97区一区二区三区无码| 国产91色在线| 在线国产三级| 国产污视频在线观看| 在线观看免费黄色网址| 色悠久久综合| 露脸一二三区国语对白| 日本免费精品| 国产免费好大好硬视频| 久草国产在线观看| 天天综合网色| 久久99国产综合精品女同| 欧美h在线观看| 欧美一区二区啪啪| 久久久久亚洲av成人网人人软件| 天天摸天天操免费播放小视频| 成人免费网站在线观看| 全部免费特黄特色大片视频| 真实国产乱子伦高清| 国产亚洲精久久久久久久91| 色综合天天操| 色精品视频| 国产自在线拍| 中文字幕第4页| 欧美国产在线看| 国产精品hd在线播放| 国产特级毛片aaaaaaa高清| 手机在线国产精品| 99久久99视频| 国产一级一级毛片永久| 国产精品无码久久久久久| 欧美激情视频一区二区三区免费| 在线看片中文字幕| 欧美日韩一区二区在线免费观看 | 国产主播在线观看| 狼友视频国产精品首页| 女同国产精品一区二区| 国产在线一区视频| 久久夜夜视频| 色男人的天堂久久综合| 国产va在线| 黄色网页在线观看| 欧美亚洲国产视频| 亚洲免费黄色网| 欧美另类精品一区二区三区| 国产精品大尺度尺度视频| 蜜臀av性久久久久蜜臀aⅴ麻豆| 欧美一级黄片一区2区| 欧美不卡视频在线观看| 日韩专区欧美| 无码视频国产精品一区二区| 国产午夜在线观看视频| 国产视频一区二区在线观看| 91国内在线观看| 黄色福利在线| av一区二区人妻无码| 精品国产电影久久九九| 呦女亚洲一区精品| 国产区在线看| 亚洲中久无码永久在线观看软件| 波多野结衣视频一区二区| 91亚洲影院| 久久亚洲国产最新网站| 成人综合网址| 熟女日韩精品2区| 国产黄在线观看| 啪啪永久免费av| 91香蕉视频下载网站| 亚洲无线国产观看| 日韩成人午夜| 国产丝袜无码精品| 色亚洲成人| 伊人激情综合网| 亚洲婷婷六月| 亚洲狠狠婷婷综合久久久久| 国产性生大片免费观看性欧美| 九九线精品视频在线观看| 国产亚卅精品无码|