2017-01-07 12 views
0
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(); 
     } 

} 

Excel(.xls)ファイルをJTableにインポートすると、コードはjChooserで正しく機能しますが、これを使用する必要はありません。直接ファイルパス。私はそれをやろうとしましたが、それはnullを返します。私のコードで不足している点が、ファイルパスを使用してExcelファイルをインポートする

答えて

1

私によって提供されるだけ読めるファイル..その場合は

、それはとしてスプレッドシートを供給し、URLでアクセスするのが最も簡単でしょう。 URLが正しく形成されたら、入力ストリームを取得し、HSSFWorkbook(InputStream, boolean)コンストラクタを使用してロードします。

正しいURLを取得する方法の詳細は、info. page for embedded resourceを参照してください。

埋め込みリソースはFileオブジェクトとして利用できないことに注意してください。

0

でコードがjChooser

で正しく動作する場合はファイル選択は、完全なパスとディレクトリを提供します。

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

ファイルが格納されている適切なディレクトリを指定する必要があると思います。

ファイルチューザを使って再テストし、デバッグコードを追加してFileオブジェクトを表示します。その後、その文字列値を取得し、Fileオブジェクトを作成します。この方法では、パスを正しくコーディングしていることがわかります。

なぜあなたはこれをしたいのですか?あなたは、プログラムでハードコードされたデータを使うべきではありません。

編集:

したがって、基本的にActionListenerコードを書き直す必要があります。あなたはFileオブジェクトを取得するには、あなたのロジックを追加getFile()方法でそれでは

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

:ロジックのようなものでなければなりません。まず、ハードコードされたFileオブジェクトを単に返すことができます。次に、コードを変更してファイルをファイルセレクタから取得できます。あなたが同じFileオブジェクトを返す場合、両方の場合は、コードが動作します。

+0

ファイルのパスは完全に正しいです。ファイルはそこにあります。 –

+0

@sergenboğa、ロジックの唯一の違いがFileオブジェクトの場合、コードは機能するはずです。コードを少し再構成する方法については、私の編集を参照してください。唯一の違いは、Fileオブジェクトがメソッドから返される方法です。 – camickr

+0

私は選択ツールを使って同じファイルを読むことができますが、これはこのプロジェクトの私のUIプロジェクトの一部になります。私は選択者を使う必要はなく、パスからデータを更新します。 –

関連する問題