简体   繁体   中英

Import Excel File using file path

import java.awt.*; 
import java.awt.event.*;
import java.io.File; 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Vector; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class excelTojTable extends JFrame { 
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    static JTable table; 
    static JScrollPane scroll; 
    // header is Vector contains table Column 
    static Vector headers = new Vector(); 
     static Vector data = new Vector();
    // Model is used to construct 
    DefaultTableModel model = null; 
    // data is Vector contains Data from Excel File static Vector data = new Vector();
    static JButton jbClick; 
    static JFileChooser jChooser; 
    static int tableWidth = 0; 
    // set the tableWidth 
    static int tableHeight = 0; 
    // set the tableHeight 
    public excelTojTable() 
    { 
        super("Import Excel To JTable");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        JPanel buttonPanel = new JPanel(); 


        //buttonPanel.setBackground(Color.white); 

        /* 
         *
         * jChooser = new JFileChooser(); 
        jbClick = new JButton("Select Excel File"); 
        buttonPanel.add(jbClick, BorderLayout.CENTER); 

        // Show Button Click Event 
        jbClick.addActionListener(new ActionListener() 
        { 
            @Override public void actionPerformed(ActionEvent arg0) 
            { 
            jChooser.showOpenDialog(null); 
            jChooser.setDialogTitle("Select only Excel workbooks");
            File file = jChooser.getSelectedFile();         

            if(file==null)
                {
                    JOptionPane.showMessageDialog(null, "Please select any Excel file.", "Help",JOptionPane.INFORMATION_MESSAGE); 
                    return;
                }
            else if(!file.getName().endsWith("xls"))
                { 
                JOptionPane.showMessageDialog(null, "Please select only Excel file.", "Error",JOptionPane.ERROR_MESSAGE); 
                }
            else 
                { 
                    fillData(file);
                    model = new DefaultTableModel(data, headers); 
                    tableWidth = model.getColumnCount() * 150; 
                    tableHeight = model.getRowCount() * 25; 
                    table.setPreferredSize(new Dimension( tableWidth, tableHeight)); table.setModel(model); 
                } 
            } 
        }
        );

        *
        *
        */

        table = new JTable(); 
        table.setAutoCreateRowSorter(true); 
        model = new DefaultTableModel(data, headers);
        table.setModel(model); 
        table.setBackground(Color.pink);
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
        table.setEnabled(false); 
        table.setRowHeight(25); 
        table.setRowMargin(4); 
        tableWidth = model.getColumnCount() * 150; 
        tableHeight = model.getRowCount() * 25;
        table.setPreferredSize(new Dimension( tableWidth, tableHeight)); 
        scroll = new JScrollPane(table); scroll.setBackground(Color.pink);
        scroll.setPreferredSize(new Dimension(300, 300)); 
        scroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
        getContentPane().add(buttonPanel, BorderLayout.NORTH); 
        getContentPane().add(scroll, BorderLayout.CENTER); 
        setSize(600, 600); 
        setResizable(true); setVisible(true); 
    } 
    /** * Fill JTable with Excel file data. * * @param file * file :contains xls file to display in jTable */ 
    void fillData(File file) 
    { 
        int index=-1;
        HSSFWorkbook workbook = null; 
        try { 
             try { 
                   FileInputStream inputStream = new FileInputStream (new File("C:\\A.xls"));
                   workbook = new HSSFWorkbook(inputStream);
                 } 
             catch (IOException ex) 
                { 
                    Logger.getLogger(excelTojTable.class. getName()).log(Level.SEVERE, null, ex);
                } 

             String[] strs=new String[workbook.getNumberOfSheets()];
             //get all sheet names from selected workbook
             for (int i = 0; i < strs.length; i++)
             {                  
                 strs[i]= workbook.getSheetName(i);

             }  

             JFrame frame = new JFrame("Input Dialog");
             String selectedsheet = (String) JOptionPane.showInputDialog(frame, "Which worksheet you want to import ?", "Select Worksheet",
                 JOptionPane.QUESTION_MESSAGE, 
                 null, 
                 strs, 
                 strs[0]);


             if (selectedsheet!=null)
             {
                 for (int i = 0; i < strs.length; i++)
                 {                  
                     if (workbook.getSheetName(i).equalsIgnoreCase(selectedsheet))
                         index=i;

                 }  

                 HSSFSheet sheet = workbook.getSheetAt(index);
                 HSSFRow row=sheet.getRow(0);
                 headers.clear(); 
                 for (int i = 0; i < row.getLastCellNum(); i++) 
                    { 
                        HSSFCell cell1 = row.getCell(i); 
                        headers.add(cell1.toString());
                    } 
                 data.clear(); 
                 for (int j = 1; j < sheet.getLastRowNum() + 1; j++) 
                 { 
                     Vector d = new Vector(); 
                     row=sheet.getRow(j);
                     int noofrows=row.getLastCellNum();
                     for (int i = 0; i < noofrows; i++) 
                     {                       
                         //To handle empty excel cells
                         HSSFCell cell=row.getCell(i, org.apache.poi.ss.usermodel.Row.CREATE_NULL_AS_BLANK );                        
                         System.out.println (cell.getCellType());                        
                         d.add(cell.toString()); 

                     } 
                     d.add("\n"); 
                     data.add(d); 
                 } 
             }
             else
             {               
                 return;
             }
        } 
        catch (Exception e) 
        { 
        e.printStackTrace(); 
        } 
    } 
    public static void main(String[] args) {
        new excelTojTable(); 
        } 

}

I want to import Excel (.xls) file to JTable, the code works correctly with jChooser but I don't need to use using this, I want to realize this process just using file path directly. I tried to do that but it's return null. Where is the missing point in my code

The file which is only readable will be provided by me ..

In that case, it will be simplest to supply the spreadsheet as an and access it by URL. Once the URL is properly formed, get an input stream and load it using the HSSFWorkbook(InputStream, boolean) constructor.

See the info. page for embedded resource for details on getting the correct URL.

Note that an embedded resource is not available as a File object.

the code works correctly with jChooser

The file chooser will provide the full path and directory;

FileInputStream inputStream = new FileInputStream (new File("C:\\A.xls"));

I would guess you need to specify the proper directories where the file is contained.

So retest using the file chooser and add debug code to display the File object. Then take that string value and create your File object. This way you know you coded the path correctly.

The question is why do you want to do this. You should not use hard coded data in a program.

Edit:

So basically you need to rewrite the ActionListener code. The logic should be something like:

File file = getFile();
System.out.println(file); // make sure the File object is the same in both cases.
fileData( file );

So then in the getFile() method you add your logic to get a File object. First you can try to simply return the hardcoded File object. Then you can then change the code to get the File from the file chooser. If you return the same File object is both cases then the code will work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM