为POI Java XLSX使用hashmap

时间:2014-05-22 06:22:36

标签: java apache-poi

我一直在尝试编辑我的代码,以允许上传XLSX文件并能够在网站上阅读。但经过无数次尝试,我输入XLSX文件的数据无法在网站上捕获。 (例如:从网站下载XLSX模板后,我可以在XLSX文件中输入我想要的任何内容,并能够将其再次上传到网站,因此我无需通过单击&#继续添加新数据34;新的"每一次。我可以一次输入XLSX文件中的所有内容并立即上传)

我被告知要使用hashmap,但我不确定它的工作方式。我目前的代码只允许网站捕获标题标题,我不认为使用jxl。
删除那些具有jxl的代码时,我遇到了一些错误(以红色下划线)。

 public HashMap getConstructJXLList_xlsx(UploadedFile File, int Sheetindex) {
    String _LOC = "[PageCodeBase: getConstructJXLList]";
    HashMap _m = new HashMap();

    InputStream _is = null;
    try {
        _is = File.getInputstream();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    XSSFWorkbook workbook;
     XSSFSheet s;

    try {
        workbook = new XSSFWorkbook(_is);
        s = workbook.getSheetAt(Sheetindex);
    } catch (Exception e) {
        System.out.println(_LOC + "1.0 " + " Test:");

        int _totalc = getColumns(); //getColumns is being underline in red
        int _totalr = getRows();    //getRows is being underline in red

        // Header r=0
        String[] _st = new String[_totalc];
        //XSSFSheet sheet = null;
        for (int _c = 0; _c < _totalc; _c++) {
           _st[_c] = getCell(_c, 0); //getCell is being underline in red

        }

    _m.put("HEADER", _st);
    System.out.println(_LOC + "1.0 " + " _m:" + _m);

    // Data r=1 thereafter
    List _l = new ArrayList();
    for (int _r = 1; _r < _totalr; _r++) {
        Object[] _o = new Object[_totalc];
        String _s_r = null;

        for (int _c = 0; _c < _totalc; _c++) {
            _o[_c] = getCell(_c, _r);
            String _cn = _o[_c].getClass().getName();
            String _s_c = null;

            if (!isEmptyNull(_s_c)) {
                _s_r = "record_available";
            }
        }

        if ((_o != null) && (_o.length != 0)) {
            _l.add(_o);

        }
    }
    _m.put("DATA", _l);
    System.out.println(_LOC + "1.0 " + " _m:" + _m);
    }
    return _m;
}

你介意帮我解决这个问题吗?为什么网站上没有任何数据被捕获?
显示的错误是&#34;方法getColumns / getCell / getRows未定义类型PageCodeBase。&#34;并且给出的帮助/快速修复是创建一个新方法。但是在创建新方法之后,我不确定在方法中添加什么。尝试过各种各样的例子(http://snippetjournal.wordpress.com/2014/02/05/read-xlsx-using-poi/),但我似乎无法解决这个问题。

3 个答案:

答案 0 :(得分:2)

我建议您使用apache POI api

中的这些类来管理de excel文件
org.apache.poi.ss.usermodel.Cell;
org.apache.poi.ss.usermodel.Row;
org.apache.poi.ss.usermodel.Sheet;
org.apache.poi.ss.usermodel.Workbook;
org.apache.poi.ss.usermodel.WorkbookFactory;

而不是那些XSSFWorkbook,XSSFSheet ...

并且在访问文件输入流时也尝试这样做:

FileInputStream input = new FileInputStream(new File("C:\\Users\\admin\\Desktop\\Load_AcctCntr_Template.xlsx"));
Workbook workBook = WorkbookFactory.create(stream);
workBook.getSheetAt(0);

答案 1 :(得分:1)

使用它。

FileInputStream input = new FileInputStream(new File("C:/Users/admin/Desktop/Load_AcctCntr_Template.xlsx"));
Workbook wb = WorkbookFactory.create(input);

如user3661357中提到的那样。使用 工作簿而不是XSSFWorkbook。 Sheet而不是XSSFSheet。 等。

还读这个 Getting Exception(org.apache.poi.openxml4j.exception - no content type [M1.13]) when reading xlsx file using Apache POI?

*提示&gt;在netbeans中使用ALT + SHIFT + I来加载必要的包。

一个工作示例

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
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.ss.usermodel.WorkbookFactory;

公共类POITest {

public static void test() {

    try {
        FileInputStream input = new FileInputStream(new File("C:/Users/kingslayer/Desktop/test/a.xlsx"));
        Workbook wb = WorkbookFactory.create(input);
        Sheet s = wb.getSheetAt(0);

        Iterator<Row> rows = s.rowIterator();

        while (rows.hasNext()) {
            Row row = rows.next();
            Iterator cells = row.cellIterator();
            while (cells.hasNext()) {
                Cell cell = (Cell) cells.next();

                if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
                    System.out.print(cell.getStringCellValue() + "t");
                } else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                    System.out.print(cell.getNumericCellValue() + "t");
                } else if (cell.CELL_TYPE_BLANK == cell.getCellType()) {
                    System.out.print("BLANK ");
                } else {
                    System.out.print("Unknown cell type");
                }
            }
            input.close();
        }
    } catch (IOException | InvalidFormatException ex) {
        Logger.getLogger(POITest.class.getName()).log(Level.SEVERE, null, ex);
    }

}

public static void main(String[] args) {
    test();
}

}

项目路径上必须具有的所有库。
commons-codec-1.5.jar, commons-logging-1.1.jar, dom4j-1.6.1.jar, junit-3.8.1.jar, log4j-1.2.13.jar, poi-3.9-20121203.jar, poi-excelant-3.9-20121203.jar, poi-ooxml-3.9-20121203.jar, poi-ooxml-schemas-3.9-20121203.jar, poi-scratchpad-3.9-20121203.jar, stax-api-1.0.1.jar, xmlbeans-2.3.0.jar,

答案 2 :(得分:0)

1)因为你没有使用它而摆脱POIFSFileSystem fs = new POIFSFileSystem(input);

2)在行

的第一次迭代后调用input.close();