Java 在使用poi读取excel文件之前,先保存其内容
我正在制作一个应用程序,创建了2个新的电子表格文件。用户可以将数据输入excel文件,并让程序读取。然而,问题是,在数据输入并按excel中的保存图标保存后,程序只是看不到这些数据,就好像没有输入数据一样。我需要的是用poi编程保存它。有什么建议吗 代码如下: 我的gui类:Java 在使用poi读取excel文件之前,先保存其内容,java,excel,user-interface,apache-poi,Java,Excel,User Interface,Apache Poi,我正在制作一个应用程序,创建了2个新的电子表格文件。用户可以将数据输入excel文件,并让程序读取。然而,问题是,在数据输入并按excel中的保存图标保存后,程序只是看不到这些数据,就好像没有输入数据一样。我需要的是用poi编程保存它。有什么建议吗 代码如下: 我的gui类: public class GUI extends JFrame{ private Panel buttonHolder; private Button crossReference; private Button gen
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();
}
}
}
交叉参考点法
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));
}
不知道我是否理解正确。这能解决你的问题吗
i
File file = new File(filePath);
Workbook wb = WorkbookFactory.create(FileUtils.openInputStream(file));
Sheet templateSheet = templateWorkbook.getSheetAt(0);
这只会有助于避免过度。但实际的问题是,我需要java能够读取我输入的行。java创建一个新的空excel文件,其中没有任何内容。用户将数据输入到文件中,保存并按下交叉引用按钮,但即使输入了数据,java也看不到文件中的任何数据,因此问题是如何让java看到这些数据。我如何正确地保存它???在交叉引用后,您是否正在向流中写入内容?wb.writeout的类型;不,当我创建工作簿时,它会在代码中查看,写完书后,我会输入内容,但程序看不到内容。如果使用程序保存数据,则必须重新编写。如果您是手动执行此操作,则需要使用文件路径再次读取输入流。您能在此处帮助我编写代码吗。。。我试图在保存workBookname.writeout后使用它进行写入,但如果您有一个文件对象,那么它将无法工作!如中所述,使用文件的内存比通过InputStream的内存低
File file = new File(filePath);
Workbook wb = WorkbookFactory.create(FileUtils.openInputStream(file));
Sheet templateSheet = templateWorkbook.getSheetAt(0);