在使用poi读取之前保存excel文件的内容

我正在创build一个新的电子表格文件的应用程序。 这个想法是让用户把数据input到这个excel文件中并让程序读取它。 然而,问题是,数据input并保存后(按下excel中的保存图标)程序只是看不到这个数据,它仍然像没有进入那里一样。 我需要的是用poi来保存程序。 有什么build议么?

这里是代码:

我的贵族class:

public class GUI extends JFrame{ private Panel buttonHolder; private Button crossReference; private Button generateHPD; private CrossReference ref = null; private XSSFWorkbook log; private XSSFWorkbook sheet; private XSSFSheet logSheet; private XSSFSheet sSheet; public GUI () throws Exception{ this.setTitle("NYWM Cross Reference Application"); this.setSize(400,100); this.setVisible(true); this.setLocationRelativeTo(null); buttonHolder = new Panel (new BorderLayout()); this.add(buttonHolder); crossReference = new Button ("CrossReference"); generateHPD = new Button ("Generate HPD"); buttonHolder.add(crossReference, BorderLayout.NORTH); buttonHolder.add(generateHPD, BorderLayout.SOUTH); logSheet = createExcelSheet ("D:/Log.xlsx", "Log"); sSheet = createExcelSheet("D:/Spreadsheet.xlsx", "Spreadsheet"); crossReference.addActionListener(new crossReferenceButtonListener()); generateHPD.addActionListener(new generateHPDButtonListener()); } public XSSFSheet getLogSheet() { return logSheet; } public XSSFSheet getsSheet() { return sSheet; } private XSSFSheet createExcelSheet (String path, String fileName) throws Exception{ try{ FileOutputStream out = new FileOutputStream (path); XSSFWorkbook wb = new XSSFWorkbook (); XSSFSheet sheet = wb.createSheet(fileName); wb.write(out); Process p = Runtime.getRuntime().exec( "rundll32 url.dll, FileProtocolHandler " + path); return sheet; } catch (Exception e){ throw e; } } private class crossReferenceButtonListener implements ActionListener { public void actionPerformed (ActionEvent event){ try { XSSFSheet sSheet = getsSheet(); XSSFSheet logSheet = getLogSheet(); ref = new CrossReference(); //ref = new CrossReference (log.getSheetAt(0), sheet.getSheetAt(0)); ref.CrossReferenceCont(logSheet, sSheet); ref.CrossRef(); JOptionPane.showMessageDialog(null, "Cross Reference was successful!"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

CrossReferenceCont方法

 public void CrossReferenceCont(XSSFSheet wsLog, XSSFSheet wsSheet) throws Exception { log = new PropertyList(wsLog); sheet = new PropertyList(wsSheet); logArray = log.getPropertyList(); sheetArray = log.getPropertyList(); } 

属性列表方法:

 public PropertyList(XSSFSheet ws) throws Exception{ try{ //File excel = new File (excelFilePath); //FileInputStream fis = new FileInputStream (excel); // XSSFWorkbook wb = new XSSFWorkbook(fis); int rowNum = ws.getLastRowNum(); System.out.println ("Number of rows is " + rowNum); propertyList = new ArrayList <Property>(rowNum); for (int i = 0; i <= rowNum; i++){ property = new Property (ws, i); propertyList.add(new Property(property)); } 

最后是属性方法:这里程序崩溃

 public Property(XSSFSheet sheet, int row) throws FileNotFoundException { Cell cell = sheet.getRow(row).getCell(0); //crashes here, nullPointer int type = cell.getCellType(); //setting the address------------------------------------------------- if (type == Cell.CELL_TYPE_STRING) { address = cell.getStringCellValue(); } else if (type == Cell.CELL_TYPE_NUMERIC) { int addressTemp = (int) cell.getNumericCellValue(); address = String.valueOf(addressTemp); } 

不知道我是否理解正确。 这是否解决您的问题

我<rowNum

而不是getSheet(),做一个getFilePath()。 然后使用该path获取工作表。

 File file = new File(filePath); Workbook wb = WorkbookFactory.create(FileUtils.openInputStream(file)); Sheet templateSheet = templateWorkbook.getSheetAt(0);