我一直在尝试编辑我的代码,以允许上传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/),但我似乎无法解决这个问题。
答案 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。 等。
*提示&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();