• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    運用jxl將復(fù)雜excel報表導(dǎo)入數(shù)據(jù)庫的設(shè)計與實現(xiàn)

    2014-12-31 00:00:00曾秋麗李娜
    數(shù)字化用戶 2014年11期

    【摘 要】在許多檢測單位的辦公自動化系統(tǒng)中,需要使用到檢測單位的大量檢測數(shù)據(jù),而這些數(shù)據(jù)存儲于excel文件中,由于不同類型產(chǎn)品的檢測報表存在一定差異,使用簡單的方式讀取excel文件存在代碼可重用性差的問題。在分析各種報表的結(jié)構(gòu)后,運用jxl和xml技術(shù),實現(xiàn)了動態(tài)的將excel報表導(dǎo)入數(shù)據(jù)庫的功能,并且適用于各種不同的報表結(jié)構(gòu)。

    【關(guān)鍵詞】excel;檢測報表;jxl;xml

    0 引言

    在日常工作中,需要將大量包含檢測數(shù)據(jù)的excel檢測報表導(dǎo)入到許多檢測單位的辦公自動化系統(tǒng),為了方便對檢測數(shù)據(jù)的使用,可以使用jxl來對excel文件進行操作。jxl是一個廣泛用于讀寫excel文件的優(yōu)秀的開源工具。Jxl提供了一種簡單的讀取excel文件的方法,該方法的基本思想是:通過jxl中的Workbook獲取表中的sheet,然后通過sheet獲取表中的每一個單元格cell,最后調(diào)用cell的getContents()方法獲取數(shù)據(jù)。該方法可以快速的獲取數(shù)據(jù),但獲取的數(shù)據(jù)不能被靈活的使用。為了靈活使用表中的數(shù)據(jù),實現(xiàn)對表中的每一個數(shù)據(jù)進行操作,可將表中的數(shù)據(jù)存入數(shù)據(jù)庫中,然后系統(tǒng)便可自由的在數(shù)據(jù)庫中獲取相應(yīng)的信息。

    基于以上分析,結(jié)合各種檢測報表的結(jié)構(gòu)之間存在的共同特性,運用xml作為中介,實現(xiàn)了動態(tài)將報表導(dǎo)入數(shù)據(jù)庫的功能,解決了代碼重用性差的問題,系統(tǒng)使用人員只需要知道表結(jié)構(gòu),就可以將不同報表動態(tài)存入數(shù)據(jù)庫中,不需要懂得代碼編寫。

    1將excel檢測報表中數(shù)據(jù)導(dǎo)入xml

    通過對不同檢測報表分析,檢測報表與具有常見報表相同的結(jié)構(gòu),包括4個部分:標(biāo)題、表頭、表體、表尾。標(biāo)題、表頭及表尾具有一鍵一值的關(guān)系,表體中的內(nèi)容可由橫縱坐標(biāo)共同確定。

    根據(jù)報表結(jié)構(gòu)特點以及具有的鍵值特性,將報表抽象為3個Java類,KeyNameSet類封裝鍵名、KeyValueSet類封裝每個鍵對應(yīng)的值、TableNameSet類用于封裝不同的表名。

    根據(jù)以上分析,按照表格特點配置xml文件,將表格中數(shù)據(jù)存入指定的xml文件中。這里的配置并不需要配置人員懂得xml的運用,只需要根據(jù)程序運行提升進行配置即可,下面給出一個配置舉例。

    輸入選擇的sheet的索引位置:0

    輸入您要配置tag:table

    輸入您要配置key:報表1

    結(jié)束xml的配置嗎?yes/no:no

    輸入您要配置tag:head

    輸入您要配置key:0001表1A

    輸入您的值x偏移量:

    輸入您的值y偏移量:

    結(jié)束xml的配置嗎?yes/no:no

    輸入您要配置tag:head

    輸入您要配置key:A

    輸入您的值x偏移量:1

    輸入您的值y偏移量:0

    結(jié)束xml的配置嗎?yes/no:yes

    配置成功,已生成配置!

    通過以上配置,將生成一個xml配置文件,文件內(nèi)容如下:

    <?xml version=\"1.0\" encoding=\"GBK\"?>

    配置中tag即表示xml文件中的標(biāo)簽,本文中tag的取值有table(標(biāo)題),head(表頭),body(表體),foot(表尾),body-col(表體列),body-row(表體行),這些定義是根據(jù)前面分析的表結(jié)構(gòu)來定義的。偏移量表示所存入的鍵對應(yīng)的值所在excel表中的位置。

    2將xml中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫

    通過兩個步驟實現(xiàn)該功能,第一步,將前一節(jié)配置所得的xml文件中的所有鍵值對都存入數(shù)據(jù)庫;第二步,根據(jù)存入數(shù)據(jù)庫中的鍵值,查找excel文件中的表格內(nèi)容,存入數(shù)據(jù)庫。

    /*將xml配置存入數(shù)據(jù)庫*/

    public static void toStroeKeys(String xmlFile){

    File file = new File(xmlFile);

    SAXReader reader = new SAXReader();

    Document doc = 1;

    try {

    doc = reader.read(file);

    } catch (DocumentException e) {

    e.printStackTrace();

    }

    XmlLoader tbLoader = XmlManeger.getTable(doc);

    ArrayList heads = XmlManeger.getKeys(doc,XmlManeger.head);

    Connection conn = DbUtil.getConn();

    … …

    int tableId = DataService.getTableId(tbLoader.getKey().toString()).getId();

    for(int i =0;i

    heads.get(i).setTableId(tableId);

    DataService.addKey(heads.get(i),conn);

    }

    ……

    DbUtil.close(conn);

    }

    根據(jù)報表結(jié)構(gòu),表頭與表尾中存在有些該鍵沒有對應(yīng)的取值的情況,因而在程序?qū)崿F(xiàn)時加入了一個type屬性來判別鍵所對應(yīng)的取值是否存在,當(dāng)type取值為1時,表示該鍵有對應(yīng)的取值,則將該值取出,存入數(shù)據(jù)庫,以表頭存入數(shù)據(jù)庫為說明。

    /*將excel數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫*/

    /*------------表--頭---------------/*

    File file = new File(excelFile);

    Workbook book = 1;

    book = Workbook.getWorkbook(file);

    … …

    ArrayList heads=DataService.getHeads(t.getId());

    KeyValueSet kSet = 1;

    for(int i=0;i

    if(heads.get(i).getType()==1){

    kSet = new KeyValueSet();

    cell = sheet1.getCell(heads.get(i).getX()+heads.get(i).getPx(),heads.get(i).getY()+heads.get(i).getPy());

    ……

    kSet.setKeyValue(cell.getContents());

    DataService.addValue(kSet, conn);

    }

    }

    3結(jié)語

    通過對報表結(jié)構(gòu)分析,總結(jié)歸納了報表的一般結(jié)構(gòu),運用xml作為中間的過渡,結(jié)合 jxl實現(xiàn)了動態(tài)的將存于excel中的復(fù)雜的報表結(jié)構(gòu)中的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的功能,導(dǎo)入數(shù)據(jù)的操作人員不需要知道程序代碼如何編寫,只需了解各種報表的結(jié)構(gòu),根據(jù)程序的提示,配置好報表結(jié)構(gòu)即可。

    該功能在許多涉及與報表相關(guān)操作的系統(tǒng)中都可以使用,因而在下一步的工作中,可以進一步實現(xiàn)該功能的可視化操作,使其成為一個小的工具應(yīng)用程序,供廣大的需要運用該功能的開發(fā)人員使用。

    參考文獻:

    [1] JXL. Java Excel API (XML) 1.1 [EB/OL]. http://www.andykhan.com/jexcelapi/, 2003-07.

    [2] 陽瑞發(fā),馮彬.一種導(dǎo)出復(fù)雜Excel報表的設(shè)計與實現(xiàn).計算機系統(tǒng)應(yīng)用[J], 2013,22(2):155-157.

    [3] 張明輝,王清心,王正玉.基于Java Excel API的數(shù)據(jù)庫數(shù)據(jù)導(dǎo)入導(dǎo)出方法研究與實現(xiàn).現(xiàn)代電子技術(shù)[J],2012,35(4):45-47.

    作者簡介:

    曾秋麗 1990.9 貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院 電子與通信工程專業(yè)

    李娜 1988.8 貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院 電子與通信工程專業(yè)

    无锡市| 德化县| 南岸区| 子洲县| 全南县| 西城区| 乐清市| 永州市| 寻乌县| 福清市| 绿春县| 苏尼特左旗| 合作市| 寿阳县| 咸阳市| 中方县| 汝阳县| 从江县| 泰来县| 黄浦区| 平陆县| 印江| 宜兰县| 惠来县| 齐齐哈尔市| 福安市| 松溪县| 阿荣旗| 宝坻区| 新化县| 日土县| 普洱| 平罗县| 民乐县| 韶关市| 柳林县| 福建省| 平顶山市| 广水市| 屏东县| 黄平县|