<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 56, comments - 54, trackbacks - 0, articles - 4
       ::  ::  :: 聯(lián)系 :: 聚合  :: 管理

    如何用Java得到Excel中Formula的值

    Posted on 2006-05-23 14:47 Terry的Blog 閱讀(4785) 評(píng)論(3)  編輯  收藏 所屬分類: java語(yǔ)言
    工具1:POI
    POI是常用的讀取Office文件的開(kāi)源工具。但是在它正式發(fā)布的版本中沒(méi)有提供得到Excel中Formula值的功能。
    這個(gè)POI還在開(kāi)發(fā)中的功能。相關(guān)信息 請(qǐng)看http://jakarta.apache.org/poi/hssf/eval.html

    工具2:JExcelAPI
    Java Excel API - A Java API to read, write, and modify Excel spreadsheets
    http://jexcelapi.sourceforge.net/
    目前的最新版本是2.6?

    Some Features
    * Reads data from Excel 95, 97, 2000, XP, and 2003 workbooks
    * Reads and writes formulas (Excel 97 and later only)
    * Generates spreadsheets in Excel 2000 format
    * Supports font, number and date formatting
    * Supports shading, bordering, and coloring of cells
    * Modifies existing worksheets
    * Is internationalized, enabling processing in almost any locale, country, language, or character encoding (formulas are currently only supported in English, French, * * Spanish, and German, but more can be added if translated)
    * Supports copying of charts
    * Supports insertion and copying of images into spreadsheets
    * Supports logging with Jakarta Commons Logging, log4j, JDK 1.4 Logger, etc
    ...and much more

     
    ??1?import?java.io.BufferedWriter;
    ??2?import?java.io.File;
    ??3?import?java.io.IOException;
    ??4?import?java.io.OutputStream;
    ??5?import?java.io.OutputStreamWriter;
    ??6?import?java.io.UnsupportedEncodingException;
    ??7?
    ??8?import?java.util.ArrayList;
    ??9?import?java.util.Iterator;
    ?10?
    ?11?import?jxl.Cell;
    ?12?import?jxl.CellType;
    ?13?import?jxl.FormulaCell;
    ?14?import?jxl.Sheet;
    ?15?import?jxl.Workbook;
    ?16?import?jxl.biff.CellReferenceHelper;
    ?17?import?jxl.biff.formula.FormulaException;
    ?18?
    ?19?/**
    ?20??*?Goes?through?each?cell?in?the?workbook,?and?if?the?contents?of?that?cell?is?a
    ?21??*?formula,?it?prints?out?the?last?calculated?value?and?the?formula?string
    ?22??*/
    ?23?public?class?Formulas?{
    ?24?
    ?25?????public?static?void?main(String[]?args)?{
    ?26?????????String?file?=?"jxlrwtest.xls";
    ?27?????????String?encoding?=?"UTF8";
    ?28?????????try?{
    ?29?????????????Workbook?w?=?Workbook.getWorkbook(new?File(file));
    ?30?????????????Formulas?f?=?new?Formulas(w,?System.out,?encoding);
    ?31?????????????w.close();
    ?32?????????}?catch?(Exception?e)?{
    ?33?????????????e.printStackTrace();
    ?34?????????}
    ?35?????}
    ?36?
    ?37?????/**
    ?38??????*?Constructor
    ?39??????*?
    ?40??????*?@param?w
    ?41??????*????????????The?workbook?to?interrogate
    ?42??????*?@param?out
    ?43??????*????????????The?output?stream?to?which?the?CSV?values?are?written
    ?44??????*?@param?encoding
    ?45??????*????????????The?encoding?used?by?the?output?stream.?Null?or?unrecognized
    ?46??????*????????????values?cause?the?encoding?to?default?to?UTF8
    ?47??????*?@exception?java.io.IOException
    ?48??????*/
    ?49?????public?Formulas(Workbook?w,?OutputStream?out,?String?encoding)
    ?50?????????????throws?IOException?{
    ?51?????????if?(encoding?==?null?||?!encoding.equals("UnicodeBig"))?{
    ?52?????????????encoding?=?"UTF8";
    ?53?????????}
    ?54?
    ?55?????????try?{
    ?56?????????????OutputStreamWriter?osw?=?new?OutputStreamWriter(out,?encoding);
    ?57?????????????BufferedWriter?bw?=?new?BufferedWriter(osw);
    ?58?
    ?59?????????????ArrayList?parseErrors?=?new?ArrayList();
    ?60?
    ?61?????????????for?(int?sheet?=?0;?sheet?<?w.getNumberOfSheets();?sheet++)?{
    ?62?????????????????Sheet?s?=?w.getSheet(sheet);
    ?63?
    ?64?????????????????bw.write(s.getName());
    ?65?????????????????bw.newLine();
    ?66?
    ?67?????????????????Cell[]?row?=?null;
    ?68?????????????????Cell?c?=?null;
    ?69?
    ?70?????????????????for?(int?i?=?0;?i?<?s.getRows();?i++)?{
    ?71?????????????????????row?=?s.getRow(i);
    ?72?
    ?73?????????????????????for?(int?j?=?0;?j?<?row.length;?j++)?{
    ?74?????????????????????????c?=?row[j];
    ?75?????????????????????????if?(c.getType()?==?CellType.NUMBER_FORMULA
    ?76?????????????????????????????????||?c.getType()?==?CellType.STRING_FORMULA
    ?77?????????????????????????????????||?c.getType()?==?CellType.BOOLEAN_FORMULA
    ?78?????????????????????????????????||?c.getType()?==?CellType.DATE_FORMULA
    ?79?????????????????????????????????||?c.getType()?==?CellType.FORMULA_ERROR)?{
    ?80?????????????????????????????FormulaCell?nfc?=?(FormulaCell)?c;
    ?81?????????????????????????????StringBuffer?sb?=?new?StringBuffer();
    ?82?????????????????????????????CellReferenceHelper.getCellReference(c.getColumn(),
    ?83?????????????????????????????????????c.getRow(),?sb);
    ?84?
    ?85?????????????????????????????try?{
    ?86?????????????????????????????????bw.write("Formula?in?"?+?sb.toString()
    ?87?????????????????????????????????????????+?"?value:??"?+?c.getContents());
    ?88?????????????????????????????????bw.flush();
    ?89?????????????????????????????????bw.write("?formula:?"?+?nfc.getFormula());
    ?90?????????????????????????????????bw.flush();
    ?91?????????????????????????????????bw.newLine();
    ?92?????????????????????????????}?catch?(FormulaException?e)?{
    ?93?????????????????????????????????bw.newLine();
    ?94?????????????????????????????????parseErrors
    ?95?????????????????????????????????????????.add(s.getName()?+?'!'?+?sb.toString()
    ?96?????????????????????????????????????????????????+?":?"?+?e.getMessage());
    ?97?????????????????????????????}
    ?98?????????????????????????}
    ?99?????????????????????}
    100?????????????????}
    101?????????????}
    102?????????????bw.flush();
    103?????????????bw.close();
    104?
    105?????????????if?(parseErrors.size()?>?0)?{
    106?????????????????System.err.println();
    107?????????????????System.err.println("There?were?"?+?parseErrors.size()
    108?????????????????????????+?"?errors");
    109?
    110?????????????????Iterator?i?=?parseErrors.iterator();
    111?????????????????while?(i.hasNext())?{
    112?????????????????????System.err.println(i.next());
    113?????????????????}
    114?????????????}
    115?????????}?catch?(UnsupportedEncodingException?e)?{
    116?????????????System.err.println(e.toString());
    117?????????}
    118?????}
    119?}



    兩篇中文的介紹:
    http://www.chinaitpower.com/A/2005-03-03/109739.html
    http://www.myfaq.com.cn/A200507/2005-07-24/166992.html

    評(píng)論

    # re: 如何用Java得到Excel中Formula的值  回復(fù)  更多評(píng)論   

    2006-05-24 08:47 by xplucky@gmail.com
    稍微提醒一句,我以前在一個(gè)實(shí)際項(xiàng)目中使用JExcelAPI時(shí),有一個(gè)數(shù)據(jù)涉及到使用公式累加,5組數(shù)據(jù)前面4組都正確了,后面一組始終不對(duì)。當(dāng)時(shí),由于項(xiàng)目緊,沒(méi)有詳究其原因,后來(lái)用poi就沒(méi)有問(wèn)題了。 公司其他項(xiàng)目使用JExcelAPI時(shí),沒(méi)有遇到相似的問(wèn)題。
    大家如果使用JExcelAPI并涉及到數(shù)字運(yùn)算時(shí),還是稍微留心一下。

    # re: 如何用Java得到Excel中Formula的值  回復(fù)  更多評(píng)論   

    2006-05-24 11:10 by Terry的回答
    poi的問(wèn)題是自從2005年7月就再也沒(méi)推出過(guò)新版本。而老版本的功能又有所不足。JExcelAPI的最新版本2.6是2006年4月發(fā)布的。它有機(jī)會(huì)不斷修正BUG.

    # re: 如何用Java得到Excel中Formula的值  回復(fù)  更多評(píng)論   

    2008-07-31 10:03 by shiyi
    我現(xiàn)在也遇到用JXL讀number formula 數(shù)據(jù)不正確的問(wèn)題,用POI吧文件10M多很慢而且很多formula,感覺(jué)POI處理formula 不是很好,現(xiàn)在不知道怎么辦了
    主站蜘蛛池模板: 日本人成在线视频免费播放| 国产成人高清亚洲一区91| 伊人久久大香线蕉免费视频| 亚洲成网777777国产精品| 污污视频免费观看网站| 亚洲国产香蕉人人爽成AV片久久| 高潮内射免费看片| 国产精品亚洲精品日韩已方| 国产精品成人免费观看| 国产亚洲精品观看91在线| 日本免费污片中国特一级| 亚洲第一页在线视频| 91嫩草国产在线观看免费| 最新亚洲卡一卡二卡三新区| 蜜臀91精品国产免费观看| 无遮挡a级毛片免费看| 国产亚洲大尺度无码无码专线| 最近免费中文字幕中文高清| 色婷婷亚洲十月十月色天| 天天影院成人免费观看| 亚洲国产成人久久精品大牛影视| www.亚洲色图| 少妇太爽了在线观看免费视频| 亚洲手机中文字幕| 国产免费观看a大片的网站| 国产黄在线播放免费观看| 亚洲激情校园春色| 国产精品免费_区二区三区观看| 九九久久精品国产免费看小说| 亚洲av永久无码精品网站| 无码免费午夜福利片在线| 人妖系列免费网站观看| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久久久亚洲精品日久生情| 69精品免费视频| 亚洲欧美在线x视频| 亚洲Av无码专区国产乱码DVD | 亚洲精品免费在线| 日韩高清免费在线观看| 久久国产免费观看精品| 亚洲成a人无码av波多野按摩|